diff --git a/react/package.json b/react/package.json
index 2a9b4cf816..22cf301c88 100644
--- a/react/package.json
+++ b/react/package.json
@@ -11,6 +11,7 @@
"@cloudscape-design/board-components": "3.0.60",
"@codemirror/language": "^6.10.3",
"@melloware/react-logviewer": "^5.3.2",
+ "@react-hook/resize-observer": "^2.0.2",
"@storybook/test": "^8.4.5",
"@tanstack/react-query": "^5.61.0",
"@testing-library/jest-dom": "^6.6.3",
diff --git a/react/patches/@cloudscape-design__board-components@3.0.60.patch b/react/patches/@cloudscape-design__board-components@3.0.60.patch
index 7fcfea5d48..faf5e1788c 100644
--- a/react/patches/@cloudscape-design__board-components@3.0.60.patch
+++ b/react/patches/@cloudscape-design__board-components@3.0.60.patch
@@ -99,54 +99,143 @@ index 9ce96efb6b78053be6c29b4ab98115e465c02372..cd0a89e0e5f5b092ba03ff191c720d29
//# sourceMappingURL=internal.js.map
\ No newline at end of file
diff --git a/board-item/styles.css.js b/board-item/styles.css.js
-index 1dcaf7ccab588a3e3a1a9bfdab40d1b3e7d4a69f..f1d982c4f3451cb351c817e4e62b8bc3028caeea 100644
+index 1dcaf7ccab588a3e3a1a9bfdab40d1b3e7d4a69f..39416d9d804f3addcea8a70836da994802028526 100644
--- a/board-item/styles.css.js
+++ b/board-item/styles.css.js
-@@ -2,15 +2,15 @@
- import './styles.scoped.css';
- export default {
- "root": "awsui_root_9ckv7_1974t_1",
+@@ -1,16 +1,17 @@
++import './styles.scoped.css';
+
+- import './styles.scoped.css';
+- export default {
+- "root": "awsui_root_9ckv7_1974t_1",
- "container-override": "awsui_container-override_9ckv7_1974t_6",
-+ "container-override": "awsui_container-override_9ckv7_1974t_6 bai_board_container-override",
- "active": "awsui_active_9ckv7_1974t_6",
+- "active": "awsui_active_9ckv7_1974t_6",
- "header": "awsui_header_9ckv7_1974t_28",
-+ "header": "awsui_header_9ckv7_1974t_28 bai_board_header",
- "flexible": "awsui_flexible_9ckv7_1974t_34",
+- "flexible": "awsui_flexible_9ckv7_1974t_34",
- "handle": "awsui_handle_9ckv7_1974t_38",
-+ "handle": "awsui_handle_9ckv7_1974t_38 bai_board_handle",
- "refresh": "awsui_refresh_9ckv7_1974t_41",
- "header-content": "awsui_header-content_9ckv7_1974t_45",
- "settings": "awsui_settings_9ckv7_1974t_49",
- "fixed": "awsui_fixed_9ckv7_1974t_57",
+- "refresh": "awsui_refresh_9ckv7_1974t_41",
+- "header-content": "awsui_header-content_9ckv7_1974t_45",
+- "settings": "awsui_settings_9ckv7_1974t_49",
+- "fixed": "awsui_fixed_9ckv7_1974t_57",
- "resizer": "awsui_resizer_9ckv7_1974t_61"
-+ "resizer": "awsui_resizer_9ckv7_1974t_61 bai_board_resizer",
++export default {
++ root: 'awsui_root_9ckv7_1974t_1',
++ 'container-override':
++ 'awsui_container-override_9ckv7_1974t_6 bai_board_container-override',
++ active: 'awsui_active_9ckv7_1974t_6',
++ header: 'awsui_header_9ckv7_1974t_28 bai_board_header',
++ flexible: 'awsui_flexible_9ckv7_1974t_34',
++ handle: 'awsui_handle_9ckv7_1974t_38 bai_board_handle',
++ refresh: 'awsui_refresh_9ckv7_1974t_41',
++ 'header-content': 'awsui_header-content_9ckv7_1974t_45',
++ settings: 'awsui_settings_9ckv7_1974t_49',
++ fixed: 'awsui_fixed_9ckv7_1974t_57',
++ resizer: 'awsui_resizer_9ckv7_1974t_61 bai_board_resizer',
++ content: 'awsui_content_14iqq_1ml84_220 bai_board_content',
};
-
+-
\ No newline at end of file
+diff --git a/board-item/styles.scoped.css b/board-item/styles.scoped.css
+index 4ec7adae84985a34199e770b659fc9b8f121c4d4..8ecc2cc3e53e9024e9213bf1e827748f59c443f1 100644
+--- a/board-item/styles.scoped.css
++++ b/board-item/styles.scoped.css
+@@ -4,16 +4,24 @@
+
+ /* TODO: use container API instead of styles override */
+ .awsui_container-override_9ckv7_1974t_6.awsui_active_9ckv7_1974t_6:not(#\9) {
+- box-shadow: var(--shadow-container-active-kl29x9, 0px 1px 1px 1px #e9ebed, 0px 6px 36px rgba(0, 7, 22, 0.1019607843));
++ box-shadow: var(
++ --shadow-container-active-kl29x9,
++ 0px 1px 1px 1px #e9ebed,
++ 0px 6px 36px rgba(0, 7, 22, 0.1019607843)
++ );
+ }
+-[data-awsui-focus-visible] .awsui_container-override_9ckv7_1974t_6.awsui_active_9ckv7_1974t_6:not(#\9) {
++[data-awsui-focus-visible]
++ .awsui_container-override_9ckv7_1974t_6.awsui_active_9ckv7_1974t_6:not(#\9) {
+ position: relative;
+ box-sizing: border-box;
+ outline: 2px dotted transparent;
+ outline-offset: -1px;
+ }
+-[data-awsui-focus-visible] .awsui_container-override_9ckv7_1974t_6.awsui_active_9ckv7_1974t_6:not(#\9)::before {
+- content: " ";
++[data-awsui-focus-visible]
++ .awsui_container-override_9ckv7_1974t_6.awsui_active_9ckv7_1974t_6:not(
++ #\9
++ )::before {
++ content: ' ';
+ display: block;
+ position: absolute;
+ box-sizing: border-box;
+@@ -28,7 +36,11 @@
+ .awsui_header_9ckv7_1974t_28:not(#\9) {
+ display: flex;
+ justify-items: center;
+- padding: var(--space-scaled-s-aqzyko, 12px) calc(var(--space-container-horizontal-wfukh3, 20px) - var(--space-scaled-xs-26e2du, 8px));
++ padding: var(--space-scaled-s-aqzyko, 12px)
++ calc(
++ var(--space-container-horizontal-wfukh3, 20px) -
++ var(--space-scaled-xs-26e2du, 8px)
++ );
+ }
+
+ .awsui_flexible_9ckv7_1974t_34:not(#\9) {
+@@ -60,6 +72,14 @@
+
+ .awsui_resizer_9ckv7_1974t_61:not(#\9) {
+ position: absolute;
+- bottom: calc(var(--space-static-xs-7sfb63, 8px) - var(--space-static-xxxs-3gu9os, 2px));
+- right: calc(var(--space-static-xs-7sfb63, 8px) - var(--space-static-xxxs-3gu9os, 2px));
++ bottom: calc(
++ var(--space-static-xs-7sfb63, 8px) - var(--space-static-xxxs-3gu9os, 2px)
++ );
++ right: calc(
++ var(--space-static-xs-7sfb63, 8px) - var(--space-static-xxxs-3gu9os, 2px)
++ );
++}
++
++.awsui_content_14iqq_1ml84_220 {
++ padding: 0 !important;
+ }
diff --git a/board-item/styles.selectors.js b/board-item/styles.selectors.js
-index 2acfd3b34f880ec39462ec5d44f7f780e041fbec..beebd8d83a48e0326fb8d68e67e2549f1ffcd2b3 100644
+index 2acfd3b34f880ec39462ec5d44f7f780e041fbec..e73f107b533a3e0a68d231ede87e2d59d448fe9d 100644
--- a/board-item/styles.selectors.js
+++ b/board-item/styles.selectors.js
-@@ -3,15 +3,15 @@
- Object.defineProperty(exports, "__esModule", { value: true });
- module.exports.default = {
- "root": "awsui_root_9ckv7_1974t_1",
+@@ -1,17 +1,17 @@
+-
+- // es-module interop with Babel and Typescript
+- Object.defineProperty(exports, "__esModule", { value: true });
+- module.exports.default = {
+- "root": "awsui_root_9ckv7_1974t_1",
- "container-override": "awsui_container-override_9ckv7_1974t_6",
-+ "container-override": "awsui_container-override_9ckv7_1974t_6 bai_board_container-override",
- "active": "awsui_active_9ckv7_1974t_6",
+- "active": "awsui_active_9ckv7_1974t_6",
- "header": "awsui_header_9ckv7_1974t_28",
-+ "header": "awsui_header_9ckv7_1974t_28 bai_board_header",
- "flexible": "awsui_flexible_9ckv7_1974t_34",
+- "flexible": "awsui_flexible_9ckv7_1974t_34",
- "handle": "awsui_handle_9ckv7_1974t_38",
-+ "handle": "awsui_handle_9ckv7_1974t_38 bai_board_handle",
- "refresh": "awsui_refresh_9ckv7_1974t_41",
- "header-content": "awsui_header-content_9ckv7_1974t_45",
- "settings": "awsui_settings_9ckv7_1974t_49",
- "fixed": "awsui_fixed_9ckv7_1974t_57",
+- "refresh": "awsui_refresh_9ckv7_1974t_41",
+- "header-content": "awsui_header-content_9ckv7_1974t_45",
+- "settings": "awsui_settings_9ckv7_1974t_49",
+- "fixed": "awsui_fixed_9ckv7_1974t_57",
- "resizer": "awsui_resizer_9ckv7_1974t_61"
-+ "resizer": "awsui_resizer_9ckv7_1974t_61 bai_board_resizer"
++// es-module interop with Babel and Typescript
++Object.defineProperty(exports, '__esModule', { value: true });
++module.exports.default = {
++ root: 'awsui_root_9ckv7_1974t_1',
++ 'container-override':
++ 'awsui_container-override_9ckv7_1974t_6 bai_board_container-override',
++ active: 'awsui_active_9ckv7_1974t_6',
++ header: 'awsui_header_9ckv7_1974t_28 bai_board_header',
++ flexible: 'awsui_flexible_9ckv7_1974t_34',
++ handle: 'awsui_handle_9ckv7_1974t_38 bai_board_handle',
++ refresh: 'awsui_refresh_9ckv7_1974t_41',
++ 'header-content': 'awsui_header-content_9ckv7_1974t_45',
++ settings: 'awsui_settings_9ckv7_1974t_49',
++ fixed: 'awsui_fixed_9ckv7_1974t_57',
++ resizer: 'awsui_resizer_9ckv7_1974t_61 bai_board_resizer',
++ content: 'awsui_content_14iqq_1ml84_220 bai_board_content',
};
-
+-
\ No newline at end of file
diff --git a/internal/grid/styles.css.js b/internal/grid/styles.css.js
index ec202e1a6c757f5513ffa0a2566a1691b8ed18df..0c0ed570ea9c72e7e484c0371825c9710896085c 100644
diff --git a/react/pnpm-lock.yaml b/react/pnpm-lock.yaml
index c6ef872b83..0e75aba31f 100644
--- a/react/pnpm-lock.yaml
+++ b/react/pnpm-lock.yaml
@@ -6,7 +6,7 @@ settings:
patchedDependencies:
'@cloudscape-design/board-components@3.0.60':
- hash: rsmnk3j6im54fq6gec5lp7suky
+ hash: sl2ax5liun5nztm65pxt6fd2ku
path: patches/@cloudscape-design__board-components@3.0.60.patch
rc-field-form@2.5.1:
hash: l7v7gre5halb2xnps2zwnqbqte
@@ -33,13 +33,16 @@ importers:
version: 1.0.4(antd@5.22.2(date-fns@2.30.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@cloudscape-design/board-components':
specifier: 3.0.60
- version: 3.0.60(patch_hash=rsmnk3j6im54fq6gec5lp7suky)(@cloudscape-design/components@3.0.677(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@cloudscape-design/design-tokens@3.0.40)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 3.0.60(patch_hash=sl2ax5liun5nztm65pxt6fd2ku)(@cloudscape-design/components@3.0.677(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@cloudscape-design/design-tokens@3.0.40)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@codemirror/language':
specifier: ^6.10.3
version: 6.10.3
'@melloware/react-logviewer':
specifier: ^5.3.2
version: 5.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@react-hook/resize-observer':
+ specifier: ^2.0.2
+ version: 2.0.2(react@18.3.1)
'@storybook/test':
specifier: ^8.4.5
version: 8.4.5(storybook@8.4.5(prettier@3.3.3))
@@ -1934,6 +1937,21 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
+ '@react-hook/latest@1.0.3':
+ resolution: {integrity: sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg==}
+ peerDependencies:
+ react: '>=16.8'
+
+ '@react-hook/passive-layout-effect@1.2.1':
+ resolution: {integrity: sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==}
+ peerDependencies:
+ react: '>=16.8'
+
+ '@react-hook/resize-observer@2.0.2':
+ resolution: {integrity: sha512-tzKKzxNpfE5TWmxuv+5Ae3IF58n0FQgQaWJmcbYkjXTRZATXxClnTprQ2uuYygYTpu1pqbBskpwMpj6jpT1djA==}
+ peerDependencies:
+ react: '>=18'
+
'@remix-run/router@1.21.0':
resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==}
engines: {node: '>=14.0.0'}
@@ -9246,7 +9264,7 @@ snapshots:
'@bcoe/v8-coverage@0.2.3': {}
- '@cloudscape-design/board-components@3.0.60(patch_hash=rsmnk3j6im54fq6gec5lp7suky)(@cloudscape-design/components@3.0.677(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@cloudscape-design/design-tokens@3.0.40)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@cloudscape-design/board-components@3.0.60(patch_hash=sl2ax5liun5nztm65pxt6fd2ku)(@cloudscape-design/components@3.0.677(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@cloudscape-design/design-tokens@3.0.40)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@cloudscape-design/component-toolkit': 1.0.0-beta.64
'@cloudscape-design/components': 3.0.677(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -10462,6 +10480,20 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
+ '@react-hook/latest@1.0.3(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@react-hook/passive-layout-effect@1.2.1(react@18.3.1)':
+ dependencies:
+ react: 18.3.1
+
+ '@react-hook/resize-observer@2.0.2(react@18.3.1)':
+ dependencies:
+ '@react-hook/latest': 1.0.3(react@18.3.1)
+ '@react-hook/passive-layout-effect': 1.2.1(react@18.3.1)
+ react: 18.3.1
+
'@remix-run/router@1.21.0': {}
'@replit/codemirror-lang-csharp@6.2.0(@codemirror/autocomplete@6.18.0(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.30.0)(@lezer/common@1.2.1))(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.30.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/lr@1.4.2)':
diff --git a/react/src/App.tsx b/react/src/App.tsx
index 98b76919d6..1154b56d73 100644
--- a/react/src/App.tsx
+++ b/react/src/App.tsx
@@ -29,7 +29,7 @@ const ServingPage = React.lazy(() => import('./pages/ServingPage'));
const EndpointDetailPage = React.lazy(
() => import('./pages/EndpointDetailPage'),
);
-// const SummaryPage = React.lazy(() => import('./pages/SummaryPage'));
+const StartPage = React.lazy(() => import('./pages/StartPage'));
const EnvironmentPage = React.lazy(() => import('./pages/EnvironmentPage'));
const MyEnvironmentPage = React.lazy(() => import('./pages/MyEnvironmentPage'));
const StorageHostSettingPage = React.lazy(
@@ -105,18 +105,23 @@ const router = createBrowserRouter([
),
children: [
{
- path: '/',
- element: ,
+ path: '/start',
+ element: (
+
+
+
+ ),
+ handle: { labelKey: 'webui.menu.Start' },
},
{
//for electron dev mode
path: '/build/electron-app/app/index.html',
- element: ,
+ element: ,
},
{
//for electron prod mode
path: '/app/index.html',
- element: ,
+ element: ,
},
{
path: '/summary',
@@ -131,7 +136,6 @@ const router = createBrowserRouter([
style={{ marginBottom: token.paddingContentVerticalLG }}
closable
/>
- {/* */}
>
);
},
diff --git a/react/src/components/ActionItemContent.tsx b/react/src/components/ActionItemContent.tsx
new file mode 100644
index 0000000000..8885ed81dc
--- /dev/null
+++ b/react/src/components/ActionItemContent.tsx
@@ -0,0 +1,127 @@
+import Flex from './Flex';
+import useResizeObserver from '@react-hook/resize-observer';
+import { Button, Divider, Typography, theme } from 'antd';
+import { useRef, useState } from 'react';
+
+interface StartItemContentProps {
+ title: string;
+ description?: string;
+ icon?: React.ReactNode;
+ buttonText: string;
+ onClick?: () => void;
+ themeColor?: string;
+ iconBgColor?: string;
+ itemRole?: 'user' | 'admin';
+}
+
+const ActionItemContent: React.FC = ({
+ title,
+ description,
+ icon,
+ buttonText,
+ onClick,
+ themeColor,
+ iconBgColor,
+ itemRole = 'user',
+}) => {
+ const { token } = theme.useToken();
+ const [needScroll, setNeedScroll] = useState(false);
+ const containerRef = useRef(null);
+ const colorPrimaryWithAlpha = `rgba(${parseInt(token.colorPrimary.slice(1, 3), 16)}, ${parseInt(token.colorPrimary.slice(3, 5), 16)}, ${parseInt(token.colorPrimary.slice(5, 7), 16)}, 0.15)`;
+ const colorInfoWithAlpha = `rgba(${parseInt(token.colorInfo.slice(1, 3), 16)}, ${parseInt(token.colorInfo.slice(3, 5), 16)}, ${parseInt(token.colorInfo.slice(5, 7), 16)}, 0.15)`;
+
+ useResizeObserver(
+ containerRef,
+ (entry: { contentRect: { width: number } }) => {
+ entry.contentRect.width <= 220
+ ? setNeedScroll(true)
+ : setNeedScroll(false);
+ },
+ );
+
+ return (
+
+
+
+ {icon}
+
+
+
+ {title}
+
+
+
+ {!needScroll && description}
+
+
+
+ {description && (
+
+ )}
+
+
+
+
+
+ );
+};
+
+export default ActionItemContent;
diff --git a/react/src/components/BAIBoard.tsx b/react/src/components/BAIBoard.tsx
index 4f75ed034d..e0ae218e44 100644
--- a/react/src/components/BAIBoard.tsx
+++ b/react/src/components/BAIBoard.tsx
@@ -1,7 +1,6 @@
-import Flex from './Flex';
import Board, { BoardProps } from '@cloudscape-design/board-components/board';
import BoardItem from '@cloudscape-design/board-components/board-item';
-import { Skeleton, Typography } from 'antd';
+import { Skeleton } from 'antd';
import { createStyles } from 'antd-style';
import { Suspense } from 'react';
@@ -23,29 +22,31 @@ const useStyles = createStyles(({ css }) => {
board: css`
${defaultBoard}
`,
- disableCustomize: css`
- ${defaultBoard}
- .bai_board_handle {
+ disableResize: css`
+ .bai_board_resizer {
display: none !important;
}
- .bai_board_resizer {
+ `,
+ disableMove: css`
+ .bai_board_handle {
display: none !important;
}
.bai_board_header {
- height: var(--token-boardHeaderHeight, 55px) !important;
+ display: none !important;
}
`,
boardItems: css`
& > div:first-child {
- border: 1px solid var(--token-colorBorder) !important ;
+ border: none !important ;
border-radius: var(--token-borderRadius) !important ;
background-color: var(--token-colorBgContainer) !important ;
}
& > div:first-child > div:first-child > div:first-child {
- border-bottom: 1px solid var(--token-colorBorder) !important;
margin-bottom: var(--token-margin);
background-color: var(--token-colorBgContainer) !important ;
+ position: absolute;
+ z-index: 1;
}
`,
};
@@ -56,19 +57,27 @@ interface BAICustomizableGridProps {
onItemsChange: (
event: CustomEvent>,
) => void;
- customizable?: boolean;
+ resizable?: boolean;
+ movable?: boolean;
}
const BAIBoard: React.FC = ({
items: parsedItems,
- customizable = false,
+ resizable = false,
+ movable = false,
...BoardProps
}) => {
const { styles } = useStyles();
+
+ const boardStyles = [
+ styles.board,
+ !movable && styles.disableMove,
+ !resizable && styles.disableResize,
+ ].join(' ');
+
return (
{
return (
@@ -82,11 +91,6 @@ const BAIBoard: React.FC = ({
resizeHandleAriaLabel: '',
resizeHandleAriaDescription: '',
}}
- header={
-
- {item.data.title}
-
- }
>
}>
{item.data.content}
diff --git a/react/src/components/MainLayout/WebUISider.tsx b/react/src/components/MainLayout/WebUISider.tsx
index 5e4eb9c145..7f437b4364 100644
--- a/react/src/components/MainLayout/WebUISider.tsx
+++ b/react/src/components/MainLayout/WebUISider.tsx
@@ -24,6 +24,7 @@ import {
FileDoneOutlined,
HddOutlined,
InfoCircleOutlined,
+ PlayCircleOutlined,
SolutionOutlined,
ToolOutlined,
UserOutlined,
@@ -85,6 +86,11 @@ const WebUISider: React.FC = (props) => {
const primaryColors = usePrimaryColors();
const generalMenu = filterEmptyItem([
+ {
+ label: {t('webui.menu.Start')},
+ icon: ,
+ key: 'start',
+ },
{
label: {t('webui.menu.Summary')},
icon: ,
@@ -255,7 +261,7 @@ const WebUISider: React.FC = (props) => {
height: themeConfig?.logo?.size?.height || 24,
cursor: 'pointer',
}}
- onClick={() => webuiNavigate(themeConfig?.logo?.href || '/summary')}
+ onClick={() => webuiNavigate(themeConfig?.logo?.href || '/start')}
/>
}
theme={currentSiderTheme}
@@ -275,7 +281,7 @@ const WebUISider: React.FC = (props) => {
height: themeConfig?.logo.sizeCollapsed?.height ?? 24,
cursor: 'pointer',
}}
- onClick={() => webuiNavigate(themeConfig?.logo?.href || '/summary')}
+ onClick={() => webuiNavigate(themeConfig?.logo?.href || '/start')}
/>
}
logoTitle={themeConfig?.logo?.logoTitle || siteDescription || 'WebUI'}
diff --git a/react/src/components/SummaryPageItems/SummaryItemDownloadApp.tsx b/react/src/components/SummaryPageItems/SummaryItemDownloadApp.tsx
deleted file mode 100644
index b2e487d2ce..0000000000
--- a/react/src/components/SummaryPageItems/SummaryItemDownloadApp.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-import { useSuspendedBackendaiClient } from '../../hooks';
-import Flex from '../Flex';
-import { Button, Select, Typography, theme } from 'antd';
-import { useState } from 'react';
-
-const detectDefaultOS = () => {
- if (navigator.userAgent.indexOf('Mac') !== -1) return 'MacOS';
- if (navigator.userAgent.indexOf('Win') !== -1) return 'Windows';
- if (navigator.userAgent.indexOf('Linux') !== -1) return 'Linux';
- return 'MacOS';
-};
-
-const SummaryItemDownloadApp: React.FC = () => {
- const { token } = theme.useToken();
- const [OS, setOS] = useState(detectDefaultOS());
-
- const baiClient = useSuspendedBackendaiClient();
- const url = baiClient._config.appDownloadUrl;
- const windowOS = baiClient.supports('use-win-instead-of-win32')
- ? 'win'
- : 'win32';
-
- const appDownloadMap: Record = {
- Linux: {
- os: 'linux',
- architecture: ['arm64', 'x64'],
- extension: 'zip',
- },
- MacOS: {
- os: 'macos',
- architecture: ['arm64', 'x64'],
- extension: 'dmg',
- },
- Windows: {
- os: windowOS,
- architecture: ['arm64', 'x64'],
- extension: 'zip',
- },
- };
- const downloadApp = (architecture: string) => {
- //@ts-ignore
- const pkgVersion = globalThis.packageVersion;
- const os = appDownloadMap[OS].os;
- const extension = appDownloadMap[OS].extension;
- const downloadLink = `${url}/v${pkgVersion}/backend.ai-desktop-${pkgVersion}-${os}-${architecture}.${extension}`;
- window.open(downloadLink, '_blank');
- };
-
- return (
-
-
- );
-};
-
-export default SummaryItemDownloadApp;
diff --git a/react/src/components/SummaryPageItems/SummaryItemStartMenu.tsx b/react/src/components/SummaryPageItems/SummaryItemStartMenu.tsx
deleted file mode 100644
index 856ca3c222..0000000000
--- a/react/src/components/SummaryPageItems/SummaryItemStartMenu.tsx
+++ /dev/null
@@ -1,146 +0,0 @@
-import { useWebUINavigate } from '../../hooks';
-import Flex from '../Flex';
-import { PoweroffOutlined } from '@ant-design/icons';
-import { Button, Typography, theme } from 'antd';
-import { useTranslation } from 'react-i18next';
-
-interface StartMenuProps {
- deactivate?: boolean;
- allowNeoSessionLauncher?: boolean;
-}
-
-export const SummaryItemStartMenu: React.FC = ({
- deactivate,
- allowNeoSessionLauncher,
-}) => {
- const { token } = theme.useToken();
- const webuiNavigate = useWebUINavigate();
- const { t } = useTranslation();
-
- return (
-
-
-
-
- webuiNavigate('/data')}
- >
-
-
- {t('summary.UploadFiles')}
-
-
- {
- webuiNavigate({
- pathname: '/credential',
- search: '?action=add',
- });
- }}
- >
-
-
- {t('summary.CreateANewKeypair')}
-
-
- {
- webuiNavigate({
- pathname: '/credential',
- search: '?action=manage',
- });
- }}
- >
-
-
- {t('summary.MaintainKeypairs')}
-
-
-
-
- );
-};
-
-export default SummaryItemStartMenu;
diff --git a/react/src/hooks/useBAISetting.tsx b/react/src/hooks/useBAISetting.tsx
index 3dd00ebd96..336d57f81d 100644
--- a/react/src/hooks/useBAISetting.tsx
+++ b/react/src/hooks/useBAISetting.tsx
@@ -1,5 +1,5 @@
import { jotaiStore } from '../components/DefaultProviders';
-import { SummaryItem } from '../pages/SummaryPage';
+import { StartItem } from '../pages/StartPage';
import { atom, useAtom } from 'jotai';
import { atomFamily } from 'jotai/utils';
@@ -14,7 +14,7 @@ interface UserSettings {
last_window_close_time?: number;
endpoints?: Array;
auto_logout?: boolean;
- summary_items?: Array>;
+ summary_items?: Array>;
selected_language?: string;
classic_session_launcher?: boolean;
recentSessionHistory?: Array;
diff --git a/react/src/pages/Page401.tsx b/react/src/pages/Page401.tsx
index ca83319b92..8133e967f1 100644
--- a/react/src/pages/Page401.tsx
+++ b/react/src/pages/Page401.tsx
@@ -38,7 +38,7 @@ const Page401 = () => {
diff --git a/react/src/pages/Page404.tsx b/react/src/pages/Page404.tsx
index 63c5a2b1a0..0944f61f4e 100644
--- a/react/src/pages/Page404.tsx
+++ b/react/src/pages/Page404.tsx
@@ -38,7 +38,7 @@ const Page404 = () => {
diff --git a/react/src/pages/StartPage.tsx b/react/src/pages/StartPage.tsx
new file mode 100644
index 0000000000..a6a4193b83
--- /dev/null
+++ b/react/src/pages/StartPage.tsx
@@ -0,0 +1,239 @@
+import ActionItemContent from '../components/ActionItemContent';
+import BAIBoard from '../components/BAIBoard';
+import { SessionLauncherPageLocationState } from '../components/LocationStateBreadCrumb';
+import { useWebUINavigate } from '../hooks';
+import { useBAISettingUserState } from '../hooks/useBAISetting';
+import { SessionLauncherFormValue } from './SessionLauncherPage';
+import {
+ AppstoreAddOutlined,
+ FolderAddOutlined,
+ LinkOutlined,
+ PlaySquareOutlined,
+} from '@ant-design/icons';
+import { BoardProps } from '@cloudscape-design/board-components/board';
+import { theme } from 'antd';
+import _ from 'lodash';
+import { useState } from 'react';
+import { useTranslation } from 'react-i18next';
+
+export interface StartItem
+ extends BoardProps.Item<{
+ content: JSX.Element;
+ }> {
+ id:
+ | 'createFolder'
+ | 'startSession'
+ | 'startBatchSession'
+ | 'modelService'
+ | 'startFromExample'
+ | 'startFromURL';
+}
+
+const StartPage: React.FC = () => {
+ const { t } = useTranslation();
+ const { token } = theme.useToken();
+ const webuiNavigate = useWebUINavigate();
+
+ const defaultSummaryElements: {
+ [key in StartItem['id']]: StartItem['data'];
+ } = {
+ createFolder: {
+ content: (
+
+ }
+ onClick={() => webuiNavigate('/data')}
+ />
+ ),
+ },
+ startSession: {
+ content: (
+
+ }
+ onClick={() => webuiNavigate('/session/start')}
+ />
+ ),
+ },
+ startBatchSession: {
+ content: (
+
+ }
+ onClick={() => {
+ const launcherValue: DeepPartial = {
+ sessionType: 'batch',
+ };
+ const params = new URLSearchParams();
+ params.set('step', '0');
+ params.set('formValues', JSON.stringify(launcherValue));
+ webuiNavigate(`/session/start?${params.toString()}`, {
+ state: {
+ from: {
+ pathname: '/start',
+ label: t('start.StartSession'),
+ },
+ } as SessionLauncherPageLocationState,
+ });
+ }}
+ />
+ ),
+ },
+ modelService: {
+ content: (
+
+ }
+ onClick={() => webuiNavigate('/service/start')}
+ />
+ ),
+ },
+ startFromExample: {
+ content: (
+
+ }
+ onClick={() => webuiNavigate('/import')}
+ />
+ ),
+ },
+ startFromURL: {
+ content: (
+
+ }
+ onClick={() => webuiNavigate('/import')}
+ />
+ ),
+ },
+ };
+ const [summaryItemsSetting, setSummaryItemsSetting] =
+ useBAISettingUserState('summary_items');
+
+ const [items, setItems] = useState>(
+ !_.isEmpty(summaryItemsSetting)
+ ? _.map(summaryItemsSetting, (item) => ({
+ ...item,
+ data: {
+ ...defaultSummaryElements[item?.id],
+ },
+ }))
+ : [
+ {
+ id: 'createFolder',
+ rowSpan: 3,
+ columnSpan: 1,
+ columnOffset: { 4: 0 },
+ data: defaultSummaryElements.createFolder,
+ },
+ {
+ id: 'startSession',
+ rowSpan: 3,
+ columnSpan: 1,
+ columnOffset: { 4: 1 },
+ data: defaultSummaryElements.startSession,
+ },
+ {
+ id: 'startBatchSession',
+ rowSpan: 3,
+ columnSpan: 1,
+ columnOffset: { 4: 2 },
+ data: defaultSummaryElements.startBatchSession,
+ },
+ {
+ id: 'modelService',
+ rowSpan: 3,
+ columnSpan: 1,
+ columnOffset: { 4: 3 },
+ data: defaultSummaryElements.modelService,
+ },
+ {
+ id: 'startFromExample',
+ rowSpan: 3,
+ columnSpan: 1,
+ columnOffset: { 4: 0 },
+ data: defaultSummaryElements.startFromExample,
+ },
+ {
+ id: 'startFromURL',
+ rowSpan: 3,
+ columnSpan: 1,
+ columnOffset: { 4: 1 },
+ data: defaultSummaryElements.startFromURL,
+ },
+ ],
+ );
+
+ return (
+ {
+ const changedItems = event.detail.items as typeof items;
+ setItems(changedItems);
+ setSummaryItemsSetting(
+ _.map(changedItems, (item) => _.omit(item, 'data')),
+ );
+ }}
+ />
+ );
+};
+export default StartPage;
diff --git a/react/src/pages/SummaryPage.tsx b/react/src/pages/SummaryPage.tsx
deleted file mode 100644
index f6102531d6..0000000000
--- a/react/src/pages/SummaryPage.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-import BAIBoard from '../components/BAIBoard';
-import SummaryItemDownloadApp from '../components/SummaryPageItems/SummaryItemDownloadApp';
-import SummaryItemInvitation from '../components/SummaryPageItems/SummaryItemInvitation';
-import SummaryItemStartMenu from '../components/SummaryPageItems/SummaryItemStartMenu';
-import { useBAISettingUserState } from '../hooks/useBAISetting';
-import { BoardProps } from '@cloudscape-design/board-components/board';
-import _ from 'lodash';
-import { useState } from 'react';
-import { useTranslation } from 'react-i18next';
-
-export interface SummaryItem
- extends BoardProps.Item<{
- title: string;
- content: JSX.Element;
- }> {
- id: 'startMenu' | 'invitation' | 'downloadApp';
-}
-
-const SummaryPage: React.FC = () => {
- const { t } = useTranslation();
- const defaultSummaryElements: {
- [key in SummaryItem['id']]: SummaryItem['data'];
- } = {
- startMenu: {
- title: t('summary.StartMenu'),
- content: ,
- },
-
- invitation: {
- title: t('summary.Invitation'),
- content: ,
- },
-
- downloadApp: {
- title: t('summary.DownloadWebUIApp'),
- content: ,
- },
- };
- const [summaryItemsSetting, setSummaryItemsSetting] =
- useBAISettingUserState('summary_items');
-
- const [items, setItems] = useState>(
- !_.isEmpty(summaryItemsSetting)
- ? _.map(summaryItemsSetting, (item) => ({
- ...item,
- data: {
- ...defaultSummaryElements[item?.id],
- },
- }))
- : [
- {
- id: 'startMenu',
- rowSpan: 5,
- columnSpan: 1,
- data: defaultSummaryElements.startMenu,
- },
- {
- id: 'invitation',
- rowSpan: 1,
- columnSpan: 1,
- data: defaultSummaryElements.invitation,
- },
- {
- id: 'downloadApp',
- rowSpan: 1,
- columnSpan: 1,
- data: defaultSummaryElements.downloadApp,
- },
- ],
- );
-
- return (
- {
- const changedItems = event.detail.items as typeof items;
- setItems(changedItems);
- setSummaryItemsSetting(
- _.map(changedItems, (item) => _.omit(item, 'data')),
- );
- }}
- />
- );
-};
-export default SummaryPage;
diff --git a/resources/i18n/de.json b/resources/i18n/de.json
index 91f3e3b6e3..cc175aee65 100644
--- a/resources/i18n/de.json
+++ b/resources/i18n/de.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "Geben sie ihre E-Mail Adresse ein",
"DisMatchUserEmail": "Die E-Mail-Adresse des Benutzers stimmt nicht überein",
"MyEnvironments": "Meine Umgebungen",
- "ResourcePolicy": "Ressourcenpolitik"
+ "ResourcePolicy": "Ressourcenpolitik",
+ "Start": "Start"
},
"YouAreOffline": "Offline: Keine Verbindung zu einem Netzwerk.",
"YouAreOnline": "Sie sind jetzt online",
@@ -1756,5 +1757,26 @@
"hour": "Stunde",
"day": "day",
"week": "Woche"
+ },
+ "start": {
+ "CreateFolder": "Erstellen Sie einen neuen Speicherordner",
+ "button": {
+ "CreateFolder": "Ordner erstellen",
+ "StartSession": "Sitzung starten",
+ "ModelService": "Dienst starten",
+ "StartNow": "Beginnen Sie jetzt",
+ "StartBatchSession": "Beginnen Sie mit einer URL"
+ },
+ "CreateFolderDesc": "Für das Training von Modellen oder die externe Bereitstellung von Diensten sind das Erstellen eines Ordners und das Hochladen von Dateien von entscheidender Bedeutung. \nBitte beginnen Sie mit dem Hochladen der Dateien.",
+ "StartSession": "Starten Sie eine interaktive Sitzung",
+ "StartSessionDesc": "Möchten Sie ein Model trainieren? \nKlicken Sie auf die Schaltfläche, um sofort eine Sitzung zu erstellen. \nWählen Sie Ihre bevorzugte Umgebung und Ressourcen zum Ausführen von Code und anderen Aufgaben.",
+ "StartBatchSession": "Starten Sie die Batch-Sitzung",
+ "StartBatchSessionDesc": "Versuchen Sie für vordefinierte Dateien oder geplante Aufgaben Batch-Sitzungen. \nGeben Sie den Befehl ein, stellen Sie Datum und Uhrzeit ein und führen Sie ihn nach Bedarf aus.",
+ "ModelService": "Modelldienst starten",
+ "ModelServiceDesc": "Sind Sie bereit, Ihr trainiertes Modell mit anderen zu teilen? \nKlicken Sie auf die Schaltfläche, um einen Dienst zu erstellen.",
+ "StartFromExample": "Beginnen Sie mit dem Beispiel",
+ "StartFromExampleDesc": "Entdecken Sie verschiedene Beispielcodes und legen Sie los.",
+ "StartFromURL": "Beginnen Sie mit der URL",
+ "StartFromURLDesc": "Importieren Sie Ihr Projekt und Ihren Code aus verschiedenen Umgebungen wie GitHub, GitLab, Notebook usw."
}
}
diff --git a/resources/i18n/el.json b/resources/i18n/el.json
index 5c7c778246..38f4ad9331 100644
--- a/resources/i18n/el.json
+++ b/resources/i18n/el.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "Συμπληρώστε το email σας",
"DisMatchUserEmail": "Το email χρήστη δεν ταιριάζει",
"MyEnvironments": "Τα περιβάλλοντα μου",
- "ResourcePolicy": "Πολιτική Πόρων"
+ "ResourcePolicy": "Πολιτική Πόρων",
+ "Start": "Αρχή"
},
"YouAreOffline": "Offline: Δεν είναι συνδεδεμένος σε κανένα δίκτυο.",
"YouAreOnline": "Είστε πλέον συνδεδεμένοι",
@@ -1756,5 +1757,26 @@
"hour": "ώρα",
"day": "day",
"week": "εβδομάδα"
+ },
+ "start": {
+ "CreateFolder": "Δημιουργήστε έναν νέο φάκελο αποθήκευσης",
+ "button": {
+ "CreateFolder": "Δημιουργία φακέλου",
+ "StartSession": "Έναρξη συνεδρίας",
+ "ModelService": "Ξεκινήστε την υπηρεσία",
+ "StartNow": "Ξεκινήστε τώρα",
+ "StartBatchSession": "Ξεκινήστε από μια διεύθυνση URL"
+ },
+ "CreateFolderDesc": "Η δημιουργία ενός φακέλου και η μεταφόρτωση αρχείων είναι ζωτικής σημασίας για τα μοντέλα εκπαίδευσης ή την παροχή υπηρεσιών εξωτερικά. \nΞεκινήστε ανεβάζοντας τα αρχεία.",
+ "StartSession": "Ξεκινήστε μια διαδραστική συνεδρία",
+ "StartSessionDesc": "Θέλετε να εκπαιδεύσετε ένα μοντέλο; \nΚάντε κλικ στο κουμπί για να δημιουργήσετε μια περίοδο λειτουργίας αμέσως. \nΕπιλέξτε το περιβάλλον και τους πόρους που προτιμάτε για την εκτέλεση κώδικα και άλλων εργασιών.",
+ "StartBatchSession": "Έναρξη Μαζικής Συνεδρίας",
+ "StartBatchSessionDesc": "Για προκαθορισμένα αρχεία ή προγραμματισμένες εργασίες, δοκιμάστε τις ομαδικές συνεδρίες. \nΕισαγάγετε την εντολή, ορίστε την ημερομηνία και την ώρα και εκτελέστε όπως απαιτείται.",
+ "ModelService": "Ξεκινήστε την υπηρεσία μοντέλου",
+ "ModelServiceDesc": "Είστε έτοιμοι να μοιραστείτε το εκπαιδευμένο μοντέλο σας με άλλους; \nΚάντε κλικ στο κουμπί για να δημιουργήσετε μια υπηρεσία.",
+ "StartFromExample": "Ξεκινήστε από το Παράδειγμα",
+ "StartFromExampleDesc": "Εξερευνήστε διάφορα παραδείγματα κωδικών και ξεκινήστε.",
+ "StartFromURL": "Έναρξη από τη διεύθυνση URL",
+ "StartFromURLDesc": "Εισαγάγετε το έργο και τον κώδικα σας από διάφορα περιβάλλοντα όπως GitHub, GitLab, Notebook κ.λπ."
}
}
diff --git a/resources/i18n/en.json b/resources/i18n/en.json
index a861332a66..91686e43c1 100644
--- a/resources/i18n/en.json
+++ b/resources/i18n/en.json
@@ -64,7 +64,8 @@
"InvalidBlankEmail": "Enter your e-mail",
"DisMatchUserEmail": "User E-mail does not match",
"MyEnvironments": "My Environments",
- "ResourcePolicy": "Resource Policy"
+ "ResourcePolicy": "Resource Policy",
+ "Start": "Start"
},
"YouAreOffline": "Offline: Not connected to any networks.",
"YouAreOnline": "You are now online",
@@ -1760,5 +1761,26 @@
"hour": "hour",
"day": "day",
"week": "week"
+ },
+ "start": {
+ "CreateFolder": "Create New Storage Folder",
+ "button": {
+ "CreateFolder": "Create Folder",
+ "StartSession": "Start Session",
+ "ModelService": "Start Service",
+ "StartNow": "Start Now",
+ "StartBatchSession": "Start from a URL"
+ },
+ "CreateFolderDesc": "Create folders and upload files. To train models or provide external services, it is essential to create folders and upload files.",
+ "StartSession": "Start Interactive Session",
+ "StartSessionDesc": "Create a session to train a model. Choose your preferred environment and resources to run a code.",
+ "StartBatchSession": "Start Batch Session",
+ "StartBatchSessionDesc": "Create a batch session for predefined files or scheduled tasks. Enter the command, set the date and time, and run the session on demand.",
+ "ModelService": "Start Model Service",
+ "ModelServiceDesc": "Select to share your trained model with others. This action will create a model service.",
+ "StartFromExample": "Start from the Example",
+ "StartFromExampleDesc": "Explore various example codes and get started.",
+ "StartFromURLDesc": "Import your project and code from various environments such as GitHub, GitLab, Notebook, etc.",
+ "StartFromURL": "Start From URL"
}
}
diff --git a/resources/i18n/es.json b/resources/i18n/es.json
index 128622e793..d1ff32a37b 100644
--- a/resources/i18n/es.json
+++ b/resources/i18n/es.json
@@ -1674,7 +1674,8 @@
"InvalidBlankEmail": "Introduce tu correo electrónico",
"DisMatchUserEmail": "El correo electrónico del usuario no coincide",
"MyEnvironments": "Mis ambientes",
- "ResourcePolicy": "Política de recursos"
+ "ResourcePolicy": "Política de recursos",
+ "Start": "Comenzar"
},
"NetworkSoftTimeout": "El servidor está tardando más en responder. Por favor, espere un momento"
},
@@ -1758,5 +1759,26 @@
"hour": "hora",
"day": "day",
"week": "semana"
+ },
+ "start": {
+ "CreateFolder": "Crear una nueva carpeta de almacenamiento",
+ "button": {
+ "CreateFolder": "Crear carpeta",
+ "StartSession": "Iniciar sesión",
+ "ModelService": "Iniciar servicio",
+ "StartNow": "Empezar ahora",
+ "StartBatchSession": "Comenzar desde una URL"
+ },
+ "CreateFolderDesc": "Crear una carpeta y cargar archivos es crucial para entrenar modelos o brindar servicios externamente. \nComience subiendo los archivos.",
+ "StartSession": "Iniciar una sesión interactiva",
+ "StartSessionDesc": "¿Quieres entrenar un modelo? \nHaga clic en el botón para crear una sesión al instante. \nElija su entorno y recursos preferidos para ejecutar código y otras tareas.",
+ "StartBatchSession": "Iniciar sesión por lotes",
+ "StartBatchSessionDesc": "Para archivos predefinidos o tareas programadas, pruebe las sesiones por lotes. \nIngrese el comando, establezca la fecha y la hora y ejecútelo según sea necesario.",
+ "ModelService": "Iniciar servicio de modelo",
+ "ModelServiceDesc": "¿Listo para compartir su modelo entrenado con otros? \nHaga clic en el botón para crear un servicio.",
+ "StartFromExample": "Empezar desde el ejemplo",
+ "StartFromExampleDesc": "Explore varios códigos de ejemplo y comience.",
+ "StartFromURL": "Empezar desde URL",
+ "StartFromURLDesc": "Importe su proyecto y código desde varios entornos como GitHub, GitLab, Notebook, etc."
}
}
diff --git a/resources/i18n/fi.json b/resources/i18n/fi.json
index bb7af91ce5..27e3734a14 100644
--- a/resources/i18n/fi.json
+++ b/resources/i18n/fi.json
@@ -1672,7 +1672,8 @@
"InvalidBlankEmail": "Syötä sähköpostiosoitteesi",
"DisMatchUserEmail": "Käyttäjän sähköpostiosoite ei täsmää",
"MyEnvironments": "Omat ympäristöt",
- "ResourcePolicy": "Resurssipolitiikka"
+ "ResourcePolicy": "Resurssipolitiikka",
+ "Start": "Aloita"
},
"NetworkSoftTimeout": "Palvelimen vastaus kestää kauemmin. Odota hetki"
},
@@ -1755,5 +1756,26 @@
"hour": "tunnin",
"day": "day",
"week": "viikko"
+ },
+ "start": {
+ "CreateFolder": "Luo uusi tallennuskansio",
+ "button": {
+ "CreateFolder": "Luo kansio",
+ "StartSession": "Aloita istunto",
+ "ModelService": "Aloita palvelu",
+ "StartNow": "Aloita nyt",
+ "StartBatchSession": "Aloita URL-osoitteesta"
+ },
+ "CreateFolderDesc": "Kansion luominen ja tiedostojen lataaminen ovat tärkeitä koulutusmallien tai palvelujen tarjoamisen kannalta. \nAloita lataamalla tiedostot.",
+ "StartSession": "Aloita interaktiivinen istunto",
+ "StartSessionDesc": "Haluatko kouluttaa mallia? \nNapsauta painiketta luodaksesi istunnon välittömästi. \nValitse haluamasi ympäristö ja resurssit koodin ja muiden tehtävien suorittamista varten.",
+ "StartBatchSession": "Aloita eräistunto",
+ "StartBatchSessionDesc": "Jos haluat käyttää ennalta määritettyjä tiedostoja tai ajoitettuja tehtäviä, kokeile eräistuntoja. \nAnna komento, aseta päivämäärä ja aika ja suorita tarvittaessa.",
+ "ModelService": "Käynnistä mallipalvelu",
+ "ModelServiceDesc": "Oletko valmis jakamaan koulutetun mallisi muiden kanssa? \nNapsauta painiketta luodaksesi palvelun.",
+ "StartFromExample": "Aloita esimerkistä",
+ "StartFromExampleDesc": "Tutustu erilaisiin esimerkkikoodeihin ja aloita.",
+ "StartFromURL": "Aloita URL-osoitteesta",
+ "StartFromURLDesc": "Tuo projektisi ja koodisi eri ympäristöistä, kuten GitHubista, GitLabista, Notebookista jne."
}
}
diff --git a/resources/i18n/fr.json b/resources/i18n/fr.json
index 3b48649e92..1bc2c528cd 100644
--- a/resources/i18n/fr.json
+++ b/resources/i18n/fr.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "Entrer votre Email",
"DisMatchUserEmail": "L'e-mail de l'utilisateur ne correspond pas",
"MyEnvironments": "Mes environnements",
- "ResourcePolicy": "Politique des ressources"
+ "ResourcePolicy": "Politique des ressources",
+ "Start": "Commencer"
},
"YouAreOffline": "Hors ligne : N'est connecté à aucun réseau.",
"YouAreOnline": "Vous êtes maintenant en ligne",
@@ -1756,5 +1757,26 @@
"hour": "heure",
"day": "day",
"week": "semaine"
+ },
+ "start": {
+ "CreateFolder": "Créer un nouveau dossier de stockage",
+ "button": {
+ "CreateFolder": "Créer un dossier",
+ "StartSession": "Démarrer la session",
+ "ModelService": "Démarrer le service",
+ "StartNow": "Commencez maintenant",
+ "StartBatchSession": "Commencer à partir d'une URL"
+ },
+ "CreateFolderDesc": "La création d'un dossier et le téléchargement de fichiers sont cruciaux pour former des modèles ou fournir des services en externe. \nVeuillez commencer par télécharger les fichiers.",
+ "StartSession": "Démarrer une session interactive",
+ "StartSessionDesc": "Vous souhaitez former un modèle ? \nCliquez sur le bouton pour créer une session instantanément. \nChoisissez votre environnement et vos ressources préférés pour exécuter du code et d'autres tâches.",
+ "StartBatchSession": "Démarrer une session par lots",
+ "StartBatchSessionDesc": "Pour les fichiers prédéfinis ou les tâches planifiées, essayez les sessions par lots. \nEntrez la commande, définissez la date et l'heure et exécutez-la selon vos besoins.",
+ "ModelService": "Démarrer le service de modèle",
+ "ModelServiceDesc": "Prêt à partager votre modèle formé avec d'autres ? \nCliquez sur le bouton pour créer un service.",
+ "StartFromExample": "Partir de l'exemple",
+ "StartFromExampleDesc": "Explorez divers exemples de codes et commencez.",
+ "StartFromURL": "Commencer à partir de l'URL",
+ "StartFromURLDesc": "Importez votre projet et votre code depuis divers environnements tels que GitHub, GitLab, Notebook, etc."
}
}
diff --git a/resources/i18n/id.json b/resources/i18n/id.json
index c55d137862..84301ac372 100644
--- a/resources/i18n/id.json
+++ b/resources/i18n/id.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "Masukkan email Anda",
"DisMatchUserEmail": "Email Pengguna tidak cocok",
"MyEnvironments": "Lingkungan Saya",
- "ResourcePolicy": "Kebijakan Sumber Daya"
+ "ResourcePolicy": "Kebijakan Sumber Daya",
+ "Start": "Awal"
},
"YouAreOffline": "Offline: Tidak terhubung ke jaringan apa pun.",
"YouAreOnline": "Anda sekarang online",
@@ -1756,5 +1757,26 @@
"hour": "jam",
"day": "day",
"week": "pekan"
+ },
+ "start": {
+ "CreateFolder": "Buat Folder Penyimpanan Baru",
+ "button": {
+ "CreateFolder": "Buat Folder",
+ "StartSession": "Mulai Sesi",
+ "ModelService": "Mulai Layanan",
+ "StartNow": "Mulai Sekarang",
+ "StartBatchSession": "Mulai dari URL"
+ },
+ "CreateFolderDesc": "Membuat folder dan mengunggah file sangat penting untuk melatih model atau menyediakan layanan secara eksternal. \nSilakan mulai dengan mengunggah file.",
+ "StartSession": "Mulai Sesi Interaktif",
+ "StartSessionDesc": "Ingin melatih model? \nKlik tombol untuk membuat sesi secara instan. \nPilih lingkungan dan sumber daya pilihan Anda untuk menjalankan kode dan tugas lainnya.",
+ "StartBatchSession": "Mulai Sesi Batch",
+ "StartBatchSessionDesc": "Untuk file yang telah ditentukan sebelumnya atau tugas terjadwal, cobalah sesi Batch. \nMasukkan perintah, atur tanggal dan waktu, dan jalankan sesuai kebutuhan.",
+ "ModelService": "Mulai Layanan Model",
+ "ModelServiceDesc": "Siap membagikan model terlatih Anda kepada orang lain? \nKlik tombol untuk membuat layanan.",
+ "StartFromExample": "Mulailah dari Contoh",
+ "StartFromExampleDesc": "Jelajahi berbagai contoh kode dan mulailah.",
+ "StartFromURL": "Mulai Dari URL",
+ "StartFromURLDesc": "Impor proyek dan kode Anda dari berbagai lingkungan seperti GitHub, GitLab, Notebook, dll."
}
}
diff --git a/resources/i18n/it.json b/resources/i18n/it.json
index fd8f072619..fcbe25a88f 100644
--- a/resources/i18n/it.json
+++ b/resources/i18n/it.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "Inserisci il tuo indirizzo email",
"DisMatchUserEmail": "L'e-mail dell'utente non corrisponde",
"MyEnvironments": "I miei ambienti",
- "ResourcePolicy": "Politica delle risorse"
+ "ResourcePolicy": "Politica delle risorse",
+ "Start": "Inizio"
},
"YouAreOffline": "Non in linea: Non è collegato ad alcuna rete.",
"YouAreOnline": "Ora sei online",
@@ -1756,5 +1757,26 @@
"hour": "ora",
"day": "day",
"week": "settimana"
+ },
+ "start": {
+ "CreateFolder": "Crea una nuova cartella di archiviazione",
+ "button": {
+ "CreateFolder": "Crea cartella",
+ "StartSession": "Avvia sessione",
+ "ModelService": "Avvia servizio",
+ "StartNow": "Inizia ora",
+ "StartBatchSession": "Inizia da un URL"
+ },
+ "CreateFolderDesc": "La creazione di una cartella e il caricamento di file sono fondamentali per la formazione di modelli o la fornitura di servizi esternamente. \nInizia caricando i file.",
+ "StartSession": "Avvia una sessione interattiva",
+ "StartSessionDesc": "Vuoi addestrare un modello? \nFare clic sul pulsante per creare immediatamente una sessione. \nScegli l'ambiente e le risorse preferiti per l'esecuzione del codice e altre attività.",
+ "StartBatchSession": "Avvia sessione batch",
+ "StartBatchSessionDesc": "Per file predefiniti o attività pianificate, prova le sessioni batch. \nImmettere il comando, impostare la data e l'ora ed eseguirlo secondo necessità.",
+ "ModelService": "Avvia il servizio modello",
+ "ModelServiceDesc": "Pronto a condividere il tuo modello addestrato con altri? \nFare clic sul pulsante per creare un servizio.",
+ "StartFromExample": "Partire dall'Esempio",
+ "StartFromExampleDesc": "Esplora vari codici di esempio e inizia.",
+ "StartFromURL": "Inizia dall'URL",
+ "StartFromURLDesc": "Importa il tuo progetto e codice da vari ambienti come GitHub, GitLab, Notebook, ecc."
}
}
diff --git a/resources/i18n/ja.json b/resources/i18n/ja.json
index a1cc356da1..d818e203ee 100644
--- a/resources/i18n/ja.json
+++ b/resources/i18n/ja.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "メールアドレスを入力",
"DisMatchUserEmail": "ユーザーの電子メールが一致しません",
"MyEnvironments": "私の環境",
- "ResourcePolicy": "リソースポリシー"
+ "ResourcePolicy": "リソースポリシー",
+ "Start": "始める"
},
"YouAreOffline": "オフライン:どのネットワークにも接続されていない。",
"YouAreOnline": "あなたは今オンラインです",
@@ -1756,5 +1757,26 @@
"hour": "時間",
"day": "日",
"week": "週"
+ },
+ "start": {
+ "CreateFolder": "新しい保存フォルダーを作成する",
+ "button": {
+ "CreateFolder": "フォルダーの作成",
+ "StartSession": "セッションの開始",
+ "ModelService": "サービス開始",
+ "StartNow": "今すぐ始めましょう",
+ "StartBatchSession": "URLから開始"
+ },
+ "CreateFolderDesc": "フォルダーの作成とファイルのアップロードは、モデルをトレーニングしたり、外部にサービスを提供したりするために重要です。\nファイルをアップロードすることから始めてください。",
+ "StartSession": "インタラクティブセッションを開始する",
+ "StartSessionDesc": "モデルをトレーニングしたいですか?\nボタンをクリックすると、セッションが即座に作成されます。\nコードやその他のタスクを実行するための優先環境とリソースを選択します。",
+ "StartBatchSession": "バッチセッションの開始",
+ "StartBatchSessionDesc": "事前定義されたファイルまたはスケジュールされたタスクについては、バッチ セッションを試してください。\nコマンドを入力し、日付と時刻を設定し、必要に応じて実行します。",
+ "ModelService": "モデルサービスの開始",
+ "ModelServiceDesc": "トレーニングされたモデルを他の人と共有する準備はできていますか?\nボタンをクリックしてサービスを作成します。",
+ "StartFromExample": "例から始める",
+ "StartFromExampleDesc": "さまざまなコード例を調べて開始してください。",
+ "StartFromURL": "URLから開始",
+ "StartFromURLDesc": "GitHub、GitLab、Notebook などのさまざまな環境からプロジェクトとコードをインポートします。"
}
}
diff --git a/resources/i18n/ko.json b/resources/i18n/ko.json
index dc783239f0..d8e883656e 100644
--- a/resources/i18n/ko.json
+++ b/resources/i18n/ko.json
@@ -65,7 +65,8 @@
"InvalidBlankPassword": "패스워드를 입력하세요.",
"DisMatchUserEmail": "사용자 E-mail이 일치하지 않습니다.",
"MyEnvironments": "나의 실행 환경",
- "ResourcePolicy": "자원 정책"
+ "ResourcePolicy": "자원 정책",
+ "Start": "시작"
},
"YouAreOffline": "오프라인: 네트워크에 연결되어 있지 않습니다.",
"YouAreOnline": "온라인 상태가 되었습니다",
@@ -1758,5 +1759,26 @@
"hour": "시간",
"day": "일",
"week": "주"
+ },
+ "start": {
+ "CreateFolder": "새 스토리지 폴더 생성하기",
+ "button": {
+ "CreateFolder": "폴더 생성하기",
+ "StartSession": "세션 생성",
+ "ModelService": "서비스 생성",
+ "StartNow": "지금 시작하기",
+ "StartBatchSession": "URL로 시작하기"
+ },
+ "CreateFolderDesc": "폴더를 만들고 파일을 업로드합니다. 모델을 학습시키거나 외부 서비스를 제공하려면 해당 작업은 필수적입니다.",
+ "StartSession": "Interactive 세션 생성",
+ "StartSessionDesc": "모델을 학습시킬 세션을 생성합니다. 원하는 환경과 리소스를 선택하여 코드를 실행하세요.",
+ "StartBatchSession": "Batch 세션 생성",
+ "StartBatchSessionDesc": "미리 정의된 파일 또는 예약된 작업에 대한 배치 세션을 생성합니다. 명령을 입력하고 날짜와 시간을 설정한 다음 필요에 따라 세션을 실행하세요.",
+ "ModelService": "모델 서비스 시작",
+ "ModelServiceDesc": "학습이 끝난 모델을 다른 사람과 공유하고 싶다면, 버튼을 클릭하여 서비스를 생성하세요.",
+ "StartFromExample": "가져오기 및 실행",
+ "StartFromExampleDesc": "다양한 예제 코드를 살펴보고, 해당 코드로부터 실행할 수 있습니다.",
+ "StartFromURL": "URL 로 시작",
+ "StartFromURLDesc": "GitHub, GitLab, Notebook 등 다양한 환경에서 프로젝트와 코드를 가져오고, 실행할 수 있습니다. "
}
}
diff --git a/resources/i18n/mn.json b/resources/i18n/mn.json
index f47c018975..df11199bc8 100644
--- a/resources/i18n/mn.json
+++ b/resources/i18n/mn.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "Имэйлээ оруулна уу",
"DisMatchUserEmail": "Хэрэглэгчийн имэйл таарахгүй байна",
"MyEnvironments": "Миний орчин",
- "ResourcePolicy": "Нөөцийн бодлого"
+ "ResourcePolicy": "Нөөцийн бодлого",
+ "Start": "Эхлэх"
},
"YouAreOffline": "Офлайн: Ямар ч сүлжээнд холбогдоогүй.",
"YouAreOnline": "Та одоо онлайн байна",
@@ -1756,5 +1757,26 @@
"hour": "цаг",
"day": "day",
"week": "долоо хоног"
+ },
+ "start": {
+ "CreateFolder": "Хадгалах шинэ хавтас үүсгэх",
+ "button": {
+ "CreateFolder": "Хавтас үүсгэх",
+ "StartSession": "Сеанс эхлүүлэх",
+ "ModelService": "Үйлчилгээг эхлүүлэх",
+ "StartNow": "Одоо эхэл",
+ "StartBatchSession": "URL-аас эхэл"
+ },
+ "CreateFolderDesc": "Загваруудыг сургах эсвэл гаднаас үйлчилгээ үзүүлэхэд хавтас үүсгэх, файл байршуулах нь маш чухал юм. \nФайлуудыг байршуулж эхэлнэ үү.",
+ "StartSession": "Интерактив сесс эхлүүлэх",
+ "StartSessionDesc": "Та загвар өмсөгч сурмаар байна уу? \nШууд сесс үүсгэхийн тулд товчлуур дээр дарна уу. \nКод болон бусад ажлуудыг ажиллуулахын тулд өөрийн дуртай орчин, нөөцийг сонго.",
+ "StartBatchSession": "Багц сессийг эхлүүлэх",
+ "StartBatchSessionDesc": "Урьдчилан тодорхойлсон файлууд эсвэл төлөвлөсөн ажлуудын хувьд Багц сессийг туршиж үзээрэй. \nТушаалыг оруулаад огноо, цагийг тохируулж, шаардлагатай бол ажиллуул.",
+ "ModelService": "Загварын үйлчилгээг эхлүүлэх",
+ "ModelServiceDesc": "Бэлтгэгдсэн загвараа бусадтай хуваалцахад бэлэн үү? \nҮйлчилгээ үүсгэхийн тулд товчлуур дээр дарна уу.",
+ "StartFromExample": "Жишээнээс эхэлье",
+ "StartFromExampleDesc": "Төрөл бүрийн жишээ кодуудыг судалж, эхлээрэй.",
+ "StartFromURL": "URL-аас эхлэх",
+ "StartFromURLDesc": "GitHub, GitLab, Notebook гэх мэт янз бүрийн орчноос өөрийн төсөл болон кодыг импортлох."
}
}
diff --git a/resources/i18n/ms.json b/resources/i18n/ms.json
index 3a23655c01..917002a237 100644
--- a/resources/i18n/ms.json
+++ b/resources/i18n/ms.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "Masukkan emel anda",
"DisMatchUserEmail": "E-mel Pengguna tidak sepadan",
"MyEnvironments": "Persekitaran Saya",
- "ResourcePolicy": "Dasar Sumber"
+ "ResourcePolicy": "Dasar Sumber",
+ "Start": "Mulakan"
},
"YouAreOffline": "Luar talian: Tidak disambungkan ke mana-mana rangkaian.",
"YouAreOnline": "Anda kini dalam talian",
@@ -1756,5 +1757,26 @@
"hour": "jam",
"day": "day",
"week": "minggu"
+ },
+ "start": {
+ "CreateFolder": "Buat Folder Storan Baharu",
+ "button": {
+ "CreateFolder": "Buat Folder",
+ "StartSession": "Mulakan Sesi",
+ "ModelService": "Mulakan Perkhidmatan",
+ "StartNow": "Mulakan Sekarang",
+ "StartBatchSession": "Mulakan daripada URL"
+ },
+ "CreateFolderDesc": "Mencipta folder dan memuat naik fail adalah penting untuk model latihan atau menyediakan perkhidmatan secara luaran. \nSila mulakan dengan memuat naik fail.",
+ "StartSession": "Mulakan Sesi Interaktif",
+ "StartSessionDesc": "Ingin melatih model? \nKlik butang untuk membuat sesi serta-merta. \nPilih persekitaran dan sumber pilihan anda untuk menjalankan kod dan tugasan lain.",
+ "StartBatchSession": "Mulakan Sesi Kelompok",
+ "StartBatchSessionDesc": "Untuk fail yang dipratentukan atau tugasan yang dijadualkan, cuba sesi Kelompok. \nMasukkan arahan, tetapkan tarikh dan masa, dan jalankan seperti yang diperlukan.",
+ "ModelService": "Mulakan Perkhidmatan Model",
+ "ModelServiceDesc": "Bersedia untuk berkongsi model terlatih anda dengan orang lain? \nKlik butang untuk membuat perkhidmatan.",
+ "StartFromExample": "Mulakan daripada Contoh",
+ "StartFromExampleDesc": "Terokai pelbagai contoh kod dan mulakan.",
+ "StartFromURL": "Mulakan Dari URL",
+ "StartFromURLDesc": "Import projek dan kod anda daripada pelbagai persekitaran seperti GitHub, GitLab, Notebook, dsb."
}
}
diff --git a/resources/i18n/pl.json b/resources/i18n/pl.json
index 49fa0ae652..240f9c7b8e 100644
--- a/resources/i18n/pl.json
+++ b/resources/i18n/pl.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "Wprowadź swój email",
"DisMatchUserEmail": "Adres e-mail użytkownika nie jest zgodny",
"MyEnvironments": "Moje Środowiska",
- "ResourcePolicy": "Polityka zasobów"
+ "ResourcePolicy": "Polityka zasobów",
+ "Start": "Start"
},
"YouAreOffline": "Offline: Brak połączenia z siecią.",
"YouAreOnline": "Jesteś teraz online",
@@ -1756,5 +1757,26 @@
"hour": "godzina",
"day": "day",
"week": "tydzień"
+ },
+ "start": {
+ "CreateFolder": "Utwórz nowy folder przechowywania",
+ "button": {
+ "CreateFolder": "Utwórz folder",
+ "StartSession": "Rozpocznij sesję",
+ "ModelService": "Uruchom usługę",
+ "StartNow": "Zacznij teraz",
+ "StartBatchSession": "Zacznij od adresu URL"
+ },
+ "CreateFolderDesc": "Utworzenie folderu i przesłanie plików jest kluczowe w przypadku uczenia modeli lub świadczenia usług na zewnątrz. \nRozpocznij od przesłania plików.",
+ "StartSession": "Rozpocznij sesję interaktywną",
+ "StartSessionDesc": "Chcesz wyszkolić modelkę? \nKliknij przycisk, aby natychmiast utworzyć sesję. \nWybierz preferowane środowisko i zasoby do uruchamiania kodu i innych zadań.",
+ "StartBatchSession": "Rozpocznij sesję wsadową",
+ "StartBatchSessionDesc": "W przypadku wstępnie zdefiniowanych plików lub zaplanowanych zadań wypróbuj sesje wsadowe. \nWprowadź polecenie, ustaw datę i godzinę i uruchom w razie potrzeby.",
+ "ModelService": "Uruchom usługę modelową",
+ "ModelServiceDesc": "Chcesz udostępnić wytrenowany model innym? \nKliknij przycisk, aby utworzyć usługę.",
+ "StartFromExample": "Zacznij od przykładu",
+ "StartFromExampleDesc": "Zapoznaj się z różnymi przykładowymi kodami i rozpocznij pracę.",
+ "StartFromURL": "Zacznij od adresu URL",
+ "StartFromURLDesc": "Zaimportuj swój projekt i kod z różnych środowisk, takich jak GitHub, GitLab, Notatnik itp."
}
}
diff --git a/resources/i18n/pt-BR.json b/resources/i18n/pt-BR.json
index 8cf39c15b3..ad86c0a2be 100644
--- a/resources/i18n/pt-BR.json
+++ b/resources/i18n/pt-BR.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "Digite seu e-mail",
"DisMatchUserEmail": "E-mail do usuário não corresponde",
"MyEnvironments": "Meus ambientes",
- "ResourcePolicy": "Política de Recursos"
+ "ResourcePolicy": "Política de Recursos",
+ "Start": "Começar"
},
"YouAreOffline": "Desligado: Não está ligado a nenhuma rede.",
"YouAreOnline": "Agora você está online",
@@ -1756,5 +1757,26 @@
"hour": "hora",
"day": "day",
"week": "semana"
+ },
+ "start": {
+ "CreateFolder": "Crie uma nova pasta de armazenamento",
+ "button": {
+ "CreateFolder": "Criar pasta",
+ "StartSession": "Iniciar sessão",
+ "ModelService": "Iniciar serviço",
+ "StartNow": "Comece agora",
+ "StartBatchSession": "Comece a partir de um URL"
+ },
+ "CreateFolderDesc": "Criar uma pasta e fazer upload de arquivos são cruciais para treinar modelos ou fornecer serviços externamente. \nComece enviando os arquivos.",
+ "StartSession": "Iniciar uma sessão interativa",
+ "StartSessionDesc": "Quer treinar um modelo? \nClique no botão para criar uma sessão instantaneamente. \nEscolha seu ambiente e recursos preferidos para executar código e outras tarefas.",
+ "StartBatchSession": "Iniciar sessão em lote",
+ "StartBatchSessionDesc": "Para arquivos predefinidos ou tarefas agendadas, experimente sessões em lote. \nDigite o comando, defina a data e a hora e execute conforme necessário.",
+ "ModelService": "Iniciar serviço de modelo",
+ "ModelServiceDesc": "Pronto para compartilhar seu modelo treinado com outras pessoas? \nClique no botão para criar um serviço.",
+ "StartFromExample": "Comece pelo exemplo",
+ "StartFromExampleDesc": "Explore vários exemplos de códigos e comece.",
+ "StartFromURL": "Começar do URL",
+ "StartFromURLDesc": "Importe seu projeto e código de vários ambientes como GitHub, GitLab, Notebook, etc."
}
}
diff --git a/resources/i18n/pt.json b/resources/i18n/pt.json
index 997cf704de..41fe314cbc 100644
--- a/resources/i18n/pt.json
+++ b/resources/i18n/pt.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "Digite seu e-mail",
"DisMatchUserEmail": "E-mail do usuário não corresponde",
"MyEnvironments": "Meus ambientes",
- "ResourcePolicy": "Política de Recursos"
+ "ResourcePolicy": "Política de Recursos",
+ "Start": "Começar"
},
"YouAreOffline": "Desligado: Não está ligado a nenhuma rede.",
"YouAreOnline": "Agora você está online",
@@ -1756,5 +1757,26 @@
"hour": "hora",
"day": "day",
"week": "semana"
+ },
+ "start": {
+ "CreateFolder": "Crie uma nova pasta de armazenamento",
+ "button": {
+ "CreateFolder": "Criar pasta",
+ "StartSession": "Iniciar sessão",
+ "ModelService": "Iniciar serviço",
+ "StartNow": "Comece agora",
+ "StartBatchSession": "Comece a partir de um URL"
+ },
+ "CreateFolderDesc": "Criar uma pasta e fazer upload de arquivos são cruciais para treinar modelos ou fornecer serviços externamente. \nComece enviando os arquivos.",
+ "StartSession": "Iniciar uma sessão interativa",
+ "StartSessionDesc": "Quer treinar um modelo? \nClique no botão para criar uma sessão instantaneamente. \nEscolha seu ambiente e recursos preferidos para executar código e outras tarefas.",
+ "StartBatchSession": "Iniciar sessão em lote",
+ "StartBatchSessionDesc": "Para arquivos predefinidos ou tarefas agendadas, experimente sessões em lote. \nDigite o comando, defina a data e a hora e execute conforme necessário.",
+ "ModelService": "Iniciar serviço de modelo",
+ "ModelServiceDesc": "Pronto para compartilhar seu modelo treinado com outras pessoas? \nClique no botão para criar um serviço.",
+ "StartFromExample": "Comece pelo exemplo",
+ "StartFromExampleDesc": "Explore vários exemplos de códigos e comece.",
+ "StartFromURL": "Começar do URL",
+ "StartFromURLDesc": "Importe seu projeto e código de vários ambientes como GitHub, GitLab, Notebook, etc."
}
}
diff --git a/resources/i18n/ru.json b/resources/i18n/ru.json
index 7a6592a45b..00ce979dfc 100644
--- a/resources/i18n/ru.json
+++ b/resources/i18n/ru.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "Введите адрес электронной почты",
"DisMatchUserEmail": "Электронная почта пользователя не совпадает",
"MyEnvironments": "Моя среда",
- "ResourcePolicy": "Ресурсная политика"
+ "ResourcePolicy": "Ресурсная политика",
+ "Start": "Начинать"
},
"YouAreOffline": "Не в сети: Не подключен ни к одной сети.",
"YouAreOnline": "Вы сейчас в сети",
@@ -1756,5 +1757,26 @@
"hour": "час",
"day": "day",
"week": "неделя"
+ },
+ "start": {
+ "CreateFolder": "Создайте новую папку хранения",
+ "button": {
+ "CreateFolder": "Создать папку",
+ "StartSession": "Начать сеанс",
+ "ModelService": "Запустить службу",
+ "StartNow": "Начать сейчас",
+ "StartBatchSession": "Начать с URL-адреса"
+ },
+ "CreateFolderDesc": "Создание папки и загрузка файлов имеют решающее значение для обучения моделей или внешнего предоставления услуг. \nПожалуйста, начните с загрузки файлов.",
+ "StartSession": "Начать интерактивный сеанс",
+ "StartSessionDesc": "Хотите обучить модель? \nНажмите кнопку, чтобы мгновенно создать сеанс. \nВыберите предпочитаемую среду и ресурсы для выполнения кода и других задач.",
+ "StartBatchSession": "Начать пакетный сеанс",
+ "StartBatchSessionDesc": "Для предопределенных файлов или запланированных задач попробуйте пакетные сеансы. \nВведите команду, установите дату и время и запускайте по мере необходимости.",
+ "ModelService": "Запустить службу модели",
+ "ModelServiceDesc": "Готовы поделиться своей обученной моделью с другими? \nНажмите кнопку, чтобы создать услугу.",
+ "StartFromExample": "Начните с примера",
+ "StartFromExampleDesc": "Изучите различные примеры кода и приступайте к работе.",
+ "StartFromURL": "Начать с URL-адреса",
+ "StartFromURLDesc": "Импортируйте свой проект и код из различных сред, таких как GitHub, GitLab, Notebook и т. д."
}
}
diff --git a/resources/i18n/th.json b/resources/i18n/th.json
index 5fa2078538..a65bd5b073 100644
--- a/resources/i18n/th.json
+++ b/resources/i18n/th.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "ใส่อีเมลของคุณ",
"DisMatchUserEmail": "อีเมลผู้ใช้ไม่ตรงกัน",
"MyEnvironments": "สภาพแวดล้อมของฉัน",
- "ResourcePolicy": "นโยบายทรัพยากร"
+ "ResourcePolicy": "นโยบายทรัพยากร",
+ "Start": "เริ่ม"
},
"YouAreOffline": "ออฟไลน์: ไม่ได้เชื่อมต่อกับเครือข่ายใดๆ",
"YouAreOnline": "คุณออนไลน์แล้ว",
@@ -1736,5 +1737,26 @@
"hour": "ชั่วโมง",
"day": "day",
"week": "สัปดาห์"
+ },
+ "start": {
+ "CreateFolder": "สร้างโฟลเดอร์จัดเก็บข้อมูลใหม่",
+ "button": {
+ "CreateFolder": "สร้างโฟลเดอร์",
+ "StartSession": "เริ่มเซสชัน",
+ "ModelService": "เริ่มบริการ",
+ "StartNow": "เริ่มเลย",
+ "StartBatchSession": "เริ่มจาก URL"
+ },
+ "CreateFolderDesc": "การสร้างโฟลเดอร์และการอัพโหลดไฟล์ถือเป็นสิ่งสำคัญสำหรับโมเดลการฝึกหรือการให้บริการภายนอก \nกรุณาเริ่มต้นด้วยการอัพโหลดไฟล์",
+ "StartSession": "เริ่มเซสชันแบบโต้ตอบ",
+ "StartSessionDesc": "ต้องการฝึกโมเดลหรือไม่? \nคลิกปุ่มเพื่อสร้างเซสชันทันที \nเลือกสภาพแวดล้อมและทรัพยากรที่คุณต้องการสำหรับการรันโค้ดและงานอื่นๆ",
+ "StartBatchSession": "เริ่มเซสชันแบทช์",
+ "StartBatchSessionDesc": "สำหรับไฟล์ที่กำหนดไว้ล่วงหน้าหรืองานที่กำหนดเวลาไว้ ให้ลองใช้เซสชันแบบกลุ่ม \nป้อนคำสั่ง ตั้งค่าวันที่และเวลา และรันตามต้องการ",
+ "ModelService": "เริ่มบริการโมเดล",
+ "ModelServiceDesc": "พร้อมที่จะแบ่งปันโมเดลที่ผ่านการฝึกอบรมของคุณกับผู้อื่นแล้วหรือยัง? \nคลิกปุ่มเพื่อสร้างบริการ",
+ "StartFromExample": "เริ่มจากตัวอย่าง",
+ "StartFromExampleDesc": "สำรวจโค้ดตัวอย่างต่างๆ และเริ่มต้นใช้งาน",
+ "StartFromURL": "เริ่มจาก URL",
+ "StartFromURLDesc": "นำเข้าโปรเจ็กต์และโค้ดของคุณจากสภาพแวดล้อมต่างๆ เช่น GitHub, GitLab, Notebook เป็นต้น"
}
}
diff --git a/resources/i18n/tr.json b/resources/i18n/tr.json
index 400ae355f8..d8681d85fe 100644
--- a/resources/i18n/tr.json
+++ b/resources/i18n/tr.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "E-postanızı giriniz",
"DisMatchUserEmail": "Kullanıcı E-postası eşleşmiyor",
"MyEnvironments": "Ortamlarım",
- "ResourcePolicy": "Kaynak Politikası"
+ "ResourcePolicy": "Kaynak Politikası",
+ "Start": "Başlangıç"
},
"YouAreOffline": "Çevrimdışı: Herhangi bir ağa bağlı değil.",
"YouAreOnline": "artık çevrimiçisin",
@@ -1755,5 +1756,26 @@
"hour": "saat",
"day": "day",
"week": "hafta"
+ },
+ "start": {
+ "CreateFolder": "Yeni Bir Depolama Klasörü Oluşturun",
+ "button": {
+ "CreateFolder": "Klasör Oluştur",
+ "StartSession": "Oturumu Başlat",
+ "ModelService": "Hizmeti Başlat",
+ "StartNow": "Şimdi Başla",
+ "StartBatchSession": "Bir URL'den başlayın"
+ },
+ "CreateFolderDesc": "Bir klasör oluşturmak ve dosyaları yüklemek, modellerin eğitimi veya dışarıdan hizmet sağlanması için çok önemlidir. \nLütfen dosyaları yükleyerek başlayın.",
+ "StartSession": "Etkileşimli Bir Oturum Başlatın",
+ "StartSessionDesc": "Bir model yetiştirmek ister misiniz? \nAnında oturum oluşturmak için düğmeye tıklayın. \nKod çalıştırmak ve diğer görevler için tercih ettiğiniz ortamı ve kaynakları seçin.",
+ "StartBatchSession": "Toplu Oturumu Başlat",
+ "StartBatchSessionDesc": "Önceden tanımlanmış dosyalar veya zamanlanmış görevler için Toplu oturumları deneyin. \nKomutu girin, tarih ve saati ayarlayın ve gerektiği gibi çalıştırın.",
+ "ModelService": "Model Hizmetini Başlat",
+ "ModelServiceDesc": "Eğitimli modelinizi başkalarıyla paylaşmaya hazır mısınız? \nBir hizmet oluşturmak için düğmeye tıklayın.",
+ "StartFromExample": "Örnekten Başlayın",
+ "StartFromExampleDesc": "Çeşitli örnek kodları keşfedin ve başlayın.",
+ "StartFromURL": "URL'den Başla",
+ "StartFromURLDesc": "Projenizi ve kodunuzu GitHub, GitLab, Notebook vb. çeşitli ortamlardan içe aktarın."
}
}
diff --git a/resources/i18n/vi.json b/resources/i18n/vi.json
index 4104b6610e..6f74b30059 100644
--- a/resources/i18n/vi.json
+++ b/resources/i18n/vi.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "Nhập email của bạn",
"DisMatchUserEmail": "E-mail của người dùng không khớp",
"MyEnvironments": "Môi trường của tôi",
- "ResourcePolicy": "Chính sách tài nguyên"
+ "ResourcePolicy": "Chính sách tài nguyên",
+ "Start": "Bắt đầu"
},
"YouAreOffline": "Ngoại tuyến: Không kết nối với bất kỳ mạng nào.",
"YouAreOnline": "Bạn hiện đang trực tuyến",
@@ -1756,5 +1757,26 @@
"hour": "giờ",
"day": "day",
"week": "tuần"
+ },
+ "start": {
+ "CreateFolder": "Tạo thư mục lưu trữ mới",
+ "button": {
+ "CreateFolder": "Tạo thư mục",
+ "StartSession": "Bắt đầu phiên",
+ "ModelService": "Bắt đầu dịch vụ",
+ "StartNow": "Bắt đầu ngay bây giờ",
+ "StartBatchSession": "Bắt đầu từ một URL"
+ },
+ "CreateFolderDesc": "Việc tạo thư mục và tải tệp lên là rất quan trọng đối với việc đào tạo mô hình hoặc cung cấp dịch vụ bên ngoài. \nHãy bắt đầu bằng cách tải lên các tập tin.",
+ "StartSession": "Bắt đầu một phiên tương tác",
+ "StartSessionDesc": "Bạn muốn đào tạo một người mẫu? \nNhấp vào nút để tạo phiên ngay lập tức. \nChọn môi trường và tài nguyên ưa thích của bạn để chạy mã và các tác vụ khác.",
+ "StartBatchSession": "Bắt đầu phiên hàng loạt",
+ "StartBatchSessionDesc": "Đối với các tệp được xác định trước hoặc các tác vụ đã lên lịch, hãy thử phiên Batch. \nNhập lệnh, đặt ngày giờ và chạy khi cần.",
+ "ModelService": "Bắt đầu dịch vụ mẫu",
+ "ModelServiceDesc": "Sẵn sàng chia sẻ mô hình được đào tạo của bạn với người khác? \nNhấp vào nút để tạo một dịch vụ.",
+ "StartFromExample": "Bắt đầu từ ví dụ",
+ "StartFromExampleDesc": "Khám phá các mã ví dụ khác nhau và bắt đầu.",
+ "StartFromURL": "Bắt đầu từ URL",
+ "StartFromURLDesc": "Nhập dự án và mã của bạn từ nhiều môi trường khác nhau như GitHub, GitLab, Notebook, v.v."
}
}
diff --git a/resources/i18n/zh-CN.json b/resources/i18n/zh-CN.json
index 6749d68cba..514e6ae79b 100644
--- a/resources/i18n/zh-CN.json
+++ b/resources/i18n/zh-CN.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "输入你的电子邮箱",
"DisMatchUserEmail": "用户电子邮件不匹配",
"MyEnvironments": "我的环境",
- "ResourcePolicy": "资源政策"
+ "ResourcePolicy": "资源政策",
+ "Start": "开始"
},
"YouAreOffline": "脱机:未连接任何网络。",
"YouAreOnline": "您现在在线",
@@ -1757,5 +1758,26 @@
"hour": "小时",
"day": "day",
"week": "星期"
+ },
+ "start": {
+ "CreateFolder": "创建新的存储文件夹",
+ "button": {
+ "CreateFolder": "创建文件夹",
+ "StartSession": "开始会话",
+ "ModelService": "启动服务",
+ "StartNow": "现在开始",
+ "StartBatchSession": "从 URL 开始"
+ },
+ "CreateFolderDesc": "创建文件夹和上传文件对于训练模型或对外提供服务至关重要。\n请首先上传文件。",
+ "StartSession": "开始互动会话",
+ "StartSessionDesc": "想训练模型吗?\n单击该按钮即可立即创建会话。\n选择您喜欢的环境和资源来运行代码和其他任务。",
+ "StartBatchSession": "开始批量会话",
+ "StartBatchSessionDesc": "对于预定义文件或计划任务,请尝试批处理会话。\n输入命令,设置日期和时间,然后根据需要运行。",
+ "ModelService": "启动模型服务",
+ "ModelServiceDesc": "准备好与其他人分享您训练过的模型了吗?\n单击按钮创建服务。",
+ "StartFromExample": "从例子开始",
+ "StartFromExampleDesc": "探索各种示例代码并开始使用。",
+ "StartFromURL": "从网址开始",
+ "StartFromURLDesc": "从各种环境(例如 GitHub、GitLab、Notebook 等)导入您的项目和代码。"
}
}
diff --git a/resources/i18n/zh-TW.json b/resources/i18n/zh-TW.json
index d0e87d4cc2..960aa75359 100644
--- a/resources/i18n/zh-TW.json
+++ b/resources/i18n/zh-TW.json
@@ -65,7 +65,8 @@
"InvalidBlankEmail": "輸入你的電子郵件信箱",
"DisMatchUserEmail": "使用者電子郵件不符",
"MyEnvironments": "我的環境",
- "ResourcePolicy": "資源政策"
+ "ResourcePolicy": "資源政策",
+ "Start": "開始"
},
"YouAreOffline": "脱机:未连接任何网络。",
"YouAreOnline": "您現在在線",
@@ -1757,5 +1758,26 @@
"hour": "小時",
"day": "day",
"week": "星期"
+ },
+ "start": {
+ "CreateFolder": "建立新的儲存資料夾",
+ "button": {
+ "CreateFolder": "建立資料夾",
+ "StartSession": "開始會話",
+ "ModelService": "啟動服務",
+ "StartNow": "現在開始",
+ "StartBatchSession": "從 URL 開始"
+ },
+ "CreateFolderDesc": "建立資料夾和上傳檔案對於訓練模型或對外提供服務至關重要。\n請先上傳文件。",
+ "StartSession": "開始互動會話",
+ "StartSessionDesc": "想訓練模型嗎?\n按一下該按鈕即可立即建立會話。\n選擇您喜歡的環境和資源來執行程式碼和其他任務。",
+ "StartBatchSession": "開始批量會話",
+ "StartBatchSessionDesc": "對於預先定義檔案或排程任務,請嘗試批次會話。\n輸入命令,設定日期和時間,然後根據需要運行。",
+ "ModelService": "啟動模型服務",
+ "ModelServiceDesc": "準備好與其他人分享您訓練過的模型了嗎?\n點選按鈕建立服務。",
+ "StartFromExample": "從例子開始",
+ "StartFromExampleDesc": "探索各種範例程式碼並開始使用。",
+ "StartFromURL": "從網址開始",
+ "StartFromURLDesc": "從各種環境(例如 GitHub、GitLab、Notebook 等)匯入您的專案和程式碼。"
}
}
diff --git a/resources/theme.json b/resources/theme.json
index 1b2c28a8b9..9d69ae15c4 100644
--- a/resources/theme.json
+++ b/resources/theme.json
@@ -57,7 +57,7 @@
"logoTitle": "WebUI",
"logoTitleCollapsed": "WebUI",
"alt": "Backend.AI Logo",
- "href": "/summary",
+ "href": "/start",
"sizeCollapsed": {
"width": 34,
"height": 34
diff --git a/src/backend-ai-app.ts b/src/backend-ai-app.ts
index c92c60e16d..3b34185a8a 100644
--- a/src/backend-ai-app.ts
+++ b/src/backend-ai-app.ts
@@ -12,6 +12,7 @@ export const navigate =
// Extract the page name from path.
if (
[
+ '/start',
'/summary',
'/job',
'/session',
diff --git a/src/components/backend-ai-error-view.ts b/src/components/backend-ai-error-view.ts
index 447b03acb9..e00f981eef 100644
--- a/src/components/backend-ai-error-view.ts
+++ b/src/components/backend-ai-error-view.ts
@@ -70,8 +70,8 @@ export default class BackendAIErrorView extends BackendAIPage {
* @param {string} url - page to redirect from the current page.
*/
_moveTo(url = '') {
- const page = url !== '' ? url : 'summary';
- globalThis.history.pushState({}, '', '/summary');
+ const page = url !== '' ? url : 'start';
+ globalThis.history.pushState({}, '', '/start');
store.dispatch(navigate(decodeURIComponent('/' + page), {}));
document.dispatchEvent(
new CustomEvent('react-navigate', {
@@ -98,7 +98,7 @@ export default class BackendAIErrorView extends BackendAIPage {
fullwidth
id="go-to-summary"
label="${_t('button.GoBackToSummaryPage')}"
- @click="${() => this._moveTo('summary')}"
+ @click="${() => this._moveTo('start')}"
>
diff --git a/src/components/backend-ai-permission-denied-view.ts b/src/components/backend-ai-permission-denied-view.ts
index 503a11adba..21b5e1e580 100644
--- a/src/components/backend-ai-permission-denied-view.ts
+++ b/src/components/backend-ai-permission-denied-view.ts
@@ -113,8 +113,8 @@ export default class BackendAIPermissionDeniedView extends BackendAIPage {
* @param {string} url - page to redirect from the current page.
*/
_moveTo(url = '') {
- const page = url !== '' ? url : 'summary';
- globalThis.history.pushState({}, '', '/summary');
+ const page = url !== '' ? url : 'start';
+ globalThis.history.pushState({}, '', '/start');
store.dispatch(navigate(decodeURIComponent('/' + page), {}));
}
@@ -135,7 +135,7 @@ export default class BackendAIPermissionDeniedView extends BackendAIPage {
fullwidth
id="go-to-summary"
label="${_t('button.GoBackToSummaryPage')}"
- @click="${() => this._moveTo('summary')}"
+ @click="${() => this._moveTo('start')}"
>
diff --git a/src/components/backend-ai-storage-list.ts b/src/components/backend-ai-storage-list.ts
index 5bd2b27369..328de6ad14 100644
--- a/src/components/backend-ai-storage-list.ts
+++ b/src/components/backend-ai-storage-list.ts
@@ -1080,7 +1080,7 @@ export default class BackendAiStorageList extends BackendAIPage {
* @param {string} url - page to redirect from the current page.
*/
_moveTo(url = '') {
- const page = url !== '' ? url : 'summary';
+ const page = url !== '' ? url : 'start';
// globalThis.history.pushState({}, '', page);
store.dispatch(navigate(decodeURIComponent(page), {}));
diff --git a/src/components/backend-ai-storage-proxy-list.ts b/src/components/backend-ai-storage-proxy-list.ts
index 6b1c808a21..e37bd812ed 100644
--- a/src/components/backend-ai-storage-proxy-list.ts
+++ b/src/components/backend-ai-storage-proxy-list.ts
@@ -249,7 +249,7 @@ export default class BackendAIStorageProxyList extends BackendAIPage {
* @param {string} url - page to redirect from the current page.
*/
_moveTo(url = '') {
- const page = url !== '' ? url : 'summary';
+ const page = url !== '' ? url : 'start';
// globalThis.history.pushState({}, '', page);
store.dispatch(navigate(decodeURIComponent(page), {}));
diff --git a/src/components/backend-ai-summary-view.ts b/src/components/backend-ai-summary-view.ts
index 0e51b26e3d..a8e343e779 100644
--- a/src/components/backend-ai-summary-view.ts
+++ b/src/components/backend-ai-summary-view.ts
@@ -469,7 +469,7 @@ export default class BackendAISummary extends BackendAIPage {
* @param {string} search
*/
_moveTo(url = '', search: string | undefined = undefined) {
- const page = url !== '' ? url : 'summary';
+ const page = url !== '' ? url : 'start';
// globalThis.history.pushState({}, '', page);
store.dispatch(navigate(decodeURIComponent(page), {}));
diff --git a/src/components/backend-ai-webui.ts b/src/components/backend-ai-webui.ts
index df6e289260..eae170d4d4 100644
--- a/src/components/backend-ai-webui.ts
+++ b/src/components/backend-ai-webui.ts
@@ -145,6 +145,7 @@ export default class BackendAIWebUI extends connect(store)(LitElement) {
@property({ type: Number }) sidepanelWidth = 250;
@property({ type: Object }) supports = Object();
@property({ type: Array }) availablePages = [
+ 'start',
'summary',
'verify-email',
'change-password',
@@ -719,7 +720,7 @@ export default class BackendAIWebUI extends connect(store)(LitElement) {
*/
_loadPageElement() {
if (this._page === 'index.html' || this._page === '') {
- this._page = 'summary';
+ this._page = 'start';
navigate(decodeURIComponent('/'));
}
}