diff --git a/client/src/app/data/store.ts b/client/src/app/data/store.ts index a3c1186f..873ab20a 100644 --- a/client/src/app/data/store.ts +++ b/client/src/app/data/store.ts @@ -1,9 +1,7 @@ import * as $ from 'react-exo/redux'; import {KV} from 'react-exo/kv'; import cfg from 'config'; - import app from 'app/store'; -import media from 'media/store'; const reducer = $.persistReducer({ key: cfg.APP_NAME, @@ -18,7 +16,6 @@ const reducer = $.persistReducer({ }, $.combineReducers({ router: $.history.context.routerReducer, app: app.reducer, - media: media.reducer, })); const store = $.configureStore({ diff --git a/client/src/app/hooks/useCurrentResource.ts b/client/src/app/hooks/useCurrentResource.ts new file mode 100644 index 00000000..a1b59254 --- /dev/null +++ b/client/src/app/hooks/useCurrentResource.ts @@ -0,0 +1,22 @@ +import {useState, useEffect} from 'react'; +import {useLocation} from 'react-exo/navigation'; + +export function useCurrentResource() { + const {pathname, hash} = useLocation(); + const [path, setPath] = useState(hash ? `${pathname}/${hash?.slice(1)}` : ''); + const [maximized, setMaximized] = useState(true); + + useEffect(() => { + if (hash) { + const _path = `${pathname}/${hash?.slice(1)}`; + if (_path !== path) { + setPath(_path); + } + setMaximized(true); + } else { + setMaximized(false); + } + }, [pathname, hash, path]); + + return {path, maximized, setPath, setMaximized}; +} diff --git a/client/src/app/interface/Menu.tsx b/client/src/app/interface/Menu.tsx index a6a9dc3a..f41b91c7 100644 --- a/client/src/app/interface/Menu.tsx +++ b/client/src/app/interface/Menu.tsx @@ -1,9 +1,8 @@ import {Trans} from '@lingui/macro'; -import {View, ScrollView, Text} from 'react-native'; +import {View, ScrollView} from 'react-native'; import {useStyles, createStyleSheet} from 'react-native-unistyles'; import {StorageIndicator} from 'media/stacks/StorageIndicator'; import {useFileSystem} from 'media/hooks/useFileSystem'; -import {useLists} from 'media/hooks/useLists'; import {MenuItem} from './MenuItem'; import {MenuHeader} from './MenuHeader'; @@ -16,9 +15,9 @@ export interface MenuProps { } export function Menu(props: MenuProps) { - const lists = useLists(); + // const lists = useLists(); const {importFile} = useFileSystem(); - const {styles, theme} = useStyles(stylesheet); + const {styles} = useStyles(stylesheet); return ( @@ -95,7 +94,7 @@ export function Menu(props: MenuProps) { path="/calendar" /> - Favorites}> + {/* Favorites}> {lists.map(({id}) => )} - + */} {__DEV__ && Dev Mode} closed> - + {props.children} - + ); } diff --git a/client/src/app/routes/MainLayout.tsx b/client/src/app/routes/MainLayout.tsx index aa3d5454..28b00ba1 100644 --- a/client/src/app/routes/MainLayout.tsx +++ b/client/src/app/routes/MainLayout.tsx @@ -1,12 +1,12 @@ -import {useState, useEffect} from 'react'; -import {useLocation, Outlet} from 'react-exo/navigation'; -import {useWindowDimensions, View, StatusBar} from 'react-native'; +import {Outlet} from 'react-exo/navigation'; import {useStyles, createStyleSheet} from 'react-native-unistyles'; +import {useWindowDimensions, View, StatusBar} from 'react-native'; +import {useCurrentResource} from 'app/hooks/useCurrentResource'; import {useDeviceSession} from 'app/hooks/useDeviceSession'; import {useProfile} from 'app/data'; import {Menu} from 'app/interface/Menu'; import {Tabs} from 'app/interface/Tabs'; -import {File} from 'media/stacks/File'; +import {CurrentFile} from 'media/stacks/CurrentFile'; import type {useAppContext} from 'app/hooks/useAppContext'; @@ -14,48 +14,41 @@ export const APP_MENU_WIDTH = 146; export const APP_MENU_TAB_HEIGHT = 64; export default function MainLayout() { + const {styles, theme} = useStyles(stylesheet); + const resource = useCurrentResource(); const screen = useWindowDimensions(); const device = useDeviceSession(); const profile = useProfile(); - const {styles, theme} = useStyles(stylesheet); - const {pathname, hash} = useLocation(); - const [pinnedFile, setPinnedFile] = useState(`${pathname}/${hash?.slice(1)}`); - const [pinMaximized, setPinMaximized] = useState(true); - const context: ReturnType = {device, profile}; - const tabs = screen.width < theme.breakpoints.xs; - const vert = screen.width < theme.breakpoints.sm; + + const isVertical = screen.width < theme.breakpoints.sm; + const hasTabs = screen.width < theme.breakpoints.xs; const vstyles = { - root: [styles.root, tabs && styles.rootTabs], - menu: [styles.menu, tabs && styles.menuTabs], - content: [styles.content, vert && styles.contentVert], + root: [styles.root, hasTabs && styles.rootTabs], + menu: [styles.menu, hasTabs && styles.menuTabs], + content: [styles.content, isVertical && styles.contentVert], }; - useEffect(() => { - if (hash) { - const path = `${pathname}/${hash?.slice(1)}`; - if (path !== pinnedFile) { - setPinnedFile(path); - } - setPinMaximized(true); - } else { - setPinMaximized(false); - } - }, [hash, pathname, pinnedFile]); + const context: ReturnType = { + profile, + device, + }; return <> - {tabs ? : } + {hasTabs ? : } - setPinnedFile('')} - /> + {Boolean(resource.path) && + resource.setPath('')} + /> + } ; diff --git a/client/src/media/hooks/useDirectory.ts b/client/src/media/hooks/useDirectory.ts index eb002099..518f20da 100644 --- a/client/src/media/hooks/useDirectory.ts +++ b/client/src/media/hooks/useDirectory.ts @@ -1,6 +1,6 @@ import {fs} from 'react-exo/fs'; import {useState, useEffect} from 'react'; -import {INIT_DIRECTORIES} from './useInitDirectories'; +import {isInitDirectory} from 'media/utils/path'; import type {HfsDirectoryEntry} from 'react-exo/fs'; interface DirectoryOptions { @@ -18,7 +18,7 @@ export function useDirectory(path: string, options?: DirectoryOptions) { for await (const entry of hfs.list?.(dirPath) ?? []) { if (entry.name.endsWith('.crswap')) continue; if (entry.name.startsWith('.') && !options?.showHidden) continue; - if (dirPath === '.' && INIT_DIRECTORIES.includes(entry.name)) continue; + if (dirPath === '.' && isInitDirectory(entry.name)) continue; entries.push(entry); } setEntries(entries.sort((a, b) => { diff --git a/client/src/media/hooks/useFileSystem.tsx b/client/src/media/hooks/useFileSystem.tsx index 7d547da0..ed568382 100644 --- a/client/src/media/hooks/useFileSystem.tsx +++ b/client/src/media/hooks/useFileSystem.tsx @@ -1,53 +1,25 @@ -import {useCallback} from 'react'; import {fs} from 'react-exo/fs'; - -import type {OpenDirectoryOptions} from 'react-exo/fs'; +import {useCallback} from 'react'; +import {getStartInDir} from 'media/utils/path'; export function useFileSystem() { - const getOpenDirectoryInit = useCallback((path: string) => { - let startIn: OpenDirectoryOptions['startIn']; - switch (path) { - case 'documents': startIn = 'documents'; break; - case 'pictures': startIn = 'pictures'; break; - case 'videos': startIn = 'videos'; break; - case 'music': startIn = 'music'; break; - case 'downloads': startIn = 'downloads'; break; - default: startIn = 'desktop'; - } - return startIn; - }, []); - - const importDirectory = useCallback(async (path = '.') => { - const startIn = getOpenDirectoryInit(path); - const dir = await fs.openDirectory({id: path, startIn, mode: 'read'}); - const start = performance.now(); - const copy = await fs.importDirectory(dir, path); - console.log('[fs] import dir', copy, performance.now() - start); - }, [getOpenDirectoryInit]); - const importFile = useCallback(async () => { + const perfStart = performance.now(); const file = await fs.openFile(); - console.log('[fs] file', file); - const start = performance.now(); const copy = await fs.importFile(file); - console.log('[fs] import file', copy, performance.now() - start); + console.log('[fs] import file', file, copy, performance.now() - perfStart); }, []); - const hashFile = useCallback(async () => { - const file = await fs.openFile(); - console.log('[fs] file', file); - const start = performance.now(); - const hash = await fs.hashFile(file, (bytes, total) => { - console.log('[fs] hashing', (bytes / total) * 100); - }); - console.log('[fs] hash', hash, performance.now() - start); + const importDirectory = useCallback(async (path = '.') => { + const perfStart = performance.now(); + const startIn = getStartInDir(path); + const dir = await fs.openDirectory({id: path, startIn, mode: 'read'}); + const copy = await fs.importDirectory(dir, path); + console.log('[fs] import dir', dir, copy, performance.now() - perfStart); }, []); return { - getOpenDirectoryInit, - importDirectory, importFile, - hashFile, + importDirectory, }; } - diff --git a/client/src/media/hooks/useInitDirectories.ts b/client/src/media/hooks/useInitDirectories.ts index 46224c81..9bc2b129 100644 --- a/client/src/media/hooks/useInitDirectories.ts +++ b/client/src/media/hooks/useInitDirectories.ts @@ -1,16 +1,6 @@ import {fs} from 'react-exo/fs'; import {useEffect} from 'react'; - -export const INIT_DIRECTORIES = [ - 'documents', - 'music', - 'pictures', - 'videos', - 'games', - 'books', - 'downloads', - 'uploads', -]; +import {INIT_DIRECTORIES} from 'media/utils/path'; export function useInitDirectories() { useEffect(() => { diff --git a/client/src/media/hooks/useLists.ts b/client/src/media/hooks/useLists.ts deleted file mode 100644 index 1c3cddf5..00000000 --- a/client/src/media/hooks/useLists.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {useSelector} from 'react-redux'; -import store from 'media/store'; - -export function useLists() { - return useSelector(store.selectors.getLists); -} diff --git a/client/src/media/hooks/useTasks.ts b/client/src/media/hooks/useTasks.ts deleted file mode 100644 index b8953fb6..00000000 --- a/client/src/media/hooks/useTasks.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {useSelector, useDispatch} from 'react-redux'; -import files from 'media/store'; -import type {State} from 'app/data/store'; - -export function useTasks(list?: string) { - if (!list) throw new Error('List is required'); - - const dispatch = useDispatch(); - - return { - active: useSelector((state: State) => - files.selectors.getActive(state, list)), - - complete: useSelector((state: State) => - files.selectors.getComplete(state, list)), - - addActive: (item: string) => - dispatch(files.actions.add({list, item})), - - addComplete: (item: string) => - dispatch(files.actions.complete({list, item})), - }; -} diff --git a/client/src/media/stacks/CurrentFile.tsx b/client/src/media/stacks/CurrentFile.tsx new file mode 100644 index 00000000..9ea00bee --- /dev/null +++ b/client/src/media/stacks/CurrentFile.tsx @@ -0,0 +1,181 @@ +import {Icon} from 'react-exo/icon'; +import {useNavigate} from 'react-exo/navigation'; +import {useStyles, createStyleSheet} from 'react-native-unistyles'; +import {useWindowDimensions, View, Pressable} from 'react-native'; +import {useMemo, useState} from 'react'; +import {resolve} from 'media/utils/path'; +import {File} from 'media/stacks/File'; + +interface CurrentFileProps { + path: string, + vertical: boolean, + maximized: boolean, + close: () => void, +} + +export function CurrentFile(props: CurrentFileProps) { + const {vertical, maximized, close} = props; + const [pointer, setPointer] = useState(false); + const [pinned, setPinned] = useState(false); + const {styles, theme} = useStyles(stylesheet); + const navigate = useNavigate(); + const screen = useWindowDimensions(); + const parts = resolve(props.path); + const [name, extension] = parts.slice(-1)[0].split('.') ?? []; + const fileUrl = `/browse/${parts.slice(0, -1).join('/')}#${name}.${extension}`; + + const scale = useMemo(() => { + let _scale = 1; + if (!pinned && screen.width <= theme.breakpoints.xs) + _scale = 0.35; + else if (!pinned && screen.width <= theme.breakpoints.sm) + _scale = 0.50; + else if (!pinned && screen.width <= theme.breakpoints.md) + _scale = 0.75; + else if (screen.width <= theme.breakpoints.lg) + _scale = 1; + else if (screen.width <= theme.breakpoints.xl) + _scale = 1.25; + else if (screen.width <= theme.breakpoints.xxl) + _scale = 1.5; + else if (screen.width <= theme.breakpoints.xxxl) + _scale = 2; + else if (screen.width <= theme.breakpoints.xxxxl) + _scale = 4; + return _scale; + }, [screen, theme, pinned]); + + const resolution = useMemo(() => { + switch (extension) { + case 'gb': + case 'gbc': + case 'gba': + return [160 * 2, 144 * 2].map(x => x * scale); + case 'pdf': + return [414, 252].map(x => x * scale); + default: + return [320, 240].map(x => x * scale); + } + }, [extension, scale]); + + return ( + setPointer(true)} + onPointerLeave={() => setPointer(false)} + onPress={() => navigate(fileUrl)}> + {root => <> + + + + {!maximized && pointer && <> + + {close => ( + + )} + + setPinned(!pinned)}> + {pin => ( + + )} + + } + } + + ); +} + +const stylesheet = createStyleSheet((theme, rt) => ({ + root: { + flex: 4, + transition: 'all 0.3s ease-in-out', + }, + vertical: { + flex: 20, + paddingHorizontal: { + initial: 0, + xs: theme.display.space2, + } + }, + maximized: { + maxWidth: '100%', + maxHeight: '100%', + }, + minimized: { + overflow: 'hidden', + position: 'absolute', + paddingTop: 0, + paddingHorizontal: 0, + bottom: theme.display.space5, + right: theme.display.space5, + borderRadius: theme.display.radius2, + borderWidth: rt.hairlineWidth, + borderColor: theme.colors.border, + boxShadow: 'rgba(0, 0, 0, 0.2) 0px 2px 2px 1px', + }, + contents: { + flex: 1, + transition: 'opacity 0.2s', + }, + contentsMinimized: { + pointerEvents: 'none', + opacity: 0.2, + }, + contentsHovered: { + opacity: 1, + }, + contentsPinned: { + opacity: 1, + pointerEvents: 'auto', + }, + pin: { + position: 'absolute', + bottom: 0, + left: 0, + padding: theme.display.space2, + }, + close: { + position: 'absolute', + bottom: 0, + right: 0, + padding: theme.display.space2, + }, +})); diff --git a/client/src/media/stacks/File.tsx b/client/src/media/stacks/File.tsx index 3723be6b..a340ff27 100644 --- a/client/src/media/stacks/File.tsx +++ b/client/src/media/stacks/File.tsx @@ -1,8 +1,4 @@ -import {Icon} from 'react-exo/icon'; -import {useNavigate} from 'react-exo/navigation'; -import {useStyles, createStyleSheet} from 'react-native-unistyles'; -import {useWindowDimensions, View, Pressable} from 'react-native'; -import {useMemo, useState} from 'react'; +import {useMemo} from 'react'; import {resolve} from 'media/utils/path'; import {FileDownload} from './FileDownload'; @@ -12,23 +8,16 @@ import {FileGame} from './FileGame'; import {FilePDF} from './FilePDF'; interface FileProps { - file: string, - vertical: boolean, + path: string, maximized: boolean, close: () => void, } export function File(props: FileProps) { - const {file, vertical, maximized, close} = props; - const [pointer, setPointer] = useState(false); - const [pinned, setPinned] = useState(false); - const {styles, theme} = useStyles(stylesheet); - const screen = useWindowDimensions(); - const navigate = useNavigate(); - const parts = resolve(file); + const {maximized} = props; + const parts = resolve(props.path); const path = parts.join('/'); const [name, extension] = parts.slice(-1)[0].split('.') ?? []; - const fileUrl = `/browse/${parts.slice(0, -1).join('/')}#${name}.${extension}`; const renderer = useMemo(() => { if (!extension) return null; @@ -120,158 +109,5 @@ export function File(props: FileProps) { } }, [extension, name, path, maximized]); - const scale = useMemo(() => { - let _scale = 1; - if (!pinned && screen.width <= theme.breakpoints.xs) - _scale = 0.35; - else if (!pinned && screen.width <= theme.breakpoints.sm) - _scale = 0.50; - else if (!pinned && screen.width <= theme.breakpoints.md) - _scale = 0.75; - else if (screen.width <= theme.breakpoints.lg) - _scale = 1; - else if (screen.width <= theme.breakpoints.xl) - _scale = 1.25; - else if (screen.width <= theme.breakpoints.xxl) - _scale = 1.5; - else if (screen.width <= theme.breakpoints.xxxl) - _scale = 2; - else if (screen.width <= theme.breakpoints.xxxxl) - _scale = 4; - return _scale; - }, [screen, theme, pinned]); - - const resolution = useMemo(() => { - switch (extension) { - case 'gb': - case 'gbc': - case 'gba': - return [160 * 2, 144 * 2].map(x => x * scale); - case 'pdf': - return [414, 252].map(x => x * scale); - default: - return [320, 240].map(x => x * scale); - } - }, [extension, scale]); - - return renderer ? ( - setPointer(true)} - onPointerLeave={() => setPointer(false)} - onPress={() => navigate(fileUrl)}> - {root => <> - - {renderer} - - {!maximized && pointer && <> - - {close => ( - - )} - - setPinned(!pinned)}> - {pin => ( - - )} - - } - } - - ) : null; + return renderer; } - -const stylesheet = createStyleSheet((theme, rt) => ({ - root: { - flex: 4, - transition: 'all 0.3s ease-in-out', - }, - vertical: { - flex: 20, - paddingHorizontal: { - initial: 0, - xs: theme.display.space2, - } - }, - maximized: { - maxWidth: '100%', - maxHeight: '100%', - }, - minimized: { - overflow: 'hidden', - position: 'absolute', - paddingTop: 0, - paddingHorizontal: 0, - bottom: theme.display.space5, - right: theme.display.space5, - borderRadius: theme.display.radius2, - borderWidth: rt.hairlineWidth, - borderColor: theme.colors.border, - boxShadow: 'rgba(0, 0, 0, 0.2) 0px 2px 2px 1px', - }, - contents: { - flex: 1, - transition: 'opacity 0.2s', - }, - contentsMinimized: { - pointerEvents: 'none', - opacity: 0.2, - }, - contentsHovered: { - opacity: 1, - }, - contentsPinned: { - opacity: 1, - pointerEvents: 'auto', - }, - pin: { - position: 'absolute', - bottom: 0, - left: 0, - padding: theme.display.space2, - }, - close: { - position: 'absolute', - bottom: 0, - right: 0, - padding: theme.display.space2, - }, -})); diff --git a/client/src/media/stacks/FileImage.tsx b/client/src/media/stacks/FileImage.tsx index 79db81a2..fb81e8f1 100644 --- a/client/src/media/stacks/FileImage.tsx +++ b/client/src/media/stacks/FileImage.tsx @@ -5,6 +5,7 @@ import {useFileUrl} from 'media/hooks/useFileUrl'; interface FileImage { path: string, name: string, + extension: string, maximized: boolean, } diff --git a/client/src/media/stacks/FileMarkdown.tsx b/client/src/media/stacks/FileMarkdown.tsx index b6a0407b..d69ddf1d 100644 --- a/client/src/media/stacks/FileMarkdown.tsx +++ b/client/src/media/stacks/FileMarkdown.tsx @@ -6,6 +6,7 @@ import {Markdown} from 'app/stacks/Markdown'; interface FileMarkdown { path: string, name: string, + extension: string, maximized: boolean, } diff --git a/client/src/media/store.ts b/client/src/media/store.ts deleted file mode 100644 index 7efa54e2..00000000 --- a/client/src/media/store.ts +++ /dev/null @@ -1,58 +0,0 @@ -import {createSlice, createSelector as $} from 'react-exo/redux'; -import {getPlatforms} from 'app/utils/platform'; - -import type {PayloadAction} from 'react-exo/redux'; - -export type Media = Record - -export default createSlice({ - name: 'media', - initialState: { - 'Launch': { - active: getPlatforms(), - complete: [], - }, - }, - selectors: { - getLists: $((x: Media) => x, (tasks) => - Object.keys(tasks).map((list) => ({ - id: list, - complete: tasks[list]?.active.length === 0 && - tasks[list]?.complete.length > 0, - })) - ), - getActive: (tasks, list: string) => ( - tasks[list]?.active - ), - getComplete: (tasks, list: string) => ( - tasks[list]?.complete - ), - }, - reducers: { - add(tasks, action: PayloadAction<{list: string, item: string}>) { - const {list, item} = action.payload; - const items = tasks[list] || {active: [], complete: []}; - const index = items.complete.indexOf(item); - if (index !== -1) { - items.complete.splice(index, 1); - items.active.push(item); - } else if (!items.active.includes(item)) { - items.active.push(item); - } - tasks[list] = items; - }, - complete(tasks, action: PayloadAction<{list: string, item: string}>) { - const {list, item} = action.payload; - const items = tasks[list] || {active: [], complete: []}; - const index = items.active.indexOf(item); - if (index !== -1) - items.active.splice(index, 1); - if (!items.complete.includes(item)) - items.complete.unshift(item); - tasks[list] = items; - }, - }, -}); diff --git a/client/src/media/utils/path.ts b/client/src/media/utils/path.ts index 68229dc1..bae4106d 100644 --- a/client/src/media/utils/path.ts +++ b/client/src/media/utils/path.ts @@ -1,5 +1,28 @@ +import type {OpenDirectoryOptions} from 'react-exo/fs'; + +export const INIT_DIRECTORIES = [ + 'documents', + 'music', + 'pictures', + 'videos', + 'games', + 'books', + 'downloads', + 'uploads', +] as const; + export function resolve(path: string) { return path .replace(/^\/browse\/?/, '') .split('/'); } + +export function getStartInDir(path: string): OpenDirectoryOptions['startIn'] { + return isInitDirectory(path) + ? (path as OpenDirectoryOptions['startIn']) + : 'desktop'; +} + +export function isInitDirectory(path?: string): path is OpenDirectoryOptions['startIn'] { + return INIT_DIRECTORIES.includes(path as typeof INIT_DIRECTORIES[number]); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 93d4e656..60196046 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -623,8 +623,8 @@ importers: specifier: ^4.3.2 version: 4.3.2(typescript@5.5.4)(vite@5.3.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0)) vocs: - specifier: 1.0.0-alpha.55 - version: 1.0.0-alpha.55(@types/node@20.12.3)(@types/react-dom@18.2.25)(@types/react@18.2.79)(lightningcss@1.25.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.13.0)(terser@5.26.0)(typescript@5.5.4) + specifier: 1.0.0-alpha.50 + version: 1.0.0-alpha.50(@types/node@20.12.3)(@types/react-dom@18.2.25)(@types/react@18.2.79)(lightningcss@1.25.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.13.0)(terser@5.26.0)(typescript@5.5.4) yaml: specifier: latest version: 2.4.2 @@ -645,8 +645,8 @@ importers: specifier: ^5.5.4 version: 5.5.4 vocs: - specifier: 1.0.0-alpha.55 - version: 1.0.0-alpha.55(@types/node@20.12.3)(@types/react-dom@18.2.25)(@types/react@18.3.3)(lightningcss@1.25.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.13.0)(terser@5.26.0)(typescript@5.5.4) + specifier: 1.0.0-alpha.50 + version: 1.0.0-alpha.50(@types/node@20.12.3)(@types/react-dom@18.2.25)(@types/react@18.3.3)(lightningcss@1.25.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.13.0)(terser@5.26.0)(typescript@5.5.4) toolkit/storybook/common: dependencies: @@ -864,8 +864,8 @@ importers: specifier: ^5.5.4 version: 5.5.4 vocs: - specifier: 1.0.0-alpha.55 - version: 1.0.0-alpha.55(@types/node@20.12.3)(@types/react-dom@18.2.25)(@types/react@18.2.79)(lightningcss@1.25.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.13.0)(terser@5.26.0)(typescript@5.5.4) + specifier: 1.0.0-alpha.50 + version: 1.0.0-alpha.50(@types/node@20.12.3)(@types/react-dom@18.2.25)(@types/react@18.2.79)(lightningcss@1.25.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.13.0)(terser@5.26.0)(typescript@5.5.4) yaml: specifier: latest version: 2.4.1 @@ -5322,6 +5322,12 @@ packages: react: ^18.0.0 vidstack: 0.6.15 + '@vitejs/plugin-react@4.2.0': + resolution: {integrity: sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + '@vitejs/plugin-react@4.3.1': resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -8855,10 +8861,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} - p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -10748,9 +10750,6 @@ packages: unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} - unified@11.0.4: - resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} - unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -10993,8 +10992,8 @@ packages: vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} - vocs@1.0.0-alpha.55: - resolution: {integrity: sha512-RT456+7uG4qNz7CwIb7xxhQAt/wJwjUzoi3fNgzfR62v4j/1gTdgn+yqD5vqv7RzJh7j4Iw3R9GF6jriAfiwng==} + vocs@1.0.0-alpha.50: + resolution: {integrity: sha512-rzZw60A8uKmmgouN1ymPz1/0GPK0cxE4ETYJWs5vZTMS3xcTqKarrvU9rcs0niJUfOR0maSs94eWzrgNBLZO1Q==} hasBin: true peerDependencies: react: ^18.2.0 @@ -11249,10 +11248,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.1.1: - resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} - engines: {node: '>=12.20'} - z-schema@5.0.5: resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} engines: {node: '>=8.0.0'} @@ -14024,7 +14019,7 @@ snapshots: remark-parse: 11.0.0 remark-rehype: 11.1.0 source-map: 0.7.4 - unified: 11.0.4 + unified: 11.0.5 unist-util-position-from-estree: 2.0.0 unist-util-stringify-position: 4.0.0 unist-util-visit: 5.0.0 @@ -17359,6 +17354,17 @@ snapshots: react: 18.2.0 vidstack: 0.6.15 + '@vitejs/plugin-react@4.2.0(vite@5.3.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0))': + dependencies: + '@babel/core': 7.24.9 + '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.24.9) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.3.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0) + transitivePeerDependencies: + - supports-color + '@vitejs/plugin-react@4.3.1(vite@5.3.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0))': dependencies: '@babel/core': 7.24.9 @@ -21797,10 +21803,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@5.0.0: - dependencies: - yocto-queue: 1.1.1 - p-locate@3.0.0: dependencies: p-limit: 2.3.0 @@ -23075,7 +23077,7 @@ snapshots: '@ungap/structured-clone': 1.2.0 hast-util-heading-rank: 3.0.0 hast-util-is-element: 3.0.0 - unified: 11.0.4 + unified: 11.0.5 unist-util-visit: 5.0.0 rehype-class-names@1.0.14: @@ -23107,7 +23109,7 @@ snapshots: '@types/mdast': 4.0.3 mdast-util-directive: 3.0.0 micromark-extension-directive: 3.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color @@ -23116,7 +23118,7 @@ snapshots: '@types/mdast': 4.0.3 mdast-util-frontmatter: 2.0.1 micromark-extension-frontmatter: 2.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color @@ -23127,7 +23129,7 @@ snapshots: micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0 remark-stringify: 11.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color @@ -23137,7 +23139,7 @@ snapshots: estree-util-is-identifier-name: 3.0.0 estree-util-value-to-estree: 3.0.1 toml: 3.0.0 - unified: 11.0.4 + unified: 11.0.5 yaml: 2.5.0 remark-mdx@3.0.0: @@ -23152,7 +23154,7 @@ snapshots: '@types/mdast': 4.0.3 mdast-util-from-markdown: 2.0.0 micromark-util-types: 2.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color @@ -23161,14 +23163,14 @@ snapshots: '@types/hast': 3.0.4 '@types/mdast': 4.0.3 mdast-util-to-hast: 13.1.0 - unified: 11.0.4 + unified: 11.0.5 vfile: 6.0.1 remark-stringify@11.0.0: dependencies: '@types/mdast': 4.0.3 mdast-util-to-markdown: 2.1.0 - unified: 11.0.4 + unified: 11.0.5 remove-trailing-slash@0.1.1: {} @@ -24204,16 +24206,6 @@ snapshots: trough: 2.1.0 vfile: 5.3.7 - unified@11.0.4: - dependencies: - '@types/unist': 3.0.2 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.1.0 - vfile: 6.0.1 - unified@11.0.5: dependencies: '@types/unist': 3.0.2 @@ -24493,7 +24485,7 @@ snapshots: vm-browserify@1.1.2: {} - vocs@1.0.0-alpha.55(@types/node@20.12.3)(@types/react-dom@18.2.25)(@types/react@18.2.79)(lightningcss@1.25.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.13.0)(terser@5.26.0)(typescript@5.5.4): + vocs@1.0.0-alpha.50(@types/node@20.12.3)(@types/react-dom@18.2.25)(@types/react@18.2.79)(lightningcss@1.25.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.13.0)(terser@5.26.0)(typescript@5.5.4): dependencies: '@floating-ui/react': 0.26.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@hono/node-server': 1.7.0 @@ -24514,7 +24506,7 @@ snapshots: '@vanilla-extract/css': 1.14.1 '@vanilla-extract/dynamic': 2.1.0 '@vanilla-extract/vite-plugin': 3.9.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0)(vite@5.3.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0)) - '@vitejs/plugin-react': 4.3.1(vite@5.3.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0)) + '@vitejs/plugin-react': 4.2.0(vite@5.3.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0)) autoprefixer: 10.4.17(postcss@8.4.39) cac: 6.7.14 chroma-js: 2.4.2 @@ -24534,7 +24526,6 @@ snapshots: minimatch: 9.0.5 minisearch: 6.3.0 ora: 7.0.1 - p-limit: 5.0.0 postcss: 8.4.39 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -24550,12 +24541,12 @@ snapshots: remark-mdx-frontmatter: 4.0.0 remark-parse: 11.0.0 serve-static: 1.15.0 - shiki: 1.10.3 + shiki: 1.11.1 tailwindcss: 3.4.1 toml: 3.0.0 twoslash: 0.2.9(typescript@5.5.4) ua-parser-js: 1.0.37 - unified: 11.0.4 + unified: 11.0.5 unist-util-visit: 5.0.0 vite: 5.3.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0) transitivePeerDependencies: @@ -24573,7 +24564,7 @@ snapshots: - ts-node - typescript - vocs@1.0.0-alpha.55(@types/node@20.12.3)(@types/react-dom@18.2.25)(@types/react@18.3.3)(lightningcss@1.25.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.13.0)(terser@5.26.0)(typescript@5.5.4): + vocs@1.0.0-alpha.50(@types/node@20.12.3)(@types/react-dom@18.2.25)(@types/react@18.3.3)(lightningcss@1.25.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@4.13.0)(terser@5.26.0)(typescript@5.5.4): dependencies: '@floating-ui/react': 0.26.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@hono/node-server': 1.7.0 @@ -24594,7 +24585,7 @@ snapshots: '@vanilla-extract/css': 1.14.1 '@vanilla-extract/dynamic': 2.1.0 '@vanilla-extract/vite-plugin': 3.9.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0)(vite@5.3.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0)) - '@vitejs/plugin-react': 4.3.1(vite@5.3.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0)) + '@vitejs/plugin-react': 4.2.0(vite@5.3.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0)) autoprefixer: 10.4.17(postcss@8.4.39) cac: 6.7.14 chroma-js: 2.4.2 @@ -24614,7 +24605,6 @@ snapshots: minimatch: 9.0.5 minisearch: 6.3.0 ora: 7.0.1 - p-limit: 5.0.0 postcss: 8.4.39 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -24630,12 +24620,12 @@ snapshots: remark-mdx-frontmatter: 4.0.0 remark-parse: 11.0.0 serve-static: 1.15.0 - shiki: 1.10.3 + shiki: 1.11.1 tailwindcss: 3.4.1 toml: 3.0.0 twoslash: 0.2.9(typescript@5.5.4) ua-parser-js: 1.0.37 - unified: 11.0.4 + unified: 11.0.5 unist-util-visit: 5.0.0 vite: 5.3.5(@types/node@20.12.3)(lightningcss@1.25.1)(terser@5.26.0) transitivePeerDependencies: @@ -24879,8 +24869,6 @@ snapshots: yocto-queue@0.1.0: {} - yocto-queue@1.1.1: {} - z-schema@5.0.5: dependencies: lodash.get: 4.4.2 diff --git a/toolkit/bundler/package.json b/toolkit/bundler/package.json index cdc5f35f..7126e2a7 100644 --- a/toolkit/bundler/package.json +++ b/toolkit/bundler/package.json @@ -32,7 +32,7 @@ "vite-plugin-dts": "^3.9.1", "vite-plugin-node-polyfills": "^0.22.0", "vite-tsconfig-paths": "^4.3.2", - "vocs": "1.0.0-alpha.55", + "vocs": "1.0.0-alpha.50", "yaml": "latest" } } diff --git a/toolkit/bundler/src/web/client.ts b/toolkit/bundler/src/web/client.ts index b6bcd33a..51ca8da0 100644 --- a/toolkit/bundler/src/web/client.ts +++ b/toolkit/bundler/src/web/client.ts @@ -26,7 +26,7 @@ export default defineConfig(env => mergeConfig( format: 'es', chunkFileNames: '[name]-[hash].js', } - } + }, }, preview: { open: false, diff --git a/toolkit/bundler/src/web/docs.ts b/toolkit/bundler/src/web/docs.ts index 552dff92..cacbcebd 100644 --- a/toolkit/bundler/src/web/docs.ts +++ b/toolkit/bundler/src/web/docs.ts @@ -1,7 +1,41 @@ import {defineConfig, mergeConfig} from 'vite'; import webConfig from '../vite.web.js'; +import react from '@vitejs/plugin-react'; export default defineConfig(env => mergeConfig( webConfig(env), - defineConfig({}), + defineConfig({ + build: { + outDir: '../output/docs', + emptyOutDir: true, + chunkSizeWarningLimit: 1000, + target: [ + 'esnext', + 'safari15', + 'chrome128', + 'firefox128', + 'edge128', + ], + }, + plugins: [ + react({ + babel: { + plugins: ['macros'], + }, + }), + ], + resolve: { + alias: { + 'react-native': 'react-native-web', + }, + }, + optimizeDeps: { + include: [ + 'react-native-ultimate-config/index.web.js', + 'react-native-unistyles', + 'react-native-web', + 'design', + ], + }, + }), )); diff --git a/toolkit/config/package.json b/toolkit/config/package.json index 630138ba..ed450ad7 100644 --- a/toolkit/config/package.json +++ b/toolkit/config/package.json @@ -28,7 +28,7 @@ "devDependencies": { "@lingui/conf": "^4.11.2", "gray-matter": "^4.0.3", - "vocs": "1.0.0-alpha.55", + "vocs": "1.0.0-alpha.50", "typescript": "^5.5.4" } } diff --git a/toolkit/vocs/layout.tsx b/toolkit/vocs/layout.tsx index f218f669..a08f44db 100644 --- a/toolkit/vocs/layout.tsx +++ b/toolkit/vocs/layout.tsx @@ -1,14 +1,24 @@ -import {Suspense, lazy} from 'react'; +import {useEffect} from 'react'; +import {UnistylesRuntime} from 'design/gen.styles'; export default function Layout(props: React.PropsWithChildren) { - const ThemeSwitcher = lazy(() => import('utils/theme') - .then((module) => ({default: module.ThemeSwitcher}))); - return ( - <> - - - - {props.children} - - ) + useEffect(() => { + const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); + const pickerButton = document.querySelector('button:has(.vocs_utils_visibleDark)'); + const updateTheme = () => { + requestAnimationFrame(() => { + const isDark = document.documentElement.classList.contains('dark'); + UnistylesRuntime.setTheme(isDark ? 'dark' : 'light'); + }) + }; + updateTheme(); + mediaQuery.addEventListener('change', updateTheme); + pickerButton?.addEventListener('click', updateTheme); + return () => { + mediaQuery.removeEventListener('change', updateTheme); + pickerButton?.removeEventListener('click', updateTheme); + } + }, []); + + return props.children; } diff --git a/toolkit/vocs/package.json b/toolkit/vocs/package.json index c9854007..d9d07cdc 100644 --- a/toolkit/vocs/package.json +++ b/toolkit/vocs/package.json @@ -5,7 +5,7 @@ "private": true, "scripts": { "start": "tsx utils/setup && vocs dev -p 6106", - "build": "tsx utils/setup && vocs build -c -o ../../output/docs", + "build": "vocs build -c -o ../../output/docs", "preview": "tsx utils/setup && vocs preview" }, "dependencies": { @@ -34,7 +34,7 @@ "fs-extra": "latest", "tsx": "latest", "typescript": "^5.5.4", - "vocs": "1.0.0-alpha.55", + "vocs": "1.0.0-alpha.50", "yaml": "latest" } } diff --git a/toolkit/vocs/utils/theme.tsx b/toolkit/vocs/utils/theme.tsx deleted file mode 100644 index 98c19a08..00000000 --- a/toolkit/vocs/utils/theme.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import {useEffect} from 'react'; -import {UnistylesRuntime} from 'design/gen.styles'; - -export function ThemeSwitcher(): React.ReactNode { - useEffect(() => { - const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); - const pickerButton = document.querySelector('button:has(.vocs_utils_visibleDark)'); - const updateTheme = () => { - requestAnimationFrame(() => { - const isDark = document.documentElement.classList.contains('dark'); - UnistylesRuntime.setTheme(isDark ? 'dark' : 'light'); - }) - }; - updateTheme(); - mediaQuery.addEventListener('change', updateTheme); - pickerButton?.addEventListener('click', updateTheme); - return () => { - mediaQuery.removeEventListener('change', updateTheme); - pickerButton?.removeEventListener('click', updateTheme); - } - }, []); - return null; -} diff --git a/toolkit/vocs/vocs.config.ts b/toolkit/vocs/vocs.config.ts index dd2e81ab..64571ecb 100644 --- a/toolkit/vocs/vocs.config.ts +++ b/toolkit/vocs/vocs.config.ts @@ -72,9 +72,18 @@ export default defineConfig({ }), twoslash: { compilerOptions: { + skipLibCheck: true, moduleResolution: 100, } }, + markdown: { + code: { + themes: { + light: 'github-light', + dark: 'one-dark-pro', + } + } + }, ogImageUrl: 'https://vocs.dev/api/og?logo=%logo&title=%title&description=%description', rootDir: './', sidebar, diff --git a/translations/ar.po b/translations/ar.po index 38320f4c..f41eacf1 100644 --- a/translations/ar.po +++ b/translations/ar.po @@ -13,112 +13,112 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: ../../client/src/dev/router/ScreenLibrary.tsx:16 +#: ../../client/src/dev/routes/ScreenDesign.tsx:12 +#: ../../client/src/dev/routes/ScreenLibrary.tsx:16 msgid "{0} components" msgstr "{0} مكونات" -#: ../../client/src/app/router/ScreenSettings.tsx:52 +#: ../../client/src/app/routes/ScreenSettings.tsx:52 msgid "A mnemonic phrase for authentication." msgstr "عبارة تذكيرية للمصادقة." -#: ../../client/src/app/router/ScreenSettings.tsx:134 +#: ../../client/src/app/routes/ScreenSettings.tsx:134 msgid "AI" msgstr "الذكاء الاصطناعي" -#: ../../client/src/app/router/ScreenSettings.tsx:175 +#: ../../client/src/app/routes/ScreenSettings.tsx:175 msgid "All Data" msgstr "جميع البيانات" -#: ../../client/src/settings/hooks/useSettings.ts:57 +#: ../../client/src/app/hooks/useSettings.ts:57 msgid "Are you sure you want to change the owner key? This will reset the local database. This action cannot be undone." msgstr "هل أنت متأكد أنك تريد تغيير مفتاح المالك؟ سيؤدي هذا إلى إعادة تعيين قاعدة البيانات المحلية. لا يمكن التراجع عن هذا الإجراء." -#: ../../client/src/settings/hooks/useSettings.ts:51 +#: ../../client/src/app/hooks/useSettings.ts:51 msgid "Are you sure you want to reset your local database? If data is not backed up on another device, it will be lost. This action cannot be undone." msgstr "هل أنت متأكد أنك تريد إعادة تعيين قاعدة البيانات المحلية الخاصة بك؟ إذا لم يتم نسخ البيانات احتياطيًا على جهاز آخر، فستفقد. لا يمكن التراجع عن هذا الإجراء." -#: ../../client/src/settings/hooks/useSettings.ts:42 +#: ../../client/src/app/hooks/useSettings.ts:42 msgid "Are you sure you want to reset your prompt history?" msgstr "هل أنت متأكد أنك تريد إعادة تعيين سجل الأوامر الخاص بك؟" -#: ../../client/src/home/interface/AiPrompt.tsx:50 +#: ../../client/src/home/stacks/AiPrompt.tsx:50 msgid "Ask anything..." msgstr "اسأل أي شيء..." -#: ../../client/src/app/router/ScreenSettings.tsx:82 -#: ../../client/src/app/router/ScreenSettings.tsx:102 +#: ../../client/src/app/routes/ScreenSettings.tsx:82 +#: ../../client/src/app/routes/ScreenSettings.tsx:102 msgid "Auto" msgstr "تلقائي" -#: ../../client/src/app/interface/NavMenu.tsx:76 +#: ../../client/src/app/interface/Menu.tsx:75 msgid "Books" msgstr "كتب" +#: ../../client/src/app/interface/Menu.tsx:92 #: ../../client/src/world/routes/ScreenWorld.tsx:30 msgid "Calendar" msgstr "" -#: ../../client/src/app/router/ScreenSettings.tsx:116 +#: ../../client/src/app/routes/ScreenSettings.tsx:116 msgid "Celsius" msgstr "سيلزيوس" -#: ../../client/src/app/router/ScreenSettings.tsx:104 +#: ../../client/src/app/routes/ScreenSettings.tsx:104 msgid "Dark" msgstr "داكن" -#: ../../client/src/app/interface/NavMenu.tsx:29 +#: ../../client/src/app/interface/Menu.tsx:28 +#: ../../client/src/app/interface/Tabs.tsx:13 msgid "Dashboard" msgstr "لوحة التحكم" -#: ../../client/src/app/router/ScreenSettings.tsx:163 +#: ../../client/src/app/routes/ScreenSettings.tsx:163 msgid "Data" msgstr "البيانات" -#: ../../client/src/app/router/ScreenSettings.tsx:166 +#: ../../client/src/app/routes/ScreenSettings.tsx:166 msgid "Delete all prompt data." msgstr "حذف جميع بيانات الأوامر." -#: ../../client/src/app/router/ScreenSettings.tsx:178 +#: ../../client/src/app/routes/ScreenSettings.tsx:178 msgid "Delete Database" msgstr "حذف قاعدة البيانات" -#: ../../client/src/app/router/ScreenSettings.tsx:168 +#: ../../client/src/app/routes/ScreenSettings.tsx:168 msgid "Delete Prompts" msgstr "حذف الأوامر" -#: ../../client/src/app/router/ScreenSettings.tsx:176 +#: ../../client/src/app/routes/ScreenSettings.tsx:176 msgid "Delete the local database." msgstr "حذف قاعدة البيانات المحلية." -#: ../../client/src/app/interface/NavMenu.tsx:113 +#: ../../client/src/app/interface/Menu.tsx:112 +#: ../../client/src/dev/routes/ScreenDesign.tsx:11 msgid "Design" msgstr "التصميم" -#: ../../client/src/app/interface/NavMenu.tsx:111 +#: ../../client/src/app/interface/Menu.tsx:110 msgid "Dev Mode" msgstr "" -#: ../../client/src/media/routes/ScreenBrowse.tsx:19 -msgid "Device" -msgstr "" - -#: ../../client/src/media/base/WatermarkEmpty.tsx:15 +#: ../../client/src/media/stacks/WatermarkEmpty.tsx:15 msgid "Directory is empty." msgstr "" -#: ../../client/src/app/router/ScreenSettings.tsx:72 +#: ../../client/src/app/routes/ScreenSettings.tsx:72 msgid "Display" msgstr "العرض" -#: ../../client/src/app/router/ScreenSettings.tsx:121 +#: ../../client/src/app/routes/ScreenSettings.tsx:121 msgid "Distance" msgstr "المسافة" -#: ../../client/src/app/interface/NavMenu.tsx:51 +#: ../../client/src/app/interface/Menu.tsx:50 msgid "Docs" msgstr "المستندات" -#: ../../client/src/media/base/FileDownload.tsx:17 +#: ../../client/src/media/stacks/FileDownload.tsx:17 msgid "Download" msgstr "" @@ -130,31 +130,29 @@ msgstr "استمتع باليوم" msgid "Enjoy the night" msgstr "استمتع بالليل" -#: ../../client/src/app/router/ScreenSettings.tsx:141 +#: ../../client/src/app/routes/ScreenSettings.tsx:141 msgid "Enter api key" msgstr "أدخل مفتاح API" -#: ../../client/src/app/router/ScreenSettings.tsx:58 +#: ../../client/src/app/routes/ScreenSettings.tsx:58 msgid "Enter your mnemonic phrase" msgstr "أدخل عبارتك التذكيرية" -#: ../../client/src/app/router/ScreenSettings.tsx:46 +#: ../../client/src/app/routes/ScreenSettings.tsx:46 msgid "Enter your name" msgstr "أدخل اسمك" -#: ../../client/src/app/router/ScreenSettings.tsx:117 +#: ../../client/src/app/routes/ScreenSettings.tsx:117 msgid "Fahrenheit" msgstr "فهرنهايت" -#: ../../client/src/app/interface/NavMenu.tsx:98 -msgid "Favorites" -msgstr "المفضلة" - +#: ../../client/src/app/interface/Menu.tsx:45 +#: ../../client/src/app/interface/Tabs.tsx:23 #: ../../client/src/media/routes/ScreenBrowse.tsx:19 msgid "Files" msgstr "الملفات" -#: ../../client/src/app/interface/NavMenu.tsx:71 +#: ../../client/src/app/interface/Menu.tsx:70 msgid "Games" msgstr "الألعاب" @@ -174,7 +172,7 @@ msgstr "مساء الخير" msgid "Good morning" msgstr "صباح الخير" -#: ../../client/src/app/router/ScreenSettings.tsx:136 +#: ../../client/src/app/routes/ScreenSettings.tsx:136 msgid "Groq API Key" msgstr "مفتاح Groq API" @@ -182,35 +180,37 @@ msgstr "مفتاح Groq API" msgid "Groq Failure" msgstr "فشل Groq" -#: ../../client/src/app/router/ScreenSettings.tsx:148 +#: ../../client/src/app/routes/ScreenSettings.tsx:148 msgid "Groq Model ID" msgstr "معرف نموذج Groq" -#: ../../client/src/app/interface/NavMenuHeader.tsx:27 +#: ../../client/src/app/interface/MenuHeader.tsx:27 msgid "Human" msgstr "الإنسان" -#: ../../client/src/media/base/WatermarkEmpty.tsx:16 +#: ../../client/src/media/stacks/WatermarkEmpty.tsx:16 msgid "Import" msgstr "" -#: ../../client/src/app/interface/NavMenu.tsx:34 +#: ../../client/src/app/interface/Menu.tsx:33 +#: ../../client/src/app/interface/Tabs.tsx:18 msgid "Inbox" msgstr "صندوق الوارد" -#: ../../client/src/app/router/ScreenSettings.tsx:129 +#: ../../client/src/app/routes/ScreenSettings.tsx:129 msgid "Kilometers" msgstr "كيلومترات" -#: ../../client/src/app/router/ScreenSettings.tsx:74 +#: ../../client/src/app/routes/ScreenSettings.tsx:74 msgid "Language" msgstr "اللغة" -#: ../../client/src/app/interface/NavMenu.tsx:118 +#: ../../client/src/app/interface/Menu.tsx:117 +#: ../../client/src/dev/routes/ScreenLibrary.tsx:15 msgid "Library" msgstr "المكتبة" -#: ../../client/src/app/router/ScreenSettings.tsx:103 +#: ../../client/src/app/routes/ScreenSettings.tsx:103 msgid "Light" msgstr "فاتح" @@ -218,111 +218,115 @@ msgstr "فاتح" msgid "Loading..." msgstr "جاري التحميل..." -#: ../../client/src/app/router/ScreenSettings.tsx:28 +#: ../../client/src/app/routes/ScreenSettings.tsx:28 msgid "Manage your settings" msgstr "إدارة إعداداتك" -#: ../../client/src/app/router/ScreenStorage.tsx:15 +#: ../../client/src/app/routes/ScreenStorage.tsx:15 msgid "Manage your storage" msgstr "" +#: ../../client/src/app/interface/Menu.tsx:82 #: ../../client/src/world/routes/ScreenWorld.tsx:18 msgid "Map" msgstr "" -#: ../../client/src/app/interface/NavMenu.tsx:39 +#: ../../client/src/app/interface/Menu.tsx:38 msgid "Media" msgstr "الوسائط" -#: ../../client/src/app/router/ScreenSettings.tsx:130 +#: ../../client/src/app/routes/ScreenSettings.tsx:130 msgid "Miles" msgstr "أميال" -#: ../../client/src/app/interface/NavMenu.tsx:66 +#: ../../client/src/app/interface/Menu.tsx:65 msgid "Movies" msgstr "" -#: ../../client/src/app/interface/NavMenu.tsx:56 +#: ../../client/src/app/interface/Menu.tsx:55 msgid "Music" msgstr "الموسيقى" +#: ../../client/src/app/interface/Menu.tsx:87 #: ../../client/src/world/routes/ScreenWorld.tsx:24 msgid "News" msgstr "" -#: ../../client/src/world/router/ScreenCalendar.tsx:37 +#: ../../client/src/world/routes/ScreenCalendar.tsx:37 msgid "No events scheduled." msgstr "لا توجد أحداث مجدولة." -#: ../../client/src/app/router/ScreenStorage.tsx:17 +#: ../../client/src/app/routes/ScreenStorage.tsx:17 msgid "Overview" msgstr "" -#: ../../client/src/app/router/ScreenSettings.tsx:51 +#: ../../client/src/app/routes/ScreenSettings.tsx:51 msgid "Owner Key" msgstr "مفتاح المالك" -#: ../../client/src/app/interface/NavMenu.tsx:61 +#: ../../client/src/app/interface/Menu.tsx:60 msgid "Pictures" msgstr "" -#: ../../client/src/home/interface/AiPrompt.tsx:50 +#: ../../client/src/home/stacks/AiPrompt.tsx:50 msgid "Please set your Groq API Key" msgstr "يرجى تعيين مفتاح Groq API الخاص بك" -#: ../../client/src/app/router/ScreenSettings.tsx:37 +#: ../../client/src/app/routes/ScreenSettings.tsx:37 msgid "Profile" msgstr "الملف الشخصي" -#: ../../client/src/settings/hooks/useSettings.ts:44 +#: ../../client/src/app/hooks/useSettings.ts:44 msgid "Prompt History Reset" msgstr "إعادة تعيين سجل الأوامر" -#: ../../client/src/app/router/ScreenSettings.tsx:165 +#: ../../client/src/app/routes/ScreenSettings.tsx:165 msgid "Prompts" msgstr "الأوامر" -#: ../../client/src/app/router/ScreenSettings.tsx:137 +#: ../../client/src/app/routes/ScreenSettings.tsx:137 msgid "Provide a key to use AI features." msgstr "قدم مفتاحًا لاستخدام ميزات الذكاء الاصطناعي." -#: ../../client/src/app/router/ScreenSettings.tsx:149 +#: ../../client/src/app/routes/ScreenSettings.tsx:149 msgid "Select the AI model to use." msgstr "اختر نموذج الذكاء الاصطناعي للاستخدام." -#: ../../client/src/app/router/ScreenSettings.tsx:122 +#: ../../client/src/app/routes/ScreenSettings.tsx:122 msgid "Select the distance unit for the app." msgstr "اختر وحدة المسافة للتطبيق." -#: ../../client/src/app/router/ScreenSettings.tsx:75 +#: ../../client/src/app/routes/ScreenSettings.tsx:75 msgid "Select the language for the app." msgstr "اختر لغة التطبيق." -#: ../../client/src/app/router/ScreenSettings.tsx:109 +#: ../../client/src/app/routes/ScreenSettings.tsx:109 msgid "Select the temperature unit for the app." msgstr "اختر وحدة درجة الحرارة للتطبيق." -#: ../../client/src/app/router/ScreenSettings.tsx:95 +#: ../../client/src/app/routes/ScreenSettings.tsx:95 msgid "Select the theme for the app." msgstr "اختر سمة التطبيق." -#: ../../client/src/app/router/ScreenSettings.tsx:27 +#: ../../client/src/app/interface/Tabs.tsx:33 +#: ../../client/src/app/routes/ScreenSettings.tsx:27 msgid "Settings" msgstr "الإعدادات" -#: ../../client/src/app/interface/NavMenu.tsx:128 +#: ../../client/src/app/interface/Menu.tsx:127 +#: ../../client/src/app/routes/ScreenStorage.tsx:14 msgid "Storage" msgstr "" -#: ../../client/src/app/router/ScreenSettings.tsx:108 +#: ../../client/src/app/routes/ScreenSettings.tsx:108 msgid "Temperature" msgstr "درجة الحرارة" -#: ../../client/src/app/router/ScreenSettings.tsx:94 +#: ../../client/src/app/routes/ScreenSettings.tsx:94 msgid "Theme" msgstr "السمة" -#: ../../client/src/app/router/ScreenSettings.tsx:39 +#: ../../client/src/app/routes/ScreenSettings.tsx:39 msgid "User Name" msgstr "اسم المستخدم" @@ -338,19 +342,20 @@ msgstr "" msgid "View your latest news and rss feeds" msgstr "" -#: ../../client/src/home/router/ScreenHome.tsx:22 +#: ../../client/src/home/routes/ScreenHome.tsx:22 msgid "Welcome, {0}" msgstr "مرحبًا، {0}" -#: ../../client/src/home/router/ScreenHome.tsx:23 +#: ../../client/src/home/routes/ScreenHome.tsx:23 msgid "Welcome, Human" msgstr "مرحبًا، أيها الإنسان" -#: ../../client/src/app/router/ScreenTeaser.tsx:14 +#: ../../client/src/app/routes/ScreenTeaser.tsx:14 msgid "Work in progress..." msgstr "جاري العمل..." -#: ../../client/src/app/interface/NavMenu.tsx:81 +#: ../../client/src/app/interface/Menu.tsx:80 +#: ../../client/src/app/interface/Tabs.tsx:28 msgid "World" msgstr "العالم" @@ -362,10 +367,10 @@ msgstr "أنت غير متصل بالإنترنت" msgid "You are online" msgstr "أنت متصل بالإنترنت" -#: ../../client/src/app/router/ScreenSettings.tsx:40 +#: ../../client/src/app/routes/ScreenSettings.tsx:40 msgid "Your name to display in the app." msgstr "اسمك لعرضه في التطبيق." -#: ../../client/src/settings/hooks/useSettings.ts:45 +#: ../../client/src/app/hooks/useSettings.ts:45 msgid "Your prompt history has been reset." msgstr "تم إعادة تعيين سجل الأوامر الخاص بك." diff --git a/translations/en.po b/translations/en.po index edce140d..afe06a11 100644 --- a/translations/en.po +++ b/translations/en.po @@ -13,112 +13,112 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: ../../client/src/dev/router/ScreenLibrary.tsx:16 +#: ../../client/src/dev/routes/ScreenDesign.tsx:12 +#: ../../client/src/dev/routes/ScreenLibrary.tsx:16 msgid "{0} components" msgstr "{0} components" -#: ../../client/src/app/router/ScreenSettings.tsx:52 +#: ../../client/src/app/routes/ScreenSettings.tsx:52 msgid "A mnemonic phrase for authentication." msgstr "A mnemonic phrase for authentication." -#: ../../client/src/app/router/ScreenSettings.tsx:134 +#: ../../client/src/app/routes/ScreenSettings.tsx:134 msgid "AI" msgstr "AI" -#: ../../client/src/app/router/ScreenSettings.tsx:175 +#: ../../client/src/app/routes/ScreenSettings.tsx:175 msgid "All Data" msgstr "All Data" -#: ../../client/src/settings/hooks/useSettings.ts:57 +#: ../../client/src/app/hooks/useSettings.ts:57 msgid "Are you sure you want to change the owner key? This will reset the local database. This action cannot be undone." msgstr "Are you sure you want to change the owner key? This will reset the local database. This action cannot be undone." -#: ../../client/src/settings/hooks/useSettings.ts:51 +#: ../../client/src/app/hooks/useSettings.ts:51 msgid "Are you sure you want to reset your local database? If data is not backed up on another device, it will be lost. This action cannot be undone." msgstr "Are you sure you want to reset your local database? If data is not backed up on another device, it will be lost. This action cannot be undone." -#: ../../client/src/settings/hooks/useSettings.ts:42 +#: ../../client/src/app/hooks/useSettings.ts:42 msgid "Are you sure you want to reset your prompt history?" msgstr "Are you sure you want to reset your prompt history?" -#: ../../client/src/home/interface/AiPrompt.tsx:50 +#: ../../client/src/home/stacks/AiPrompt.tsx:50 msgid "Ask anything..." msgstr "Ask anything..." -#: ../../client/src/app/router/ScreenSettings.tsx:82 -#: ../../client/src/app/router/ScreenSettings.tsx:102 +#: ../../client/src/app/routes/ScreenSettings.tsx:82 +#: ../../client/src/app/routes/ScreenSettings.tsx:102 msgid "Auto" msgstr "Auto" -#: ../../client/src/app/interface/NavMenu.tsx:76 +#: ../../client/src/app/interface/Menu.tsx:75 msgid "Books" msgstr "Books" +#: ../../client/src/app/interface/Menu.tsx:92 #: ../../client/src/world/routes/ScreenWorld.tsx:30 msgid "Calendar" msgstr "Calendar" -#: ../../client/src/app/router/ScreenSettings.tsx:116 +#: ../../client/src/app/routes/ScreenSettings.tsx:116 msgid "Celsius" msgstr "Celsius" -#: ../../client/src/app/router/ScreenSettings.tsx:104 +#: ../../client/src/app/routes/ScreenSettings.tsx:104 msgid "Dark" msgstr "Dark" -#: ../../client/src/app/interface/NavMenu.tsx:29 +#: ../../client/src/app/interface/Menu.tsx:28 +#: ../../client/src/app/interface/Tabs.tsx:13 msgid "Dashboard" msgstr "Dashboard" -#: ../../client/src/app/router/ScreenSettings.tsx:163 +#: ../../client/src/app/routes/ScreenSettings.tsx:163 msgid "Data" msgstr "Data" -#: ../../client/src/app/router/ScreenSettings.tsx:166 +#: ../../client/src/app/routes/ScreenSettings.tsx:166 msgid "Delete all prompt data." msgstr "Delete all prompt data." -#: ../../client/src/app/router/ScreenSettings.tsx:178 +#: ../../client/src/app/routes/ScreenSettings.tsx:178 msgid "Delete Database" msgstr "Delete Database" -#: ../../client/src/app/router/ScreenSettings.tsx:168 +#: ../../client/src/app/routes/ScreenSettings.tsx:168 msgid "Delete Prompts" msgstr "Delete Prompts" -#: ../../client/src/app/router/ScreenSettings.tsx:176 +#: ../../client/src/app/routes/ScreenSettings.tsx:176 msgid "Delete the local database." msgstr "Delete the local database." -#: ../../client/src/app/interface/NavMenu.tsx:113 +#: ../../client/src/app/interface/Menu.tsx:112 +#: ../../client/src/dev/routes/ScreenDesign.tsx:11 msgid "Design" msgstr "Design" -#: ../../client/src/app/interface/NavMenu.tsx:111 +#: ../../client/src/app/interface/Menu.tsx:110 msgid "Dev Mode" msgstr "Dev Mode" -#: ../../client/src/media/routes/ScreenBrowse.tsx:19 -msgid "Device" -msgstr "Device" - -#: ../../client/src/media/base/WatermarkEmpty.tsx:15 +#: ../../client/src/media/stacks/WatermarkEmpty.tsx:15 msgid "Directory is empty." msgstr "Directory is empty." -#: ../../client/src/app/router/ScreenSettings.tsx:72 +#: ../../client/src/app/routes/ScreenSettings.tsx:72 msgid "Display" msgstr "Display" -#: ../../client/src/app/router/ScreenSettings.tsx:121 +#: ../../client/src/app/routes/ScreenSettings.tsx:121 msgid "Distance" msgstr "Distance" -#: ../../client/src/app/interface/NavMenu.tsx:51 +#: ../../client/src/app/interface/Menu.tsx:50 msgid "Docs" msgstr "Docs" -#: ../../client/src/media/base/FileDownload.tsx:17 +#: ../../client/src/media/stacks/FileDownload.tsx:17 msgid "Download" msgstr "Download" @@ -130,31 +130,29 @@ msgstr "Enjoy the day" msgid "Enjoy the night" msgstr "Enjoy the night" -#: ../../client/src/app/router/ScreenSettings.tsx:141 +#: ../../client/src/app/routes/ScreenSettings.tsx:141 msgid "Enter api key" msgstr "Enter api key" -#: ../../client/src/app/router/ScreenSettings.tsx:58 +#: ../../client/src/app/routes/ScreenSettings.tsx:58 msgid "Enter your mnemonic phrase" msgstr "Enter your mnemonic phrase" -#: ../../client/src/app/router/ScreenSettings.tsx:46 +#: ../../client/src/app/routes/ScreenSettings.tsx:46 msgid "Enter your name" msgstr "Enter your name" -#: ../../client/src/app/router/ScreenSettings.tsx:117 +#: ../../client/src/app/routes/ScreenSettings.tsx:117 msgid "Fahrenheit" msgstr "Fahrenheit" -#: ../../client/src/app/interface/NavMenu.tsx:98 -msgid "Favorites" -msgstr "Favorites" - +#: ../../client/src/app/interface/Menu.tsx:45 +#: ../../client/src/app/interface/Tabs.tsx:23 #: ../../client/src/media/routes/ScreenBrowse.tsx:19 msgid "Files" msgstr "Files" -#: ../../client/src/app/interface/NavMenu.tsx:71 +#: ../../client/src/app/interface/Menu.tsx:70 msgid "Games" msgstr "Games" @@ -174,7 +172,7 @@ msgstr "Good evening" msgid "Good morning" msgstr "Good morning" -#: ../../client/src/app/router/ScreenSettings.tsx:136 +#: ../../client/src/app/routes/ScreenSettings.tsx:136 msgid "Groq API Key" msgstr "Groq API Key" @@ -182,35 +180,37 @@ msgstr "Groq API Key" msgid "Groq Failure" msgstr "Groq Failure" -#: ../../client/src/app/router/ScreenSettings.tsx:148 +#: ../../client/src/app/routes/ScreenSettings.tsx:148 msgid "Groq Model ID" msgstr "Groq Model ID" -#: ../../client/src/app/interface/NavMenuHeader.tsx:27 +#: ../../client/src/app/interface/MenuHeader.tsx:27 msgid "Human" msgstr "Human" -#: ../../client/src/media/base/WatermarkEmpty.tsx:16 +#: ../../client/src/media/stacks/WatermarkEmpty.tsx:16 msgid "Import" msgstr "Import" -#: ../../client/src/app/interface/NavMenu.tsx:34 +#: ../../client/src/app/interface/Menu.tsx:33 +#: ../../client/src/app/interface/Tabs.tsx:18 msgid "Inbox" msgstr "Inbox" -#: ../../client/src/app/router/ScreenSettings.tsx:129 +#: ../../client/src/app/routes/ScreenSettings.tsx:129 msgid "Kilometers" msgstr "Kilometers" -#: ../../client/src/app/router/ScreenSettings.tsx:74 +#: ../../client/src/app/routes/ScreenSettings.tsx:74 msgid "Language" msgstr "Language" -#: ../../client/src/app/interface/NavMenu.tsx:118 +#: ../../client/src/app/interface/Menu.tsx:117 +#: ../../client/src/dev/routes/ScreenLibrary.tsx:15 msgid "Library" msgstr "Library" -#: ../../client/src/app/router/ScreenSettings.tsx:103 +#: ../../client/src/app/routes/ScreenSettings.tsx:103 msgid "Light" msgstr "Light" @@ -218,111 +218,115 @@ msgstr "Light" msgid "Loading..." msgstr "Loading..." -#: ../../client/src/app/router/ScreenSettings.tsx:28 +#: ../../client/src/app/routes/ScreenSettings.tsx:28 msgid "Manage your settings" msgstr "Manage your settings" -#: ../../client/src/app/router/ScreenStorage.tsx:15 +#: ../../client/src/app/routes/ScreenStorage.tsx:15 msgid "Manage your storage" msgstr "Manage your storage" +#: ../../client/src/app/interface/Menu.tsx:82 #: ../../client/src/world/routes/ScreenWorld.tsx:18 msgid "Map" msgstr "Map" -#: ../../client/src/app/interface/NavMenu.tsx:39 +#: ../../client/src/app/interface/Menu.tsx:38 msgid "Media" msgstr "Media" -#: ../../client/src/app/router/ScreenSettings.tsx:130 +#: ../../client/src/app/routes/ScreenSettings.tsx:130 msgid "Miles" msgstr "Miles" -#: ../../client/src/app/interface/NavMenu.tsx:66 +#: ../../client/src/app/interface/Menu.tsx:65 msgid "Movies" msgstr "Movies" -#: ../../client/src/app/interface/NavMenu.tsx:56 +#: ../../client/src/app/interface/Menu.tsx:55 msgid "Music" msgstr "Music" +#: ../../client/src/app/interface/Menu.tsx:87 #: ../../client/src/world/routes/ScreenWorld.tsx:24 msgid "News" msgstr "News" -#: ../../client/src/world/router/ScreenCalendar.tsx:37 +#: ../../client/src/world/routes/ScreenCalendar.tsx:37 msgid "No events scheduled." msgstr "No events scheduled." -#: ../../client/src/app/router/ScreenStorage.tsx:17 +#: ../../client/src/app/routes/ScreenStorage.tsx:17 msgid "Overview" msgstr "Overview" -#: ../../client/src/app/router/ScreenSettings.tsx:51 +#: ../../client/src/app/routes/ScreenSettings.tsx:51 msgid "Owner Key" msgstr "Owner Key" -#: ../../client/src/app/interface/NavMenu.tsx:61 +#: ../../client/src/app/interface/Menu.tsx:60 msgid "Pictures" msgstr "Pictures" -#: ../../client/src/home/interface/AiPrompt.tsx:50 +#: ../../client/src/home/stacks/AiPrompt.tsx:50 msgid "Please set your Groq API Key" msgstr "Please set your Groq API Key" -#: ../../client/src/app/router/ScreenSettings.tsx:37 +#: ../../client/src/app/routes/ScreenSettings.tsx:37 msgid "Profile" msgstr "Profile" -#: ../../client/src/settings/hooks/useSettings.ts:44 +#: ../../client/src/app/hooks/useSettings.ts:44 msgid "Prompt History Reset" msgstr "Prompt History Reset" -#: ../../client/src/app/router/ScreenSettings.tsx:165 +#: ../../client/src/app/routes/ScreenSettings.tsx:165 msgid "Prompts" msgstr "Prompts" -#: ../../client/src/app/router/ScreenSettings.tsx:137 +#: ../../client/src/app/routes/ScreenSettings.tsx:137 msgid "Provide a key to use AI features." msgstr "Provide a key to use AI features." -#: ../../client/src/app/router/ScreenSettings.tsx:149 +#: ../../client/src/app/routes/ScreenSettings.tsx:149 msgid "Select the AI model to use." msgstr "Select the AI model to use." -#: ../../client/src/app/router/ScreenSettings.tsx:122 +#: ../../client/src/app/routes/ScreenSettings.tsx:122 msgid "Select the distance unit for the app." msgstr "Select the distance unit for the app." -#: ../../client/src/app/router/ScreenSettings.tsx:75 +#: ../../client/src/app/routes/ScreenSettings.tsx:75 msgid "Select the language for the app." msgstr "Select the language for the app." -#: ../../client/src/app/router/ScreenSettings.tsx:109 +#: ../../client/src/app/routes/ScreenSettings.tsx:109 msgid "Select the temperature unit for the app." msgstr "Select the temperature unit for the app." -#: ../../client/src/app/router/ScreenSettings.tsx:95 +#: ../../client/src/app/routes/ScreenSettings.tsx:95 msgid "Select the theme for the app." msgstr "Select the theme for the app." -#: ../../client/src/app/router/ScreenSettings.tsx:27 +#: ../../client/src/app/interface/Tabs.tsx:33 +#: ../../client/src/app/routes/ScreenSettings.tsx:27 msgid "Settings" msgstr "Settings" -#: ../../client/src/app/interface/NavMenu.tsx:128 +#: ../../client/src/app/interface/Menu.tsx:127 +#: ../../client/src/app/routes/ScreenStorage.tsx:14 msgid "Storage" msgstr "Storage" -#: ../../client/src/app/router/ScreenSettings.tsx:108 +#: ../../client/src/app/routes/ScreenSettings.tsx:108 msgid "Temperature" msgstr "Temperature" -#: ../../client/src/app/router/ScreenSettings.tsx:94 +#: ../../client/src/app/routes/ScreenSettings.tsx:94 msgid "Theme" msgstr "Theme" -#: ../../client/src/app/router/ScreenSettings.tsx:39 +#: ../../client/src/app/routes/ScreenSettings.tsx:39 msgid "User Name" msgstr "User Name" @@ -338,19 +342,20 @@ msgstr "View your events and time-related info" msgid "View your latest news and rss feeds" msgstr "View your latest news and rss feeds" -#: ../../client/src/home/router/ScreenHome.tsx:22 +#: ../../client/src/home/routes/ScreenHome.tsx:22 msgid "Welcome, {0}" msgstr "Welcome, {0}" -#: ../../client/src/home/router/ScreenHome.tsx:23 +#: ../../client/src/home/routes/ScreenHome.tsx:23 msgid "Welcome, Human" msgstr "Welcome, Human" -#: ../../client/src/app/router/ScreenTeaser.tsx:14 +#: ../../client/src/app/routes/ScreenTeaser.tsx:14 msgid "Work in progress..." msgstr "Work in progress..." -#: ../../client/src/app/interface/NavMenu.tsx:81 +#: ../../client/src/app/interface/Menu.tsx:80 +#: ../../client/src/app/interface/Tabs.tsx:28 msgid "World" msgstr "World" @@ -362,10 +367,10 @@ msgstr "You are offline" msgid "You are online" msgstr "You are online" -#: ../../client/src/app/router/ScreenSettings.tsx:40 +#: ../../client/src/app/routes/ScreenSettings.tsx:40 msgid "Your name to display in the app." msgstr "Your name to display in the app." -#: ../../client/src/settings/hooks/useSettings.ts:45 +#: ../../client/src/app/hooks/useSettings.ts:45 msgid "Your prompt history has been reset." msgstr "Your prompt history has been reset." diff --git a/translations/ja.po b/translations/ja.po index b336f27c..1da33596 100644 --- a/translations/ja.po +++ b/translations/ja.po @@ -13,112 +13,112 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: ../../client/src/dev/router/ScreenLibrary.tsx:16 +#: ../../client/src/dev/routes/ScreenDesign.tsx:12 +#: ../../client/src/dev/routes/ScreenLibrary.tsx:16 msgid "{0} components" msgstr "{0} コンポーネント" -#: ../../client/src/app/router/ScreenSettings.tsx:52 +#: ../../client/src/app/routes/ScreenSettings.tsx:52 msgid "A mnemonic phrase for authentication." msgstr "認証用のニーモニックフレーズ。" -#: ../../client/src/app/router/ScreenSettings.tsx:134 +#: ../../client/src/app/routes/ScreenSettings.tsx:134 msgid "AI" msgstr "AI" -#: ../../client/src/app/router/ScreenSettings.tsx:175 +#: ../../client/src/app/routes/ScreenSettings.tsx:175 msgid "All Data" msgstr "すべてのデータ" -#: ../../client/src/settings/hooks/useSettings.ts:57 +#: ../../client/src/app/hooks/useSettings.ts:57 msgid "Are you sure you want to change the owner key? This will reset the local database. This action cannot be undone." msgstr "オーナーキーを変更してもよろしいですか?これによりローカルデータベースがリセットされます。この操作は元に戻せません。" -#: ../../client/src/settings/hooks/useSettings.ts:51 +#: ../../client/src/app/hooks/useSettings.ts:51 msgid "Are you sure you want to reset your local database? If data is not backed up on another device, it will be lost. This action cannot be undone." msgstr "ローカルデータベースをリセットしてもよろしいですか?他のデバイスにバックアップされていないデータは失われます。この操作は元に戻せません。" -#: ../../client/src/settings/hooks/useSettings.ts:42 +#: ../../client/src/app/hooks/useSettings.ts:42 msgid "Are you sure you want to reset your prompt history?" msgstr "プロンプト履歴をリセットしてもよろしいですか?" -#: ../../client/src/home/interface/AiPrompt.tsx:50 +#: ../../client/src/home/stacks/AiPrompt.tsx:50 msgid "Ask anything..." msgstr "何でも聞いてください..." -#: ../../client/src/app/router/ScreenSettings.tsx:82 -#: ../../client/src/app/router/ScreenSettings.tsx:102 +#: ../../client/src/app/routes/ScreenSettings.tsx:82 +#: ../../client/src/app/routes/ScreenSettings.tsx:102 msgid "Auto" msgstr "自動" -#: ../../client/src/app/interface/NavMenu.tsx:76 +#: ../../client/src/app/interface/Menu.tsx:75 msgid "Books" msgstr "本" +#: ../../client/src/app/interface/Menu.tsx:92 #: ../../client/src/world/routes/ScreenWorld.tsx:30 msgid "Calendar" msgstr "" -#: ../../client/src/app/router/ScreenSettings.tsx:116 +#: ../../client/src/app/routes/ScreenSettings.tsx:116 msgid "Celsius" msgstr "摂氏" -#: ../../client/src/app/router/ScreenSettings.tsx:104 +#: ../../client/src/app/routes/ScreenSettings.tsx:104 msgid "Dark" msgstr "ダーク" -#: ../../client/src/app/interface/NavMenu.tsx:29 +#: ../../client/src/app/interface/Menu.tsx:28 +#: ../../client/src/app/interface/Tabs.tsx:13 msgid "Dashboard" msgstr "ダッシュボード" -#: ../../client/src/app/router/ScreenSettings.tsx:163 +#: ../../client/src/app/routes/ScreenSettings.tsx:163 msgid "Data" msgstr "データ" -#: ../../client/src/app/router/ScreenSettings.tsx:166 +#: ../../client/src/app/routes/ScreenSettings.tsx:166 msgid "Delete all prompt data." msgstr "すべてのプロンプトデータを削除します。" -#: ../../client/src/app/router/ScreenSettings.tsx:178 +#: ../../client/src/app/routes/ScreenSettings.tsx:178 msgid "Delete Database" msgstr "データベースを削除" -#: ../../client/src/app/router/ScreenSettings.tsx:168 +#: ../../client/src/app/routes/ScreenSettings.tsx:168 msgid "Delete Prompts" msgstr "プロンプトを削除" -#: ../../client/src/app/router/ScreenSettings.tsx:176 +#: ../../client/src/app/routes/ScreenSettings.tsx:176 msgid "Delete the local database." msgstr "ローカルデータベースを削除します。" -#: ../../client/src/app/interface/NavMenu.tsx:113 +#: ../../client/src/app/interface/Menu.tsx:112 +#: ../../client/src/dev/routes/ScreenDesign.tsx:11 msgid "Design" msgstr "デザイン" -#: ../../client/src/app/interface/NavMenu.tsx:111 +#: ../../client/src/app/interface/Menu.tsx:110 msgid "Dev Mode" msgstr "" -#: ../../client/src/media/routes/ScreenBrowse.tsx:19 -msgid "Device" -msgstr "" - -#: ../../client/src/media/base/WatermarkEmpty.tsx:15 +#: ../../client/src/media/stacks/WatermarkEmpty.tsx:15 msgid "Directory is empty." msgstr "" -#: ../../client/src/app/router/ScreenSettings.tsx:72 +#: ../../client/src/app/routes/ScreenSettings.tsx:72 msgid "Display" msgstr "表示" -#: ../../client/src/app/router/ScreenSettings.tsx:121 +#: ../../client/src/app/routes/ScreenSettings.tsx:121 msgid "Distance" msgstr "距離" -#: ../../client/src/app/interface/NavMenu.tsx:51 +#: ../../client/src/app/interface/Menu.tsx:50 msgid "Docs" msgstr "ドキュメント" -#: ../../client/src/media/base/FileDownload.tsx:17 +#: ../../client/src/media/stacks/FileDownload.tsx:17 msgid "Download" msgstr "" @@ -130,31 +130,29 @@ msgstr "良い一日を" msgid "Enjoy the night" msgstr "良い夜を" -#: ../../client/src/app/router/ScreenSettings.tsx:141 +#: ../../client/src/app/routes/ScreenSettings.tsx:141 msgid "Enter api key" msgstr "APIキーを入力" -#: ../../client/src/app/router/ScreenSettings.tsx:58 +#: ../../client/src/app/routes/ScreenSettings.tsx:58 msgid "Enter your mnemonic phrase" msgstr "ニーモニックフレーズを入力してください" -#: ../../client/src/app/router/ScreenSettings.tsx:46 +#: ../../client/src/app/routes/ScreenSettings.tsx:46 msgid "Enter your name" msgstr "名前を入力してください" -#: ../../client/src/app/router/ScreenSettings.tsx:117 +#: ../../client/src/app/routes/ScreenSettings.tsx:117 msgid "Fahrenheit" msgstr "華氏" -#: ../../client/src/app/interface/NavMenu.tsx:98 -msgid "Favorites" -msgstr "お気に入り" - +#: ../../client/src/app/interface/Menu.tsx:45 +#: ../../client/src/app/interface/Tabs.tsx:23 #: ../../client/src/media/routes/ScreenBrowse.tsx:19 msgid "Files" msgstr "ファイル" -#: ../../client/src/app/interface/NavMenu.tsx:71 +#: ../../client/src/app/interface/Menu.tsx:70 msgid "Games" msgstr "ゲーム" @@ -174,7 +172,7 @@ msgstr "こんばんは" msgid "Good morning" msgstr "おはようございます" -#: ../../client/src/app/router/ScreenSettings.tsx:136 +#: ../../client/src/app/routes/ScreenSettings.tsx:136 msgid "Groq API Key" msgstr "Groq APIキー" @@ -182,35 +180,37 @@ msgstr "Groq APIキー" msgid "Groq Failure" msgstr "Groq失敗" -#: ../../client/src/app/router/ScreenSettings.tsx:148 +#: ../../client/src/app/routes/ScreenSettings.tsx:148 msgid "Groq Model ID" msgstr "GroqモデルID" -#: ../../client/src/app/interface/NavMenuHeader.tsx:27 +#: ../../client/src/app/interface/MenuHeader.tsx:27 msgid "Human" msgstr "人間" -#: ../../client/src/media/base/WatermarkEmpty.tsx:16 +#: ../../client/src/media/stacks/WatermarkEmpty.tsx:16 msgid "Import" msgstr "" -#: ../../client/src/app/interface/NavMenu.tsx:34 +#: ../../client/src/app/interface/Menu.tsx:33 +#: ../../client/src/app/interface/Tabs.tsx:18 msgid "Inbox" msgstr "受信トレイ" -#: ../../client/src/app/router/ScreenSettings.tsx:129 +#: ../../client/src/app/routes/ScreenSettings.tsx:129 msgid "Kilometers" msgstr "キロメートル" -#: ../../client/src/app/router/ScreenSettings.tsx:74 +#: ../../client/src/app/routes/ScreenSettings.tsx:74 msgid "Language" msgstr "言語" -#: ../../client/src/app/interface/NavMenu.tsx:118 +#: ../../client/src/app/interface/Menu.tsx:117 +#: ../../client/src/dev/routes/ScreenLibrary.tsx:15 msgid "Library" msgstr "ライブラリ" -#: ../../client/src/app/router/ScreenSettings.tsx:103 +#: ../../client/src/app/routes/ScreenSettings.tsx:103 msgid "Light" msgstr "ライト" @@ -218,111 +218,115 @@ msgstr "ライト" msgid "Loading..." msgstr "読み込み中..." -#: ../../client/src/app/router/ScreenSettings.tsx:28 +#: ../../client/src/app/routes/ScreenSettings.tsx:28 msgid "Manage your settings" msgstr "設定を管理" -#: ../../client/src/app/router/ScreenStorage.tsx:15 +#: ../../client/src/app/routes/ScreenStorage.tsx:15 msgid "Manage your storage" msgstr "" +#: ../../client/src/app/interface/Menu.tsx:82 #: ../../client/src/world/routes/ScreenWorld.tsx:18 msgid "Map" msgstr "" -#: ../../client/src/app/interface/NavMenu.tsx:39 +#: ../../client/src/app/interface/Menu.tsx:38 msgid "Media" msgstr "メディア" -#: ../../client/src/app/router/ScreenSettings.tsx:130 +#: ../../client/src/app/routes/ScreenSettings.tsx:130 msgid "Miles" msgstr "マイル" -#: ../../client/src/app/interface/NavMenu.tsx:66 +#: ../../client/src/app/interface/Menu.tsx:65 msgid "Movies" msgstr "" -#: ../../client/src/app/interface/NavMenu.tsx:56 +#: ../../client/src/app/interface/Menu.tsx:55 msgid "Music" msgstr "音楽" +#: ../../client/src/app/interface/Menu.tsx:87 #: ../../client/src/world/routes/ScreenWorld.tsx:24 msgid "News" msgstr "" -#: ../../client/src/world/router/ScreenCalendar.tsx:37 +#: ../../client/src/world/routes/ScreenCalendar.tsx:37 msgid "No events scheduled." msgstr "予定されているイベントはありません。" -#: ../../client/src/app/router/ScreenStorage.tsx:17 +#: ../../client/src/app/routes/ScreenStorage.tsx:17 msgid "Overview" msgstr "" -#: ../../client/src/app/router/ScreenSettings.tsx:51 +#: ../../client/src/app/routes/ScreenSettings.tsx:51 msgid "Owner Key" msgstr "オーナーキー" -#: ../../client/src/app/interface/NavMenu.tsx:61 +#: ../../client/src/app/interface/Menu.tsx:60 msgid "Pictures" msgstr "" -#: ../../client/src/home/interface/AiPrompt.tsx:50 +#: ../../client/src/home/stacks/AiPrompt.tsx:50 msgid "Please set your Groq API Key" msgstr "Groq APIキーを設定してください" -#: ../../client/src/app/router/ScreenSettings.tsx:37 +#: ../../client/src/app/routes/ScreenSettings.tsx:37 msgid "Profile" msgstr "プロフィール" -#: ../../client/src/settings/hooks/useSettings.ts:44 +#: ../../client/src/app/hooks/useSettings.ts:44 msgid "Prompt History Reset" msgstr "プロンプト履歴のリセット" -#: ../../client/src/app/router/ScreenSettings.tsx:165 +#: ../../client/src/app/routes/ScreenSettings.tsx:165 msgid "Prompts" msgstr "プロンプト" -#: ../../client/src/app/router/ScreenSettings.tsx:137 +#: ../../client/src/app/routes/ScreenSettings.tsx:137 msgid "Provide a key to use AI features." msgstr "AI機能を使用するためのキーを提供してください。" -#: ../../client/src/app/router/ScreenSettings.tsx:149 +#: ../../client/src/app/routes/ScreenSettings.tsx:149 msgid "Select the AI model to use." msgstr "使用するAIモデルを選択してください。" -#: ../../client/src/app/router/ScreenSettings.tsx:122 +#: ../../client/src/app/routes/ScreenSettings.tsx:122 msgid "Select the distance unit for the app." msgstr "アプリの距離単位を選択してください。" -#: ../../client/src/app/router/ScreenSettings.tsx:75 +#: ../../client/src/app/routes/ScreenSettings.tsx:75 msgid "Select the language for the app." msgstr "アプリの言語を選択してください。" -#: ../../client/src/app/router/ScreenSettings.tsx:109 +#: ../../client/src/app/routes/ScreenSettings.tsx:109 msgid "Select the temperature unit for the app." msgstr "アプリの温度単位を選択してください。" -#: ../../client/src/app/router/ScreenSettings.tsx:95 +#: ../../client/src/app/routes/ScreenSettings.tsx:95 msgid "Select the theme for the app." msgstr "アプリのテーマを選択してください。" -#: ../../client/src/app/router/ScreenSettings.tsx:27 +#: ../../client/src/app/interface/Tabs.tsx:33 +#: ../../client/src/app/routes/ScreenSettings.tsx:27 msgid "Settings" msgstr "設定" -#: ../../client/src/app/interface/NavMenu.tsx:128 +#: ../../client/src/app/interface/Menu.tsx:127 +#: ../../client/src/app/routes/ScreenStorage.tsx:14 msgid "Storage" msgstr "" -#: ../../client/src/app/router/ScreenSettings.tsx:108 +#: ../../client/src/app/routes/ScreenSettings.tsx:108 msgid "Temperature" msgstr "温度" -#: ../../client/src/app/router/ScreenSettings.tsx:94 +#: ../../client/src/app/routes/ScreenSettings.tsx:94 msgid "Theme" msgstr "テーマ" -#: ../../client/src/app/router/ScreenSettings.tsx:39 +#: ../../client/src/app/routes/ScreenSettings.tsx:39 msgid "User Name" msgstr "ユーザー名" @@ -338,19 +342,20 @@ msgstr "" msgid "View your latest news and rss feeds" msgstr "" -#: ../../client/src/home/router/ScreenHome.tsx:22 +#: ../../client/src/home/routes/ScreenHome.tsx:22 msgid "Welcome, {0}" msgstr "ようこそ、{0}さん" -#: ../../client/src/home/router/ScreenHome.tsx:23 +#: ../../client/src/home/routes/ScreenHome.tsx:23 msgid "Welcome, Human" msgstr "ようこそ、人間さん" -#: ../../client/src/app/router/ScreenTeaser.tsx:14 +#: ../../client/src/app/routes/ScreenTeaser.tsx:14 msgid "Work in progress..." msgstr "作業中..." -#: ../../client/src/app/interface/NavMenu.tsx:81 +#: ../../client/src/app/interface/Menu.tsx:80 +#: ../../client/src/app/interface/Tabs.tsx:28 msgid "World" msgstr "ワールド" @@ -362,10 +367,10 @@ msgstr "オフラインです" msgid "You are online" msgstr "オンラインです" -#: ../../client/src/app/router/ScreenSettings.tsx:40 +#: ../../client/src/app/routes/ScreenSettings.tsx:40 msgid "Your name to display in the app." msgstr "アプリに表示する名前。" -#: ../../client/src/settings/hooks/useSettings.ts:45 +#: ../../client/src/app/hooks/useSettings.ts:45 msgid "Your prompt history has been reset." msgstr "プロンプト履歴がリセットされました。" diff --git a/translations/ru.po b/translations/ru.po index d9566e46..071cbb3b 100644 --- a/translations/ru.po +++ b/translations/ru.po @@ -13,112 +13,112 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: ../../client/src/dev/router/ScreenLibrary.tsx:16 +#: ../../client/src/dev/routes/ScreenDesign.tsx:12 +#: ../../client/src/dev/routes/ScreenLibrary.tsx:16 msgid "{0} components" msgstr "{0} компонентов" -#: ../../client/src/app/router/ScreenSettings.tsx:52 +#: ../../client/src/app/routes/ScreenSettings.tsx:52 msgid "A mnemonic phrase for authentication." msgstr "Мнемоническая фраза для аутентификации." -#: ../../client/src/app/router/ScreenSettings.tsx:134 +#: ../../client/src/app/routes/ScreenSettings.tsx:134 msgid "AI" msgstr "ИИ" -#: ../../client/src/app/router/ScreenSettings.tsx:175 +#: ../../client/src/app/routes/ScreenSettings.tsx:175 msgid "All Data" msgstr "Все данные" -#: ../../client/src/settings/hooks/useSettings.ts:57 +#: ../../client/src/app/hooks/useSettings.ts:57 msgid "Are you sure you want to change the owner key? This will reset the local database. This action cannot be undone." msgstr "Вы уверены, что хотите изменить ключ владельца? Это приведет к сбросу локальной базы данных. Это действие нельзя отменить." -#: ../../client/src/settings/hooks/useSettings.ts:51 +#: ../../client/src/app/hooks/useSettings.ts:51 msgid "Are you sure you want to reset your local database? If data is not backed up on another device, it will be lost. This action cannot be undone." msgstr "Вы уверены, что хотите сбросить вашу локальную базу данных? Если данные не сохранены на другом устройстве, они будут потеряны. Это действие нельзя отменить." -#: ../../client/src/settings/hooks/useSettings.ts:42 +#: ../../client/src/app/hooks/useSettings.ts:42 msgid "Are you sure you want to reset your prompt history?" msgstr "Вы уверены, что хотите сбросить историю ваших запросов?" -#: ../../client/src/home/interface/AiPrompt.tsx:50 +#: ../../client/src/home/stacks/AiPrompt.tsx:50 msgid "Ask anything..." msgstr "Спросите что угодно..." -#: ../../client/src/app/router/ScreenSettings.tsx:82 -#: ../../client/src/app/router/ScreenSettings.tsx:102 +#: ../../client/src/app/routes/ScreenSettings.tsx:82 +#: ../../client/src/app/routes/ScreenSettings.tsx:102 msgid "Auto" msgstr "Авто" -#: ../../client/src/app/interface/NavMenu.tsx:76 +#: ../../client/src/app/interface/Menu.tsx:75 msgid "Books" msgstr "Книги" +#: ../../client/src/app/interface/Menu.tsx:92 #: ../../client/src/world/routes/ScreenWorld.tsx:30 msgid "Calendar" msgstr "" -#: ../../client/src/app/router/ScreenSettings.tsx:116 +#: ../../client/src/app/routes/ScreenSettings.tsx:116 msgid "Celsius" msgstr "Цельсий" -#: ../../client/src/app/router/ScreenSettings.tsx:104 +#: ../../client/src/app/routes/ScreenSettings.tsx:104 msgid "Dark" msgstr "Темная" -#: ../../client/src/app/interface/NavMenu.tsx:29 +#: ../../client/src/app/interface/Menu.tsx:28 +#: ../../client/src/app/interface/Tabs.tsx:13 msgid "Dashboard" msgstr "Дашборд" -#: ../../client/src/app/router/ScreenSettings.tsx:163 +#: ../../client/src/app/routes/ScreenSettings.tsx:163 msgid "Data" msgstr "Данные" -#: ../../client/src/app/router/ScreenSettings.tsx:166 +#: ../../client/src/app/routes/ScreenSettings.tsx:166 msgid "Delete all prompt data." msgstr "Удалить все данные запросов." -#: ../../client/src/app/router/ScreenSettings.tsx:178 +#: ../../client/src/app/routes/ScreenSettings.tsx:178 msgid "Delete Database" msgstr "Удалить базу данных" -#: ../../client/src/app/router/ScreenSettings.tsx:168 +#: ../../client/src/app/routes/ScreenSettings.tsx:168 msgid "Delete Prompts" msgstr "Удалить запросы" -#: ../../client/src/app/router/ScreenSettings.tsx:176 +#: ../../client/src/app/routes/ScreenSettings.tsx:176 msgid "Delete the local database." msgstr "Удалить локальную базу данных." -#: ../../client/src/app/interface/NavMenu.tsx:113 +#: ../../client/src/app/interface/Menu.tsx:112 +#: ../../client/src/dev/routes/ScreenDesign.tsx:11 msgid "Design" msgstr "Дизайн" -#: ../../client/src/app/interface/NavMenu.tsx:111 +#: ../../client/src/app/interface/Menu.tsx:110 msgid "Dev Mode" msgstr "" -#: ../../client/src/media/routes/ScreenBrowse.tsx:19 -msgid "Device" -msgstr "" - -#: ../../client/src/media/base/WatermarkEmpty.tsx:15 +#: ../../client/src/media/stacks/WatermarkEmpty.tsx:15 msgid "Directory is empty." msgstr "" -#: ../../client/src/app/router/ScreenSettings.tsx:72 +#: ../../client/src/app/routes/ScreenSettings.tsx:72 msgid "Display" msgstr "Отображение" -#: ../../client/src/app/router/ScreenSettings.tsx:121 +#: ../../client/src/app/routes/ScreenSettings.tsx:121 msgid "Distance" msgstr "Расстояние" -#: ../../client/src/app/interface/NavMenu.tsx:51 +#: ../../client/src/app/interface/Menu.tsx:50 msgid "Docs" msgstr "Документы" -#: ../../client/src/media/base/FileDownload.tsx:17 +#: ../../client/src/media/stacks/FileDownload.tsx:17 msgid "Download" msgstr "" @@ -130,31 +130,29 @@ msgstr "Хорошего дня" msgid "Enjoy the night" msgstr "Приятной ночи" -#: ../../client/src/app/router/ScreenSettings.tsx:141 +#: ../../client/src/app/routes/ScreenSettings.tsx:141 msgid "Enter api key" msgstr "Введите API ключ" -#: ../../client/src/app/router/ScreenSettings.tsx:58 +#: ../../client/src/app/routes/ScreenSettings.tsx:58 msgid "Enter your mnemonic phrase" msgstr "Введите вашу мнемоническую фразу" -#: ../../client/src/app/router/ScreenSettings.tsx:46 +#: ../../client/src/app/routes/ScreenSettings.tsx:46 msgid "Enter your name" msgstr "Введите ваше имя" -#: ../../client/src/app/router/ScreenSettings.tsx:117 +#: ../../client/src/app/routes/ScreenSettings.tsx:117 msgid "Fahrenheit" msgstr "Фаренгейт" -#: ../../client/src/app/interface/NavMenu.tsx:98 -msgid "Favorites" -msgstr "Избранное" - +#: ../../client/src/app/interface/Menu.tsx:45 +#: ../../client/src/app/interface/Tabs.tsx:23 #: ../../client/src/media/routes/ScreenBrowse.tsx:19 msgid "Files" msgstr "Файлы" -#: ../../client/src/app/interface/NavMenu.tsx:71 +#: ../../client/src/app/interface/Menu.tsx:70 msgid "Games" msgstr "Игры" @@ -174,7 +172,7 @@ msgstr "Добрый вечер" msgid "Good morning" msgstr "Доброе утро" -#: ../../client/src/app/router/ScreenSettings.tsx:136 +#: ../../client/src/app/routes/ScreenSettings.tsx:136 msgid "Groq API Key" msgstr "API ключ Groq" @@ -182,35 +180,37 @@ msgstr "API ключ Groq" msgid "Groq Failure" msgstr "Ошибка Groq" -#: ../../client/src/app/router/ScreenSettings.tsx:148 +#: ../../client/src/app/routes/ScreenSettings.tsx:148 msgid "Groq Model ID" msgstr "ID модели Groq" -#: ../../client/src/app/interface/NavMenuHeader.tsx:27 +#: ../../client/src/app/interface/MenuHeader.tsx:27 msgid "Human" msgstr "Человек" -#: ../../client/src/media/base/WatermarkEmpty.tsx:16 +#: ../../client/src/media/stacks/WatermarkEmpty.tsx:16 msgid "Import" msgstr "" -#: ../../client/src/app/interface/NavMenu.tsx:34 +#: ../../client/src/app/interface/Menu.tsx:33 +#: ../../client/src/app/interface/Tabs.tsx:18 msgid "Inbox" msgstr "Входящие" -#: ../../client/src/app/router/ScreenSettings.tsx:129 +#: ../../client/src/app/routes/ScreenSettings.tsx:129 msgid "Kilometers" msgstr "Километры" -#: ../../client/src/app/router/ScreenSettings.tsx:74 +#: ../../client/src/app/routes/ScreenSettings.tsx:74 msgid "Language" msgstr "Язык" -#: ../../client/src/app/interface/NavMenu.tsx:118 +#: ../../client/src/app/interface/Menu.tsx:117 +#: ../../client/src/dev/routes/ScreenLibrary.tsx:15 msgid "Library" msgstr "Библиотека" -#: ../../client/src/app/router/ScreenSettings.tsx:103 +#: ../../client/src/app/routes/ScreenSettings.tsx:103 msgid "Light" msgstr "Светлая" @@ -218,111 +218,115 @@ msgstr "Светлая" msgid "Loading..." msgstr "Загрузка..." -#: ../../client/src/app/router/ScreenSettings.tsx:28 +#: ../../client/src/app/routes/ScreenSettings.tsx:28 msgid "Manage your settings" msgstr "Управление настройками" -#: ../../client/src/app/router/ScreenStorage.tsx:15 +#: ../../client/src/app/routes/ScreenStorage.tsx:15 msgid "Manage your storage" msgstr "" +#: ../../client/src/app/interface/Menu.tsx:82 #: ../../client/src/world/routes/ScreenWorld.tsx:18 msgid "Map" msgstr "" -#: ../../client/src/app/interface/NavMenu.tsx:39 +#: ../../client/src/app/interface/Menu.tsx:38 msgid "Media" msgstr "Медиа" -#: ../../client/src/app/router/ScreenSettings.tsx:130 +#: ../../client/src/app/routes/ScreenSettings.tsx:130 msgid "Miles" msgstr "Мили" -#: ../../client/src/app/interface/NavMenu.tsx:66 +#: ../../client/src/app/interface/Menu.tsx:65 msgid "Movies" msgstr "" -#: ../../client/src/app/interface/NavMenu.tsx:56 +#: ../../client/src/app/interface/Menu.tsx:55 msgid "Music" msgstr "Музыка" +#: ../../client/src/app/interface/Menu.tsx:87 #: ../../client/src/world/routes/ScreenWorld.tsx:24 msgid "News" msgstr "" -#: ../../client/src/world/router/ScreenCalendar.tsx:37 +#: ../../client/src/world/routes/ScreenCalendar.tsx:37 msgid "No events scheduled." msgstr "Нет запланированных событий." -#: ../../client/src/app/router/ScreenStorage.tsx:17 +#: ../../client/src/app/routes/ScreenStorage.tsx:17 msgid "Overview" msgstr "" -#: ../../client/src/app/router/ScreenSettings.tsx:51 +#: ../../client/src/app/routes/ScreenSettings.tsx:51 msgid "Owner Key" msgstr "Ключ владельца" -#: ../../client/src/app/interface/NavMenu.tsx:61 +#: ../../client/src/app/interface/Menu.tsx:60 msgid "Pictures" msgstr "" -#: ../../client/src/home/interface/AiPrompt.tsx:50 +#: ../../client/src/home/stacks/AiPrompt.tsx:50 msgid "Please set your Groq API Key" msgstr "Пожалуйста, установите ваш API ключ Groq" -#: ../../client/src/app/router/ScreenSettings.tsx:37 +#: ../../client/src/app/routes/ScreenSettings.tsx:37 msgid "Profile" msgstr "Профиль" -#: ../../client/src/settings/hooks/useSettings.ts:44 +#: ../../client/src/app/hooks/useSettings.ts:44 msgid "Prompt History Reset" msgstr "Сброс истории запросов" -#: ../../client/src/app/router/ScreenSettings.tsx:165 +#: ../../client/src/app/routes/ScreenSettings.tsx:165 msgid "Prompts" msgstr "Запросы" -#: ../../client/src/app/router/ScreenSettings.tsx:137 +#: ../../client/src/app/routes/ScreenSettings.tsx:137 msgid "Provide a key to use AI features." msgstr "Предоставьте ключ для использования функций ИИ." -#: ../../client/src/app/router/ScreenSettings.tsx:149 +#: ../../client/src/app/routes/ScreenSettings.tsx:149 msgid "Select the AI model to use." msgstr "Выберите модель ИИ для использования." -#: ../../client/src/app/router/ScreenSettings.tsx:122 +#: ../../client/src/app/routes/ScreenSettings.tsx:122 msgid "Select the distance unit for the app." msgstr "Выберите единицу измерения расстояния для приложения." -#: ../../client/src/app/router/ScreenSettings.tsx:75 +#: ../../client/src/app/routes/ScreenSettings.tsx:75 msgid "Select the language for the app." msgstr "Выберите язык для приложения." -#: ../../client/src/app/router/ScreenSettings.tsx:109 +#: ../../client/src/app/routes/ScreenSettings.tsx:109 msgid "Select the temperature unit for the app." msgstr "Выберите единицу измерения температуры для приложения." -#: ../../client/src/app/router/ScreenSettings.tsx:95 +#: ../../client/src/app/routes/ScreenSettings.tsx:95 msgid "Select the theme for the app." msgstr "Выберите тему для приложения." -#: ../../client/src/app/router/ScreenSettings.tsx:27 +#: ../../client/src/app/interface/Tabs.tsx:33 +#: ../../client/src/app/routes/ScreenSettings.tsx:27 msgid "Settings" msgstr "Настройки" -#: ../../client/src/app/interface/NavMenu.tsx:128 +#: ../../client/src/app/interface/Menu.tsx:127 +#: ../../client/src/app/routes/ScreenStorage.tsx:14 msgid "Storage" msgstr "" -#: ../../client/src/app/router/ScreenSettings.tsx:108 +#: ../../client/src/app/routes/ScreenSettings.tsx:108 msgid "Temperature" msgstr "Температура" -#: ../../client/src/app/router/ScreenSettings.tsx:94 +#: ../../client/src/app/routes/ScreenSettings.tsx:94 msgid "Theme" msgstr "Тема" -#: ../../client/src/app/router/ScreenSettings.tsx:39 +#: ../../client/src/app/routes/ScreenSettings.tsx:39 msgid "User Name" msgstr "Имя пользователя" @@ -338,19 +342,20 @@ msgstr "" msgid "View your latest news and rss feeds" msgstr "" -#: ../../client/src/home/router/ScreenHome.tsx:22 +#: ../../client/src/home/routes/ScreenHome.tsx:22 msgid "Welcome, {0}" msgstr "Добро пожаловать, {0}" -#: ../../client/src/home/router/ScreenHome.tsx:23 +#: ../../client/src/home/routes/ScreenHome.tsx:23 msgid "Welcome, Human" msgstr "Добро пожаловать, Человек" -#: ../../client/src/app/router/ScreenTeaser.tsx:14 +#: ../../client/src/app/routes/ScreenTeaser.tsx:14 msgid "Work in progress..." msgstr "В работе..." -#: ../../client/src/app/interface/NavMenu.tsx:81 +#: ../../client/src/app/interface/Menu.tsx:80 +#: ../../client/src/app/interface/Tabs.tsx:28 msgid "World" msgstr "Мир" @@ -362,10 +367,10 @@ msgstr "Вы не в сети" msgid "You are online" msgstr "Вы в сети" -#: ../../client/src/app/router/ScreenSettings.tsx:40 +#: ../../client/src/app/routes/ScreenSettings.tsx:40 msgid "Your name to display in the app." msgstr "Ваше имя для отображения в приложении." -#: ../../client/src/settings/hooks/useSettings.ts:45 +#: ../../client/src/app/hooks/useSettings.ts:45 msgid "Your prompt history has been reset." msgstr "История ваших запросов была сброшена."