From 6f7692c08663a2684acb9ef10a61ea7bcf0f1a25 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Tue, 28 Feb 2023 20:35:57 +0100 Subject: [PATCH 01/98] =?UTF-8?q?=F0=9F=9A=91=20Fix=20RSS=20widget=20crash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/api/modules/rss/index.ts | 9 +++++++++ src/widgets/rss/RssWidgetTile.tsx | 20 ++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/pages/api/modules/rss/index.ts b/src/pages/api/modules/rss/index.ts index 0a5623158..0ee993be3 100644 --- a/src/pages/api/modules/rss/index.ts +++ b/src/pages/api/modules/rss/index.ts @@ -53,6 +53,7 @@ export const Get = async (request: NextApiRequest, response: NextApiResponse) => title: item.title ? decode(item.title) : undefined, content: decode(item.content), enclosure: createEnclosure(item), + link: createLink(item), })) .sort((a: { pubDate: number }, b: { pubDate: number }) => { if (!a.pubDate || !b.pubDate) { @@ -70,6 +71,14 @@ export const Get = async (request: NextApiRequest, response: NextApiResponse) => }); }; +const createLink = (item: any) => { + if (item.link) { + return item.link; + } + + return item.guid; +}; + const createEnclosure = (item: any) => { if (item.enclosure) { return item.enclosure; diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index 39b03db68..8877fff80 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -16,7 +16,6 @@ import { Title, UnstyledButton, } from '@mantine/core'; -import { useElementSize } from '@mantine/hooks'; import { IconBulldozer, IconCalendarTime, @@ -65,7 +64,6 @@ function RssTile({ widget }: RssTileProps) { ); const { classes } = useStyles(); const [loadingOverlayVisible, setLoadingOverlayVisible] = useState(false); - const { ref, height } = useElementSize(); if (!data || isLoading) { return ( @@ -88,7 +86,7 @@ function RssTile({ widget }: RssTileProps) { } return ( - + {data.feed.image ? ( @@ -121,7 +119,7 @@ function RssTile({ widget }: RssTileProps) { - - - - {data.feed.lastBuildDate} - - + {data.feed.lastBuildDate && ( + + + + {data.feed.lastBuildDate} + + + )} {data.feed.feedUrl && ( From 0b7f407b8c30cbded65f7a165385db5d793ea0b9 Mon Sep 17 00:00:00 2001 From: ajnart Date: Thu, 2 Mar 2023 16:40:50 +0900 Subject: [PATCH 02/98] =?UTF-8?q?=E2=9C=A8=20Add=20feature=20for=20edit=20?= =?UTF-8?q?mode=20password?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 2 + .../Modals/AboutModal/AboutModal.tsx | 37 +++++---- src/components/layout/header/SettingsMenu.tsx | 2 + .../header/SettingsMenu/EditModeToggle.tsx | 78 +++++++++++++++++++ src/modules/Docker/DockerModule.tsx | 2 +- src/pages/api/configs/tryToggleEdit.tsx | 34 ++++++++ 6 files changed, 138 insertions(+), 17 deletions(-) create mode 100644 .env create mode 100644 src/components/layout/header/SettingsMenu/EditModeToggle.tsx create mode 100644 src/pages/api/configs/tryToggleEdit.tsx diff --git a/.env b/.env new file mode 100644 index 000000000..611ce2a59 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +DISABLE_EDIT_MODE=TRUE +EDIT_MODE_PASSWORD='edit' \ No newline at end of file diff --git a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx index 8f366fd9f..4346f0124 100644 --- a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx +++ b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx @@ -9,10 +9,10 @@ import { Group, HoverCard, Modal, - Stack, Table, Text, Title, + Tooltip, } from '@mantine/core'; import { IconAnchor, @@ -35,6 +35,7 @@ import { useConfigContext } from '../../../../config/provider'; import { useConfigStore } from '../../../../config/store'; import { useEditModeInformationStore } from '../../../../hooks/useEditModeInformation'; import { usePackageAttributesStore } from '../../../../tools/client/zustands/usePackageAttributesStore'; +import { useColorTheme } from '../../../../tools/color'; import { usePrimaryGradient } from '../../../layout/useGradient'; import Credits from '../../../Settings/Common/Credits'; @@ -161,9 +162,9 @@ interface ExtendedInitOptions extends InitOptions { } const useInformationTableItems = (newVersionAvailable?: string): InformationTableItem[] => { - const colorGradiant = usePrimaryGradient(); const { attributes } = usePackageAttributesStore(); const { editModeEnabled } = useEditModeInformationStore(); + const { primaryColor } = useColorTheme(); const { configVersion } = useConfigContext(); const { configs } = useConfigStore(); @@ -177,15 +178,19 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl icon: , label: 'experimental_disableEditMode', content: ( - + WARNING - - This is an experimental feature, where the edit mode is disabled entirely - no config - modifications are possbile anymore. All update requests for the config will be dropped - on the API. This will be removed in future versions, as Homarr will receive a proper - authentication system, which will make this obsolete. - - + ), }, ]; @@ -201,7 +206,7 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl icon: , label: 'i18n', content: ( - + {usedI18nNamespaces.length} ), @@ -210,7 +215,7 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl icon: , label: 'locales', content: ( - + {initOptions.locales.length} ), @@ -223,7 +228,7 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl icon: , label: 'configurationSchemaVersion', content: ( - + {configVersion} ), @@ -232,7 +237,7 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl icon: , label: 'configurationsCount', content: ( - + {configs.length} ), @@ -242,7 +247,7 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl label: 'version', content: ( - + {attributes.packageVersion ?? 'Unknown'} {newVersionAvailable && ( @@ -282,7 +287,7 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl icon: , label: 'nodeEnvironment', content: ( - + {attributes.environment} ), diff --git a/src/components/layout/header/SettingsMenu.tsx b/src/components/layout/header/SettingsMenu.tsx index 970762e68..91d04a2fd 100644 --- a/src/components/layout/header/SettingsMenu.tsx +++ b/src/components/layout/header/SettingsMenu.tsx @@ -7,6 +7,7 @@ import { AboutModal } from '../../Dashboard/Modals/AboutModal/AboutModal'; import { SettingsDrawer } from '../../Settings/SettingsDrawer'; import { useCardStyles } from '../useCardStyles'; import { ColorSchemeSwitch } from './SettingsMenu/ColorSchemeSwitch'; +import { EditModeToggle } from './SettingsMenu/EditModeToggle'; export function SettingsMenu({ newVersionAvailable }: { newVersionAvailable: string }) { const [drawerOpened, drawer] = useDisclosure(false); @@ -25,6 +26,7 @@ export function SettingsMenu({ newVersionAvailable }: { newVersionAvailable: str + {!editModeEnabled && ( } onClick={drawer.open}> diff --git a/src/components/layout/header/SettingsMenu/EditModeToggle.tsx b/src/components/layout/header/SettingsMenu/EditModeToggle.tsx new file mode 100644 index 000000000..083e889c9 --- /dev/null +++ b/src/components/layout/header/SettingsMenu/EditModeToggle.tsx @@ -0,0 +1,78 @@ +import { Button, Code, Menu, PasswordInput, Stack, Text } from '@mantine/core'; +import { useForm } from '@mantine/form'; +import { openModal } from '@mantine/modals'; +import { showNotification } from '@mantine/notifications'; +import { IconEdit, IconEditOff } from '@tabler/icons'; +import axios from 'axios'; +import { useEditModeInformationStore } from '../../../../hooks/useEditModeInformation'; + +function ModalContent() { + const form = useForm({ + initialValues: { + triedPassword: '', + }, + }); + return ( +
{ + axios.post('/api/configs/tryToggleEdit', { tried: values.triedPassword }).then((res) => { + if (res.data.success) { + showNotification({ + title: 'Success', + message: 'Successfully toggled edit mode, reloading the page...', + color: 'green', + }); + setTimeout(() => { + window.location.reload(); + }, 500); + } else { + showNotification({ + title: 'Wrong password', + message: 'The password you entered is wrong.', + color: 'red', + }); + } + }); + })} + > + + + In order to toggle edit mode, you need to enter the password you entered in the + environment variable named EDIT_MODE_PASSWORD + + + + +
+ ); +} + +export function EditModeToggle() { + const { editModeEnabled } = useEditModeInformationStore(); + const Icon = editModeEnabled ? IconEdit : IconEditOff; + + return ( + } + onClick={() => + openModal({ + title: 'Toggle edit mode', + centered: true, + size: 'lg', + children: , + }) + } + > + {editModeEnabled ? 'Enable edit mode' : 'Disable edit mode'} + + ); +} diff --git a/src/modules/Docker/DockerModule.tsx b/src/modules/Docker/DockerModule.tsx index 91de2247b..1948c60a3 100644 --- a/src/modules/Docker/DockerModule.tsx +++ b/src/modules/Docker/DockerModule.tsx @@ -54,7 +54,7 @@ export default function DockerMenuButton(props: any) { }, 300); } - if (!dockerEnabled) { + if (!dockerEnabled || process.env.DISABLE_EDIT_MODE === 'true') { return null; } diff --git a/src/pages/api/configs/tryToggleEdit.tsx b/src/pages/api/configs/tryToggleEdit.tsx new file mode 100644 index 000000000..406babdce --- /dev/null +++ b/src/pages/api/configs/tryToggleEdit.tsx @@ -0,0 +1,34 @@ +import Consola from 'consola'; +import { NextApiRequest, NextApiResponse } from 'next'; + +function Post(req: NextApiRequest, res: NextApiResponse) { + const { tried } = req.body; + // Try to match the password with the EDIT_PASSWORD env variable + Consola.log(req.body, process.env.EDIT_MODE_PASSWORD); + if (tried === process.env.EDIT_MODE_PASSWORD) { + process.env.DISABLE_EDIT_MODE = process.env.DISABLE_EDIT_MODE === 'true' ? 'false' : 'true'; + return res.status(200).json({ + success: true, + }); + } + // Warn that there was a wrong password attempt (date : wrong password, person's IP) + Consola.warn( + `${new Date().toLocaleString()} : Wrong edit password attempt, from ${ + req.headers['x-forwarded-for'] + }` + ); + return res.status(200).json({ + success: false, + }); +} + +export default async (req: NextApiRequest, res: NextApiResponse) => { + // Filter out if the request is a POST or a GET + if (req.method === 'POST') { + return Post(req, res); + } + return res.status(405).json({ + statusCode: 405, + message: 'Method not allowed', + }); +}; From 8850e3a0278738ab09ae1fff27c5804547fc02c1 Mon Sep 17 00:00:00 2001 From: ajnart Date: Thu, 2 Mar 2023 16:41:27 +0900 Subject: [PATCH 03/98] =?UTF-8?q?=F0=9F=94=A5=20remove=20.env=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .env diff --git a/.env b/.env deleted file mode 100644 index 611ce2a59..000000000 --- a/.env +++ /dev/null @@ -1,2 +0,0 @@ -DISABLE_EDIT_MODE=TRUE -EDIT_MODE_PASSWORD='edit' \ No newline at end of file From e734af0109303f6b55885f4cf7d7b1264665c689 Mon Sep 17 00:00:00 2001 From: ajnart Date: Thu, 2 Mar 2023 16:43:54 +0900 Subject: [PATCH 04/98] =?UTF-8?q?=F0=9F=94=A5=20Remove=20logs=20and=20reph?= =?UTF-8?q?rase=20modal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layout/header/SettingsMenu/EditModeToggle.tsx | 7 +++---- src/pages/api/configs/tryToggleEdit.tsx | 1 - 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/components/layout/header/SettingsMenu/EditModeToggle.tsx b/src/components/layout/header/SettingsMenu/EditModeToggle.tsx index 083e889c9..5d4fda871 100644 --- a/src/components/layout/header/SettingsMenu/EditModeToggle.tsx +++ b/src/components/layout/header/SettingsMenu/EditModeToggle.tsx @@ -38,7 +38,8 @@ function ModalContent() { In order to toggle edit mode, you need to enter the password you entered in the - environment variable named EDIT_MODE_PASSWORD + environment variable named EDIT_MODE_PASSWORD . If it is not set, you are not + able to toggle edit mode on and off. - + ); diff --git a/src/pages/api/configs/tryToggleEdit.tsx b/src/pages/api/configs/tryToggleEdit.tsx index 406babdce..45f22e8f2 100644 --- a/src/pages/api/configs/tryToggleEdit.tsx +++ b/src/pages/api/configs/tryToggleEdit.tsx @@ -4,7 +4,6 @@ import { NextApiRequest, NextApiResponse } from 'next'; function Post(req: NextApiRequest, res: NextApiResponse) { const { tried } = req.body; // Try to match the password with the EDIT_PASSWORD env variable - Consola.log(req.body, process.env.EDIT_MODE_PASSWORD); if (tried === process.env.EDIT_MODE_PASSWORD) { process.env.DISABLE_EDIT_MODE = process.env.DISABLE_EDIT_MODE === 'true' ? 'false' : 'true'; return res.status(200).json({ From f906214fa93c1489ae4c2ceb0eb50ddaeff331f5 Mon Sep 17 00:00:00 2001 From: ajnart Date: Thu, 2 Mar 2023 16:53:52 +0900 Subject: [PATCH 05/98] Try adding a vercel config file --- vercel.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 vercel.json diff --git a/vercel.json b/vercel.json new file mode 100644 index 000000000..77cfe5754 --- /dev/null +++ b/vercel.json @@ -0,0 +1,6 @@ +{ + "env": { + "EDIT_MODE_PASSWORD": "edit", + "DISABLE_EDIT_MODE": "TRUE" + } +} \ No newline at end of file From 1dd205c441deba38010257564a2b98a3fc855489 Mon Sep 17 00:00:00 2001 From: ajnart Date: Thu, 2 Mar 2023 19:57:24 +0900 Subject: [PATCH 06/98] =?UTF-8?q?=F0=9F=90=9B=20Fix=20StatusCode=20not=20b?= =?UTF-8?q?eing=20used=20properly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dashboard/Tiles/Apps/AppPing.tsx | 4 +--- src/types/app.ts | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/Dashboard/Tiles/Apps/AppPing.tsx b/src/components/Dashboard/Tiles/Apps/AppPing.tsx index d94cdc676..0a14bb9f2 100644 --- a/src/components/Dashboard/Tiles/Apps/AppPing.tsx +++ b/src/components/Dashboard/Tiles/Apps/AppPing.tsx @@ -19,7 +19,7 @@ export const AppPing = ({ app }: AppPingProps) => { queryKey: ['ping', { id: app.id, name: app.name }], queryFn: async () => { const response = await fetch(`/api/modules/ping?url=${encodeURI(app.url)}`); - const isOk = app.network.okStatus.includes(response.status); + const isOk = app.network.statusCodes.includes(response.status.toString()); return { status: response.status, state: isOk ? 'online' : 'down', @@ -60,5 +60,3 @@ export const AppPing = ({ app }: AppPingProps) => { ); }; - -type PingState = 'loading' | 'down' | 'online'; diff --git a/src/types/app.ts b/src/types/app.ts index 2e611c031..ca933d2d4 100644 --- a/src/types/app.ts +++ b/src/types/app.ts @@ -23,7 +23,7 @@ interface AppBehaviourType { interface AppNetworkType { enabledStatusChecker: boolean; - okStatus: number[]; + statusCodes: string[]; } interface AppAppearanceType { From 46938db8f3f36ac00a205699821b94e0d4f70618 Mon Sep 17 00:00:00 2001 From: ajnart Date: Thu, 2 Mar 2023 20:04:25 +0900 Subject: [PATCH 07/98] Show the toggle conditionally The toggle button should only show if the environment variable is defined --- .env | 1 + src/components/layout/header/SettingsMenu.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 000000000..c22045117 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +DISABLE_EDIT_MODE=TRUE diff --git a/src/components/layout/header/SettingsMenu.tsx b/src/components/layout/header/SettingsMenu.tsx index 91d04a2fd..8e44d0e2e 100644 --- a/src/components/layout/header/SettingsMenu.tsx +++ b/src/components/layout/header/SettingsMenu.tsx @@ -26,7 +26,7 @@ export function SettingsMenu({ newVersionAvailable }: { newVersionAvailable: str - + {process.env.EDIT_MODE_PASSWORD !== undefined && } {!editModeEnabled && ( } onClick={drawer.open}> From 402f05f265a0df1d45c08a4dc3978ce69f9f04a5 Mon Sep 17 00:00:00 2001 From: ajnart Date: Thu, 2 Mar 2023 20:04:58 +0900 Subject: [PATCH 08/98] =?UTF-8?q?=F0=9F=94=A5=20Delete=20.env?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .env diff --git a/.env b/.env deleted file mode 100644 index c22045117..000000000 --- a/.env +++ /dev/null @@ -1 +0,0 @@ -DISABLE_EDIT_MODE=TRUE From ab212e36d0b7d73990f7905a512ccf72c9d1e169 Mon Sep 17 00:00:00 2001 From: ajnart Date: Thu, 2 Mar 2023 20:05:27 +0900 Subject: [PATCH 09/98] =?UTF-8?q?=F0=9F=99=88=20add=20.env=20file=20to=20g?= =?UTF-8?q?itignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 92b9ea013..1b7d1e587 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,7 @@ data/configs !.yarn/plugins !.yarn/releases !.yarn/sdks -!.yarn/versions \ No newline at end of file +!.yarn/versions + +#envfiles +.env \ No newline at end of file From 5c183e83f32c14cb3c6c56fd83364377a3d981ca Mon Sep 17 00:00:00 2001 From: ajnart Date: Thu, 2 Mar 2023 20:11:52 +0900 Subject: [PATCH 10/98] =?UTF-8?q?=F0=9F=90=9B=20Fix=20defaultValue=20crash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modals/EditAppModal/Tabs/NetworkTab/NetworkTab.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/NetworkTab/NetworkTab.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/NetworkTab/NetworkTab.tsx index 6b3cc6a81..2701639fd 100644 --- a/src/components/Dashboard/Modals/EditAppModal/Tabs/NetworkTab/NetworkTab.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/NetworkTab/NetworkTab.tsx @@ -10,6 +10,9 @@ interface NetworkTabProps { export const NetworkTab = ({ form }: NetworkTabProps) => { const { t } = useTranslation('layout/modals/add-app'); + const acceptableStatusCodes = (form.values.network.statusCodes ?? ['200']).map((x) => + x.toString() + ); return ( { data={StatusCodes} clearable searchable - defaultValue={form.values.network.okStatus.map((x) => `${x}`)} + defaultValue={acceptableStatusCodes} variant="default" {...form.getInputProps('network.statusCodes')} /> From faf5d11900d76bcfc3de344b3c78bb5b215853f6 Mon Sep 17 00:00:00 2001 From: ajnart Date: Thu, 2 Mar 2023 20:32:41 +0900 Subject: [PATCH 11/98] =?UTF-8?q?=F0=9F=92=9A=20Fix=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Overview/AvailableElementsOverview.tsx | 2 +- src/modules/Docker/ContainerActionBar.tsx | 2 +- src/tools/config/migrateConfig.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Dashboard/Modals/SelectElement/Components/Overview/AvailableElementsOverview.tsx b/src/components/Dashboard/Modals/SelectElement/Components/Overview/AvailableElementsOverview.tsx index d746ae334..0ec7e091d 100644 --- a/src/components/Dashboard/Modals/SelectElement/Components/Overview/AvailableElementsOverview.tsx +++ b/src/components/Dashboard/Modals/SelectElement/Components/Overview/AvailableElementsOverview.tsx @@ -95,7 +95,7 @@ export const AvailableElementTypes = ({ }, network: { enabledStatusChecker: true, - okStatus: [200], + statusCodes: ['200'], }, behaviour: { isOpeningNewTab: true, diff --git a/src/modules/Docker/ContainerActionBar.tsx b/src/modules/Docker/ContainerActionBar.tsx index 3b8943908..427b877ea 100644 --- a/src/modules/Docker/ContainerActionBar.tsx +++ b/src/modules/Docker/ContainerActionBar.tsx @@ -177,7 +177,7 @@ export default function ContainerActionBar({ selected, reload }: ContainerAction }, network: { enabledStatusChecker: true, - okStatus: [200], + statusCodes: ['200'], }, behaviour: { isOpeningNewTab: true, diff --git a/src/tools/config/migrateConfig.ts b/src/tools/config/migrateConfig.ts index 7e8586524..f83734a57 100644 --- a/src/tools/config/migrateConfig.ts +++ b/src/tools/config/migrateConfig.ts @@ -159,7 +159,7 @@ const migrateService = (oldService: serviceItem, areaType: AreaType): ConfigAppT }, network: { enabledStatusChecker: oldService.ping ?? true, - okStatus: oldService.status?.map((str) => parseInt(str, 10)) ?? [200], + statusCodes: oldService.status ?? ['200'], }, appearance: { iconUrl: migrateIcon(oldService.icon), From caa625c3ec82765b6666197a47c98238d31ed5b2 Mon Sep 17 00:00:00 2001 From: ajnart Date: Thu, 2 Mar 2023 20:44:52 +0900 Subject: [PATCH 12/98] Disable show the toggle conditionally --- src/components/layout/header/SettingsMenu.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/layout/header/SettingsMenu.tsx b/src/components/layout/header/SettingsMenu.tsx index 8e44d0e2e..91d04a2fd 100644 --- a/src/components/layout/header/SettingsMenu.tsx +++ b/src/components/layout/header/SettingsMenu.tsx @@ -26,7 +26,7 @@ export function SettingsMenu({ newVersionAvailable }: { newVersionAvailable: str - {process.env.EDIT_MODE_PASSWORD !== undefined && } + {!editModeEnabled && ( } onClick={drawer.open}> From 5dae500ac3139d97df6fc21f83294b770420b762 Mon Sep 17 00:00:00 2001 From: ajnart Date: Fri, 3 Mar 2023 00:37:22 +0900 Subject: [PATCH 13/98] =?UTF-8?q?=F0=9F=9A=A7=20=20WIP=20on=20Mantine=20V6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 18 +- src/components/Config/ConfigChanger.tsx | 7 +- .../Dashboard/Tiles/Apps/AppTile.tsx | 10 +- .../Dashboard/Wrappers/gridstack/store.tsx | 6 +- .../Settings/Common/CommonSettings.tsx | 2 +- .../SearchEngine/SearchEngineSelector.tsx | 1 + .../Customization/CustomizationSettings.tsx | 2 +- src/components/Settings/SettingsDrawer.tsx | 2 +- src/components/layout/header/Search.tsx | 3 +- src/config/provider.tsx | 4 +- src/constants/constants.ts | 1 + src/modules/Docker/ContainerActionBar.tsx | 2 +- src/modules/Docker/ContainerState.tsx | 4 +- src/modules/Docker/DockerModule.tsx | 7 +- src/modules/Docker/DockerTable.tsx | 2 +- src/modules/overseerr/RequestModal.tsx | 2 +- src/pages/404.tsx | 4 +- src/pages/_app.tsx | 31 ++- src/pages/login.tsx | 2 +- src/pages/migrate.tsx | 4 +- src/widgets/calendar/CalendarDay.tsx | 4 +- src/widgets/calendar/CalendarTile.tsx | 30 +-- src/widgets/dashDot/DashDotGraph.tsx | 8 +- src/widgets/dashDot/DashDotTile.tsx | 2 +- src/widgets/torrent/TorrentQueueItem.tsx | 8 +- src/widgets/torrent/TorrentTile.tsx | 2 +- src/widgets/useNet/UseNetTile.tsx | 2 +- src/widgets/useNet/UsenetHistoryList.tsx | 2 +- src/widgets/useNet/UsenetQueueList.tsx | 4 +- yarn.lock | 255 +++++++++++++----- 30 files changed, 275 insertions(+), 156 deletions(-) create mode 100644 src/constants/constants.ts diff --git a/package.json b/package.json index c398dc5cc..5a934f618 100644 --- a/package.json +++ b/package.json @@ -27,17 +27,17 @@ "@ctrl/qbittorrent": "^4.1.0", "@ctrl/shared-torrent": "^4.1.1", "@ctrl/transmission": "^4.1.1", - "@emotion/react": "^11.10.5", + "@emotion/react": "^11.10.6", "@emotion/server": "^11.10.0", "@jellyfin/sdk": "^0.7.0", - "@mantine/core": "^5.9.3", - "@mantine/dates": "^5.9.3", - "@mantine/dropzone": "^5.9.3", - "@mantine/form": "^5.9.3", - "@mantine/hooks": "^5.9.3", - "@mantine/modals": "^5.9.3", - "@mantine/next": "^5.9.3", - "@mantine/notifications": "^5.9.3", + "@mantine/core": "^6.0.0", + "@mantine/dates": "^6.0.0", + "@mantine/dropzone": "^6.0.0", + "@mantine/form": "^6.0.0", + "@mantine/hooks": "^6.0.0", + "@mantine/modals": "^6.0.0", + "@mantine/next": "^6.0.0", + "@mantine/notifications": "^6.0.0", "@nivo/core": "^0.80.0", "@nivo/line": "^0.80.0", "@tabler/icons": "^1.106.0", diff --git a/src/components/Config/ConfigChanger.tsx b/src/components/Config/ConfigChanger.tsx index faa60f1f0..640c9a386 100644 --- a/src/components/Config/ConfigChanger.tsx +++ b/src/components/Config/ConfigChanger.tsx @@ -57,7 +57,12 @@ export default function ConfigChanger() { size="lg" radius="md" > - + {t('configSelect.pleaseWait')} diff --git a/src/components/Dashboard/Tiles/Apps/AppTile.tsx b/src/components/Dashboard/Tiles/Apps/AppTile.tsx index 1c9edd328..83989478a 100644 --- a/src/components/Dashboard/Tiles/Apps/AppTile.tsx +++ b/src/components/Dashboard/Tiles/Apps/AppTile.tsx @@ -36,7 +36,13 @@ export const AppTile = ({ className, app }: AppTileProps) => { className="dashboard-tile-app" > @@ -87,12 +93,10 @@ export const AppTile = ({ className, app }: AppTileProps) => { const useStyles = createStyles((theme, _params, getRef) => ({ image: { - ref: getRef('image'), maxHeight: '90%', maxWidth: '90%', }, appName: { - ref: getRef('appName'), wordBreak: 'break-word', }, button: { diff --git a/src/components/Dashboard/Wrappers/gridstack/store.tsx b/src/components/Dashboard/Wrappers/gridstack/store.tsx index 52a965bfd..483d8abb7 100644 --- a/src/components/Dashboard/Wrappers/gridstack/store.tsx +++ b/src/components/Dashboard/Wrappers/gridstack/store.tsx @@ -18,12 +18,12 @@ interface GridstackStoreType { export const useNamedWrapperColumnCount = (): 'small' | 'medium' | 'large' | null => { const mainAreaWidth = useGridstackStore((x) => x.mainAreaWidth); - const { sm, xl } = useMantineTheme().breakpoints; if (!mainAreaWidth) return null; - if (mainAreaWidth >= xl) return 'large'; + // TODO: Calculate rem to pixels using Calc function + if (mainAreaWidth >= 1400) return 'large'; - if (mainAreaWidth >= sm) return 'medium'; + if (mainAreaWidth >= 800) return 'medium'; return 'small'; }; diff --git a/src/components/Settings/Common/CommonSettings.tsx b/src/components/Settings/Common/CommonSettings.tsx index e404bd9bb..9d99df8a7 100644 --- a/src/components/Settings/Common/CommonSettings.tsx +++ b/src/components/Settings/Common/CommonSettings.tsx @@ -18,7 +18,7 @@ export default function CommonSettings() { ); } return ( - + diff --git a/src/components/Settings/Common/SearchEngine/SearchEngineSelector.tsx b/src/components/Settings/Common/SearchEngine/SearchEngineSelector.tsx index c001184e2..53d643004 100644 --- a/src/components/Settings/Common/SearchEngine/SearchEngineSelector.tsx +++ b/src/components/Settings/Common/SearchEngine/SearchEngineSelector.tsx @@ -60,6 +60,7 @@ export const SearchEngineSelector = ({ searchEngine }: Props) => { + {t('text')} diff --git a/src/components/Settings/SettingsDrawer.tsx b/src/components/Settings/SettingsDrawer.tsx index ab8a792b7..be7aabc71 100644 --- a/src/components/Settings/SettingsDrawer.tsx +++ b/src/components/Settings/SettingsDrawer.tsx @@ -41,7 +41,7 @@ export function SettingsDrawer({ return ( {t('title')}} diff --git a/src/components/layout/header/Search.tsx b/src/components/layout/header/Search.tsx index a4a1dc70a..714509b62 100644 --- a/src/components/layout/header/Search.tsx +++ b/src/components/layout/header/Search.tsx @@ -181,7 +181,6 @@ export function Search() { shadow="md" radius="md" zIndex={100} - transition="pop-top-right" > {item.icon}, diff --git a/src/config/provider.tsx b/src/config/provider.tsx index 3559287d9..3f9a52704 100644 --- a/src/config/provider.tsx +++ b/src/config/provider.tsx @@ -16,8 +16,8 @@ const ConfigContext = createContext({ name: 'unknown', config: undefined, configVersion: undefined, - increaseVersion: () => console.error('Provider not set'), - setConfigName: () => console.error('Provider not set'), + increaseVersion: () => {}, + setConfigName: () => {}, }); export const ConfigProvider = ({ children }: { children: ReactNode }) => { diff --git a/src/constants/constants.ts b/src/constants/constants.ts new file mode 100644 index 000000000..41410816d --- /dev/null +++ b/src/constants/constants.ts @@ -0,0 +1 @@ +export const MIN_WIDTH_MOBILE = 500; diff --git a/src/modules/Docker/ContainerActionBar.tsx b/src/modules/Docker/ContainerActionBar.tsx index 3b8943908..c379546c0 100644 --- a/src/modules/Docker/ContainerActionBar.tsx +++ b/src/modules/Docker/ContainerActionBar.tsx @@ -35,7 +35,7 @@ function sendDockerCommand( title: `${t(`actions.${action}.start`)} ${containerName}`, message: undefined, autoClose: false, - disallowClose: true, + withCloseButton: false, }); axios .get(`/api/docker/container/${containerId}?action=${action}`) diff --git a/src/modules/Docker/ContainerState.tsx b/src/modules/Docker/ContainerState.tsx index d124f9f44..667f62f61 100644 --- a/src/modules/Docker/ContainerState.tsx +++ b/src/modules/Docker/ContainerState.tsx @@ -1,4 +1,4 @@ -import { Badge, BadgeVariant, MantineSize } from '@mantine/core'; +import { Badge, BadgeProps, MantineSize } from '@mantine/core'; import { useTranslation } from 'next-i18next'; import Dockerode from 'dockerode'; @@ -14,7 +14,7 @@ export default function ContainerState(props: ContainerStateProps) { const options: { size: MantineSize; radius: MantineSize; - variant: BadgeVariant; + variant: BadgeProps['variant']; } = { size: 'md', radius: 'md', diff --git a/src/modules/Docker/DockerModule.tsx b/src/modules/Docker/DockerModule.tsx index 91de2247b..5f9dc38e5 100644 --- a/src/modules/Docker/DockerModule.tsx +++ b/src/modules/Docker/DockerModule.tsx @@ -66,10 +66,13 @@ export default function DockerMenuButton(props: any) { onClose={() => setOpened(false)} padding="xl" position="right" - size="full" + size="100%" title={} + transitionProps={{ + transition: 'pop', + }} styles={{ - drawer: { + content: { display: 'flex', flexDirection: 'column', }, diff --git a/src/modules/Docker/DockerTable.tsx b/src/modules/Docker/DockerTable.tsx index b2ba3c3c2..a0fa32f73 100644 --- a/src/modules/Docker/DockerTable.tsx +++ b/src/modules/Docker/DockerTable.tsx @@ -14,6 +14,7 @@ import { IconSearch } from '@tabler/icons'; import Dockerode from 'dockerode'; import { useTranslation } from 'next-i18next'; import { useEffect, useState } from 'react'; +import { MIN_WIDTH_MOBILE } from '../../constants/constants'; import ContainerState from './ContainerState'; const useStyles = createStyles((theme) => ({ @@ -34,7 +35,6 @@ export default function DockerTable({ containers: Dockerode.ContainerInfo[]; selection: Dockerode.ContainerInfo[]; }) { - const MIN_WIDTH_MOBILE = useMantineTheme().breakpoints.xs; const [usedContainers, setContainers] = useState(containers); const { classes, cx } = useStyles(); const [search, setSearch] = useState(''); diff --git a/src/modules/overseerr/RequestModal.tsx b/src/modules/overseerr/RequestModal.tsx index 93e6e4920..c58bc4174 100644 --- a/src/modules/overseerr/RequestModal.tsx +++ b/src/modules/overseerr/RequestModal.tsx @@ -221,7 +221,7 @@ function askForMedia(type: MediaType, id: number, name: string, seasons?: number color: 'orange', loading: true, autoClose: false, - disallowClose: true, + withCloseButton: false, icon: , }); axios diff --git a/src/pages/404.tsx b/src/pages/404.tsx index aadf66175..eebe020eb 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -55,8 +55,8 @@ const useStyles = createStyles((theme) => ({ description: { maxWidth: 540, margin: 'auto', - marginTop: theme.spacing.xl, - marginBottom: theme.spacing.xl * 1.5, + marginTop: parseInt(theme.spacing.xl, 10), + marginBottom: `calc(${theme.spacing.xl} * 1.5)`, }, })); diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index e55dd6bef..693efa28c 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -2,7 +2,6 @@ import { ColorScheme, ColorSchemeProvider, MantineProvider, MantineTheme } from import { useColorScheme, useHotkeys, useLocalStorage } from '@mantine/hooks'; import { ModalsProvider } from '@mantine/modals'; import Consola from 'consola'; -import { NotificationsProvider } from '@mantine/notifications'; import { QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { getCookie } from 'cookies-next'; @@ -11,6 +10,7 @@ import { appWithTranslation } from 'next-i18next'; import { AppProps } from 'next/app'; import Head from 'next/head'; import { useEffect, useState } from 'react'; +import { Notifications } from '@mantine/notifications'; import 'video.js/dist/video-js.css'; import { ChangeAppPositionModal } from '../components/Dashboard/Modals/ChangePosition/ChangeAppPositionModal'; import { ChangeWidgetPositionModal } from '../components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal'; @@ -111,21 +111,20 @@ function App( withNormalizeCSS > - - - - - + + + + diff --git a/src/pages/login.tsx b/src/pages/login.tsx index bf414ed83..193a558ab 100644 --- a/src/pages/login.tsx +++ b/src/pages/login.tsx @@ -62,7 +62,7 @@ export default function AuthenticationTitle() { title: t('notifications.checking.title'), message: t('notifications.checking.message'), autoClose: false, - disallowClose: true, + withCloseButton: false, }); axios .post('/api/configs/tryPassword', { diff --git a/src/pages/migrate.tsx b/src/pages/migrate.tsx index 428e7e564..ee73caa7f 100644 --- a/src/pages/migrate.tsx +++ b/src/pages/migrate.tsx @@ -56,7 +56,7 @@ const useStyles = createStyles((theme) => ({ fontWeight: 900, fontSize: 110, lineHeight: 1, - marginBottom: theme.spacing.xl * 1.5, + marginBottom: `calc(${theme.spacing.xl} * 1.5)`, [theme.fn.smallerThan('sm')]: { fontSize: 60, @@ -90,7 +90,7 @@ const useStyles = createStyles((theme) => ({ maxWidth: 700, margin: 'auto', marginTop: theme.spacing.xl, - marginBottom: theme.spacing.xl * 1.5, + marginBottom: `calc(${theme.spacing.xl} * 1.5)`, }, })); diff --git a/src/widgets/calendar/CalendarDay.tsx b/src/widgets/calendar/CalendarDay.tsx index c8ddc2f9d..e3920db8a 100644 --- a/src/widgets/calendar/CalendarDay.tsx +++ b/src/widgets/calendar/CalendarDay.tsx @@ -22,7 +22,9 @@ export const CalendarDay = ({ date, medias }: CalendarDayProps) => { withinPortal radius="lg" shadow="sm" - transition="pop" + transitionProps={{ + transition: 'pop', + }} onClose={close} opened={opened} > diff --git a/src/widgets/calendar/CalendarTile.tsx b/src/widgets/calendar/CalendarTile.tsx index edd4b6672..7068231dc 100644 --- a/src/widgets/calendar/CalendarTile.tsx +++ b/src/widgets/calendar/CalendarTile.tsx @@ -74,26 +74,25 @@ function CalendarTile({ widget }: CalendarTileProps) { {}} - firstDayOfWeek={widget.properties.sundayStart ? 'sunday' : 'monday'} - dayStyle={(date) => ({ - margin: -1, - backgroundColor: isToday(date) - ? colorScheme === 'dark' - ? colors.dark[5] - : colors.gray[0] - : undefined, - })} + firstDayOfWeek={widget.properties.sundayStart ? 0 : 1} hideWeekdays styles={{ - weekdayCell: { + day: { + margin: -1, + backgroundColor: isToday(new Date()) + ? colorScheme === 'dark' + ? colors.dark[5] + : colors.gray[0] + : undefined, + }, + weekday: { margin: 0, padding: 0, }, @@ -103,8 +102,7 @@ function CalendarTile({ widget }: CalendarTileProps) { padding: 0, }, }} - allowLevelChange={false} - dayClassName={(_, modifiers) => cx({ [classes.weekend]: modifiers.weekend })} + hasNextLevel={false} renderDay={(date) => ( )} diff --git a/src/widgets/dashDot/DashDotGraph.tsx b/src/widgets/dashDot/DashDotGraph.tsx index 6977005cd..dd9fda585 100644 --- a/src/widgets/dashDot/DashDotGraph.tsx +++ b/src/widgets/dashDot/DashDotGraph.tsx @@ -1,4 +1,4 @@ -import { createStyles, Title, useMantineTheme } from '@mantine/core'; +import { createStyles, Title, useMantineTheme, getStylesRef } from '@mantine/core'; import { useTranslation } from 'next-i18next'; import { DashDotCompactNetwork, DashDotInfo } from './DashDotCompactNetwork'; import { DashDotCompactStorage } from './DashDotCompactStorage'; @@ -77,7 +77,7 @@ const useIframeSrc = ( ); }; -export const useStyles = createStyles((theme, _params, getRef) => ({ +export const useStyles = createStyles((theme, _params) => ({ iframe: { flex: '1 0 auto', maxWidth: '100%', @@ -87,7 +87,7 @@ export const useStyles = createStyles((theme, _params, getRef) => ({ colorScheme: 'light', // fixes white borders around iframe }, graphTitle: { - ref: getRef('graphTitle'), + ref: getStylesRef('graphTitle'), position: 'absolute', right: 0, bottom: 0, @@ -99,7 +99,7 @@ export const useStyles = createStyles((theme, _params, getRef) => ({ }, graphContainer: { position: 'relative', - [`&:hover .${getRef('graphTitle')}`]: { + [`&:hover .${getStylesRef('graphTitle')}`]: { opacity: 0.5, }, }, diff --git a/src/widgets/dashDot/DashDotTile.tsx b/src/widgets/dashDot/DashDotTile.tsx index 522c555c3..33bdf820d 100644 --- a/src/widgets/dashDot/DashDotTile.tsx +++ b/src/widgets/dashDot/DashDotTile.tsx @@ -232,7 +232,7 @@ const fetchDashDotInfo = async (configName: string | undefined) => { export const useDashDotTileStyles = createStyles((theme) => ({ graphsContainer: { - marginRight: theme.spacing.sm * -1, // fix because margin collapses weirdly + marginRight: `calc(${theme.spacing.sm} * -1)`, }, })); diff --git a/src/widgets/torrent/TorrentQueueItem.tsx b/src/widgets/torrent/TorrentQueueItem.tsx index 6d7afd891..c416252b6 100644 --- a/src/widgets/torrent/TorrentQueueItem.tsx +++ b/src/widgets/torrent/TorrentQueueItem.tsx @@ -35,7 +35,7 @@ interface TorrentQueueItemProps { export const BitTorrrentQueueItem = ({ torrent, app }: TorrentQueueItemProps) => { const [popoverOpened, { open: openPopover, close: closePopover }] = useDisclosure(false); - const MIN_WIDTH_MOBILE = useMantineTheme().breakpoints.xs; + const theme = useMantineTheme(); const { width } = useElementSize(); const { t } = useTranslation('modules/torrents-status'); @@ -75,17 +75,17 @@ export const BitTorrrentQueueItem = ({ torrent, app }: TorrentQueueItemProps) => {humanFileSize(size, false)} - {width > MIN_WIDTH_MOBILE && ( + {theme.fn.largerThan('xs') && ( {downloadSpeed > 0 ? `${downloadSpeed.toFixed(1)} Mb/s` : '-'} )} - {width > MIN_WIDTH_MOBILE && ( + {theme.fn.largerThan('xs') && ( {uploadSpeed > 0 ? `${uploadSpeed.toFixed(1)} Mb/s` : '-'} )} - {width > MIN_WIDTH_MOBILE && ( + {theme.fn.largerThan('xs') && ( {torrent.eta <= 0 ? '∞' : calculateETA(torrent.eta)} diff --git a/src/widgets/torrent/TorrentTile.tsx b/src/widgets/torrent/TorrentTile.tsx index eaf7c8ee9..40c4db175 100644 --- a/src/widgets/torrent/TorrentTile.tsx +++ b/src/widgets/torrent/TorrentTile.tsx @@ -17,6 +17,7 @@ import dayjs from 'dayjs'; import duration from 'dayjs/plugin/duration'; import relativeTime from 'dayjs/plugin/relativeTime'; import { useTranslation } from 'next-i18next'; +import { MIN_WIDTH_MOBILE } from '../../constants/constants'; import { useGetDownloadClientsQueue } from '../../hooks/widgets/download-speed/useGetNetworkSpeed'; import { NormalizedDownloadQueueResponse } from '../../types/api/downloads/queue/NormalizedDownloadQueueResponse'; import { AppIntegrationType } from '../../types/app'; @@ -59,7 +60,6 @@ interface TorrentTileProps { function TorrentTile({ widget }: TorrentTileProps) { const { t } = useTranslation('modules/torrents-status'); - const MIN_WIDTH_MOBILE = useMantineTheme().breakpoints.xs; const { width } = useElementSize(); const { diff --git a/src/widgets/useNet/UseNetTile.tsx b/src/widgets/useNet/UseNetTile.tsx index 832b8d2d7..e2d218567 100644 --- a/src/widgets/useNet/UseNetTile.tsx +++ b/src/widgets/useNet/UseNetTile.tsx @@ -28,6 +28,7 @@ import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; import { UsenetHistoryList } from './UsenetHistoryList'; import { UsenetQueueList } from './UsenetQueueList'; +import { MIN_WIDTH_MOBILE } from '../../constants/constants'; dayjs.extend(duration); @@ -59,7 +60,6 @@ function UseNetTile({ widget }: UseNetTileProps) { config?.apps.filter((x) => x.integration && downloadAppTypes.includes(x.integration.type)) ?? []; const { ref, width, height } = useElementSize(); - const MIN_WIDTH_MOBILE = useMantineTheme().breakpoints.xs; const [selectedAppId, setSelectedApp] = useState(downloadApps[0]?.id); const { data } = useGetUsenetInfo({ appId: selectedAppId! }); diff --git a/src/widgets/useNet/UsenetHistoryList.tsx b/src/widgets/useNet/UsenetHistoryList.tsx index 2578fdec6..6d2dbdae5 100644 --- a/src/widgets/useNet/UsenetHistoryList.tsx +++ b/src/widgets/useNet/UsenetHistoryList.tsx @@ -128,7 +128,7 @@ export const UsenetHistoryList: FunctionComponent = ({ a position="center" mt="md" total={totalPages} - page={page} + value={page} onChange={setPage} /> )} diff --git a/src/widgets/useNet/UsenetQueueList.tsx b/src/widgets/useNet/UsenetQueueList.tsx index aa3dc99e6..52e797ff5 100644 --- a/src/widgets/useNet/UsenetQueueList.tsx +++ b/src/widgets/useNet/UsenetQueueList.tsx @@ -35,7 +35,7 @@ const PAGE_SIZE = 13; export const UsenetQueueList: FunctionComponent = ({ appId }) => { const theme = useMantineTheme(); const { t } = useTranslation('modules/usenet'); - const progressbarBreakpoint = theme.breakpoints.xs; + const progressbarBreakpoint = parseInt(theme.breakpoints.xs, 10); const progressBreakpoint = 400; const sizeBreakpoint = 300; const { ref, width } = useElementSize(); @@ -177,7 +177,7 @@ export const UsenetQueueList: FunctionComponent = ({ appId size="sm" position="center" total={totalPages} - page={page} + value={page} onChange={setPage} /> )} diff --git a/yarn.lock b/yarn.lock index 2d3338ba5..a0074f10a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -558,7 +558,7 @@ __metadata: languageName: node linkType: hard -"@emotion/react@npm:^11.10.5": +"@emotion/react@npm:^11.10.6": version: 11.10.6 resolution: "@emotion/react@npm:11.10.6" dependencies: @@ -1050,134 +1050,135 @@ __metadata: languageName: node linkType: hard -"@mantine/core@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/core@npm:5.10.4" +"@mantine/core@npm:^6.0.0": + version: 6.0.0 + resolution: "@mantine/core@npm:6.0.0" dependencies: "@floating-ui/react": ^0.19.1 - "@mantine/styles": 5.10.4 - "@mantine/utils": 5.10.4 + "@mantine/styles": 6.0.0 + "@mantine/utils": 6.0.0 "@radix-ui/react-scroll-area": 1.0.2 + react-remove-scroll: ^2.5.5 react-textarea-autosize: 8.3.4 peerDependencies: - "@mantine/hooks": 5.10.4 + "@mantine/hooks": 6.0.0 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 98cba720fa9764a7a45b13d167ad2dce1af1b639c202a25cf60c8ca439e386dfddefae262e770df62348af90647ba6cbc095c074a8f0582968059450fbbc2ff0 + checksum: 7a93ea2879b46dbead97599639d7ef922869ce9b2721d88874a2d625bbe702479618e7ab54ddeb30cdd576bfe5897e204c2af017f8e84d21617e976f016dff74 languageName: node linkType: hard -"@mantine/dates@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/dates@npm:5.10.4" +"@mantine/dates@npm:^6.0.0": + version: 6.0.0 + resolution: "@mantine/dates@npm:6.0.0" dependencies: - "@mantine/utils": 5.10.4 + "@mantine/utils": 6.0.0 peerDependencies: - "@mantine/core": 5.10.4 - "@mantine/hooks": 5.10.4 + "@mantine/core": 6.0.0 + "@mantine/hooks": 6.0.0 dayjs: ">=1.0.0" react: ">=16.8.0" - checksum: 14a32aa4c16e030266629dfc5171e930d271682de742541b2298d448df11c9fab40e1d8003eabccfd5449a65ef14681993af6426197da4dcad1f509fb9fff932 + checksum: 320733cb0739605dcd6b67726e030bc881a6d298ccd2f20683938155bee558a2f6a2bf15e194d5fa7218c82f74a90aa3858d051348b22e04904ac78ee6b88340 languageName: node linkType: hard -"@mantine/dropzone@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/dropzone@npm:5.10.4" +"@mantine/dropzone@npm:^6.0.0": + version: 6.0.0 + resolution: "@mantine/dropzone@npm:6.0.0" dependencies: - "@mantine/utils": 5.10.4 + "@mantine/utils": 6.0.0 react-dropzone: 14.2.3 peerDependencies: - "@mantine/core": 5.10.4 - "@mantine/hooks": 5.10.4 + "@mantine/core": 6.0.0 + "@mantine/hooks": 6.0.0 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 0b837b5bc7c982ad9832142c880c1b0f2827de5c2163b76895cac2dbe6204f7c67e466468a3fb00f72482bad957c4b1209820025c4dfc2c25650734df79e208b + checksum: a0956160d7ad94938cab3cb86d650a9edce2ff51f204ca07b3d7b7046acb905f246bddc2cea6622beb2b2cf73c8de042b2f9ed3022b2649a868a2dd73ee26045 languageName: node linkType: hard -"@mantine/form@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/form@npm:5.10.4" +"@mantine/form@npm:^6.0.0": + version: 6.0.0 + resolution: "@mantine/form@npm:6.0.0" dependencies: fast-deep-equal: ^3.1.3 klona: ^2.0.5 peerDependencies: react: ">=16.8.0" - checksum: 00ebc0011981f8dae5e96e833f7e0102067a7bc38b1f6208b377f029fdc8bb703a492f40a688eb015dea3147c3b6e5a7cd26c584b93cc8d2567f0dcb10319759 + checksum: a992fb860d4493b7c68a4f5464f6577b1a9c3ef2d68eee07199c133e771c1d2ae64e831a1290f3b8f277da22f3bd20f350beafbd7b7eded8ab897a0027958038 languageName: node linkType: hard -"@mantine/hooks@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/hooks@npm:5.10.4" +"@mantine/hooks@npm:^6.0.0": + version: 6.0.0 + resolution: "@mantine/hooks@npm:6.0.0" peerDependencies: react: ">=16.8.0" - checksum: 41ededb62ea9311303e4b8d577ec21c12ddb339e60e70c3a1f561cb1b2c66fb6e6f29a7a23a89322748779cc06797de749203afd546f2b13180781c0e2873fa6 + checksum: becb583cd29ca90871195ea6fb21d118f17ae05f63aa91e932c93621dc879d0c8851f9a3102cb56deb77bc2a8aac2409a9e2685d5b4b8e1a9a7ecc3c5e601da1 languageName: node linkType: hard -"@mantine/modals@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/modals@npm:5.10.4" +"@mantine/modals@npm:^6.0.0": + version: 6.0.0 + resolution: "@mantine/modals@npm:6.0.0" dependencies: - "@mantine/utils": 5.10.4 + "@mantine/utils": 6.0.0 peerDependencies: - "@mantine/core": 5.10.4 - "@mantine/hooks": 5.10.4 + "@mantine/core": 6.0.0 + "@mantine/hooks": 6.0.0 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 82fce48fffbbce11526212b994e2763f0b36a276a86385f5b9ac1b5f1226f39f3f12aa171fe8b9181b755f95dbb869ef88f339e620bfd0ec28b7b0017f6b7fa7 + checksum: 23e0348821294eceab8e70fa6eb46902b6f8cb3acddd7ec6354a3636a878100a0bdcc36eb38d86e315ca4a148bc77afacb4206bcbee5b77639d9f0785d4f5260 languageName: node linkType: hard -"@mantine/next@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/next@npm:5.10.4" +"@mantine/next@npm:^6.0.0": + version: 6.0.0 + resolution: "@mantine/next@npm:6.0.0" dependencies: - "@mantine/ssr": 5.10.4 - "@mantine/styles": 5.10.4 + "@mantine/ssr": 6.0.0 + "@mantine/styles": 6.0.0 peerDependencies: next: "*" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 344590d09cfef4194187f7ea430082d9f22379e264b04fa3a9261a137abf9b1e4681eb7c610b678822b2ad3001f5611e201a73a4612ee8b13d93460d68a28b0c + checksum: 05d5a66fcdb130e4f97b787477feaf76db06a32d45794af7104563b1928cac755b9be52dfd23e778b9e847b8d2f38a064423f01f5192570d90121d4743c40b1b languageName: node linkType: hard -"@mantine/notifications@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/notifications@npm:5.10.4" +"@mantine/notifications@npm:^6.0.0": + version: 6.0.0 + resolution: "@mantine/notifications@npm:6.0.0" dependencies: - "@mantine/utils": 5.10.4 + "@mantine/utils": 6.0.0 react-transition-group: 4.4.2 peerDependencies: - "@mantine/core": 5.10.4 - "@mantine/hooks": 5.10.4 + "@mantine/core": 6.0.0 + "@mantine/hooks": 6.0.0 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: da439698331f09dd1f3efaa470df1f9717f7309c2a61b0bfaa14bd832185fbd0711fbaffe867b0d6978108db30d059909b59c2b7c0ed83d1bd55bc8b7a6d3e7f + checksum: 3815227d8384be58f2d48507c4d6ee7133cf533a0a7377d8e010ee485ce8c87a8a2fbbe9e81d1f5c2f98d73154fd52444b3c4910a96b1bc908e9c46f511f579f languageName: node linkType: hard -"@mantine/ssr@npm:5.10.4": - version: 5.10.4 - resolution: "@mantine/ssr@npm:5.10.4" +"@mantine/ssr@npm:6.0.0": + version: 6.0.0 + resolution: "@mantine/ssr@npm:6.0.0" dependencies: - "@mantine/styles": 5.10.4 + "@mantine/styles": 6.0.0 html-react-parser: 1.4.12 peerDependencies: "@emotion/react": ">=11.9.0" "@emotion/server": ">=11.4.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 74e5c56b85ea731597aba876941086306abb5ae24faa86d37a5210cfd743aa164e97b29e547563f810ef92b51b3c90bd02ce1a39fbee84cbec2abd2e6ad45ca7 + checksum: eea337164c7d8afb0b2cf05531ed3448430e555eb567d64599d20cb1751f32fd3518ac490a45638396b512d313710b0a1a7c4bfcdbffbc02523f8fcb9128d2d1 languageName: node linkType: hard -"@mantine/styles@npm:5.10.4": - version: 5.10.4 - resolution: "@mantine/styles@npm:5.10.4" +"@mantine/styles@npm:6.0.0": + version: 6.0.0 + resolution: "@mantine/styles@npm:6.0.0" dependencies: clsx: 1.1.1 csstype: 3.0.9 @@ -1185,16 +1186,16 @@ __metadata: "@emotion/react": ">=11.9.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 54af835dca68a457be758570c82eab2d602da19a24da599b2f2c02f451be136a400b2f8efbbdc7d1a677188b57515d3ace23df0b8aa8e37c4ddf3a2fdbce1630 + checksum: c369d10719bab36b03cdfa6b46a495b767dcf76ea4f1f5d5f9e5596b52ef0f1b0c295c8cc854d12e9bb7778c9ff80f810a44a929dd9646638da783589fedbf73 languageName: node linkType: hard -"@mantine/utils@npm:5.10.4": - version: 5.10.4 - resolution: "@mantine/utils@npm:5.10.4" +"@mantine/utils@npm:6.0.0": + version: 6.0.0 + resolution: "@mantine/utils@npm:6.0.0" peerDependencies: react: ">=16.8.0" - checksum: 96e2602f8500c29b5979d4fe0b3456c8de911ff1bd2ef216d960b23a5370ff6828871aa859538a4004ad095fb63d7e0e76cdfb365bdb930f70f8076d730302c1 + checksum: a0f876ebb910ccebc6bbeedb093c14fe22c319d08d8504be6e6085f2e935f3aad8fc9cb1e0ede182c762a03a35e02618cf304ba3ba556a4ba3951945cf8cfc56 languageName: node linkType: hard @@ -3584,6 +3585,13 @@ __metadata: languageName: node linkType: hard +"detect-node-es@npm:^1.1.0": + version: 1.1.0 + resolution: "detect-node-es@npm:1.1.0" + checksum: e46307d7264644975b71c104b9f028ed1d3d34b83a15b8a22373640ce5ea630e5640b1078b8ea15f202b54641da71e4aa7597093bd4b91f113db520a26a37449 + languageName: node + linkType: hard + "diff-sequences@npm:^28.1.1": version: 28.1.1 resolution: "diff-sequences@npm:28.1.1" @@ -4638,6 +4646,13 @@ __metadata: languageName: node linkType: hard +"get-nonce@npm:^1.0.0": + version: 1.0.1 + resolution: "get-nonce@npm:1.0.1" + checksum: e2614e43b4694c78277bb61b0f04583d45786881289285c73770b07ded246a98be7e1f78b940c80cbe6f2b07f55f0b724e6db6fd6f1bcbd1e8bdac16521074ed + languageName: node + linkType: hard + "get-package-type@npm:^0.1.0": version: 0.1.0 resolution: "get-package-type@npm:0.1.0" @@ -4942,17 +4957,17 @@ __metadata: "@ctrl/qbittorrent": ^4.1.0 "@ctrl/shared-torrent": ^4.1.1 "@ctrl/transmission": ^4.1.1 - "@emotion/react": ^11.10.5 + "@emotion/react": ^11.10.6 "@emotion/server": ^11.10.0 "@jellyfin/sdk": ^0.7.0 - "@mantine/core": ^5.9.3 - "@mantine/dates": ^5.9.3 - "@mantine/dropzone": ^5.9.3 - "@mantine/form": ^5.9.3 - "@mantine/hooks": ^5.9.3 - "@mantine/modals": ^5.9.3 - "@mantine/next": ^5.9.3 - "@mantine/notifications": ^5.9.3 + "@mantine/core": ^6.0.0 + "@mantine/dates": ^6.0.0 + "@mantine/dropzone": ^6.0.0 + "@mantine/form": ^6.0.0 + "@mantine/hooks": ^6.0.0 + "@mantine/modals": ^6.0.0 + "@mantine/next": ^6.0.0 + "@mantine/notifications": ^6.0.0 "@next/bundle-analyzer": ^12.1.4 "@next/eslint-plugin-next": ^12.1.4 "@nivo/core": ^0.80.0 @@ -5287,6 +5302,15 @@ __metadata: languageName: node linkType: hard +"invariant@npm:^2.2.4": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: ^1.0.0 + checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + languageName: node + linkType: hard + "ip@npm:^2.0.0": version: 2.0.0 resolution: "ip@npm:2.0.0" @@ -6285,7 +6309,7 @@ __metadata: languageName: node linkType: hard -"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: @@ -7395,6 +7419,41 @@ __metadata: languageName: node linkType: hard +"react-remove-scroll-bar@npm:^2.3.3": + version: 2.3.4 + resolution: "react-remove-scroll-bar@npm:2.3.4" + dependencies: + react-style-singleton: ^2.2.1 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: b5ce5f2f98d65c97a3e975823ae4043a4ba2a3b63b5ba284b887e7853f051b5cd6afb74abde6d57b421931c52f2e1fdbb625dc858b1cb5a32c27c14ab85649d4 + languageName: node + linkType: hard + +"react-remove-scroll@npm:^2.5.5": + version: 2.5.5 + resolution: "react-remove-scroll@npm:2.5.5" + dependencies: + react-remove-scroll-bar: ^2.3.3 + react-style-singleton: ^2.2.1 + tslib: ^2.1.0 + use-callback-ref: ^1.3.0 + use-sidecar: ^1.1.2 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 2c7fe9cbd766f5e54beb4bec2e2efb2de3583037b23fef8fa511ab426ed7f1ae992382db5acd8ab5bfb030a4b93a06a2ebca41377d6eeaf0e6791bb0a59616a4 + languageName: node + linkType: hard + "react-simple-code-editor@npm:^0.13.1": version: 0.13.1 resolution: "react-simple-code-editor@npm:0.13.1" @@ -7405,6 +7464,23 @@ __metadata: languageName: node linkType: hard +"react-style-singleton@npm:^2.2.1": + version: 2.2.1 + resolution: "react-style-singleton@npm:2.2.1" + dependencies: + get-nonce: ^1.0.0 + invariant: ^2.2.4 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7ee8ef3aab74c7ae1d70ff34a27643d11ba1a8d62d072c767827d9ff9a520905223e567002e0bf6c772929d8ea1c781a3ba0cc4a563e92b1e3dc2eaa817ecbe8 + languageName: node + linkType: hard + "react-textarea-autosize@npm:8.3.4": version: 8.3.4 resolution: "react-textarea-autosize@npm:8.3.4" @@ -8345,7 +8421,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": +"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": version: 2.5.0 resolution: "tslib@npm:2.5.0" checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 @@ -8579,6 +8655,21 @@ __metadata: languageName: node linkType: hard +"use-callback-ref@npm:^1.3.0": + version: 1.3.0 + resolution: "use-callback-ref@npm:1.3.0" + dependencies: + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7913df383a5a6fcb399212eedefaac2e0c6f843555202d4e3010bac3848afe38ecaa3d0d6500ad1d936fbeffd637e6c517e68edb024af5e6beca7f27f3ce7b21 + languageName: node + linkType: hard + "use-composed-ref@npm:^1.3.0": version: 1.3.0 resolution: "use-composed-ref@npm:1.3.0" @@ -8614,6 +8705,22 @@ __metadata: languageName: node linkType: hard +"use-sidecar@npm:^1.1.2": + version: 1.1.2 + resolution: "use-sidecar@npm:1.1.2" + dependencies: + detect-node-es: ^1.1.0 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 925d1922f9853e516eaad526b6fed1be38008073067274f0ecc3f56b17bb8ab63480140dd7c271f94150027c996cea4efe83d3e3525e8f3eda22055f6a39220b + languageName: node + linkType: hard + "use-sync-external-store@npm:1.2.0, use-sync-external-store@npm:^1.2.0": version: 1.2.0 resolution: "use-sync-external-store@npm:1.2.0" From 387f155b294c96e4012b4014659628f1b32b5a11 Mon Sep 17 00:00:00 2001 From: ajnart Date: Fri, 3 Mar 2023 01:13:23 +0900 Subject: [PATCH 14/98] WIP on Mantine v6 --- src/hooks/useScreenLargerThan.ts | 2 +- src/pages/404.tsx | 2 +- src/widgets/calendar/CalendarDay.tsx | 16 ++++++++++++++-- src/widgets/calendar/CalendarTile.tsx | 24 +----------------------- 4 files changed, 17 insertions(+), 27 deletions(-) diff --git a/src/hooks/useScreenLargerThan.ts b/src/hooks/useScreenLargerThan.ts index 4cb70371c..1b64ef336 100644 --- a/src/hooks/useScreenLargerThan.ts +++ b/src/hooks/useScreenLargerThan.ts @@ -4,5 +4,5 @@ import { useMediaQuery } from '@mantine/hooks'; export const useScreenLargerThan = (size: MantineSize | number) => { const { breakpoints } = useMantineTheme(); const pixelCount = typeof size === 'string' ? breakpoints[size] : size; - return useMediaQuery(`(min-width: ${pixelCount}px)`); + return useMediaQuery('(min-width: 500px)'); }; diff --git a/src/pages/404.tsx b/src/pages/404.tsx index eebe020eb..9b67c9cf7 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -55,7 +55,7 @@ const useStyles = createStyles((theme) => ({ description: { maxWidth: 540, margin: 'auto', - marginTop: parseInt(theme.spacing.xl, 10), + marginTop: theme.spacing.xl, marginBottom: `calc(${theme.spacing.xl} * 1.5)`, }, })); diff --git a/src/widgets/calendar/CalendarDay.tsx b/src/widgets/calendar/CalendarDay.tsx index e3920db8a..f41789a67 100644 --- a/src/widgets/calendar/CalendarDay.tsx +++ b/src/widgets/calendar/CalendarDay.tsx @@ -1,5 +1,6 @@ -import { Box, Indicator, IndicatorProps, Popover } from '@mantine/core'; +import { Box, Indicator, IndicatorProps, Popover, useMantineTheme } from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; +import { isToday } from '../../tools/isToday'; import { MediaList } from './MediaList'; import { MediasType } from './type'; @@ -10,6 +11,7 @@ interface CalendarDayProps { export const CalendarDay = ({ date, medias }: CalendarDayProps) => { const [opened, { close, open }] = useDisclosure(false); + const { colorScheme, colors } = useMantineTheme(); if (medias.totalCount === 0) { return
{date.getDate()}
; @@ -29,7 +31,17 @@ export const CalendarDay = ({ date, medias }: CalendarDayProps) => { opened={opened} > - + diff --git a/src/widgets/calendar/CalendarTile.tsx b/src/widgets/calendar/CalendarTile.tsx index 7068231dc..66c204d46 100644 --- a/src/widgets/calendar/CalendarTile.tsx +++ b/src/widgets/calendar/CalendarTile.tsx @@ -72,36 +72,14 @@ function CalendarTile({ widget }: CalendarTileProps) { return ( ( From 1aeee38c0d2b05cbd270dc87b13735836b7c2e38 Mon Sep 17 00:00:00 2001 From: ajnart Date: Fri, 3 Mar 2023 01:21:38 +0900 Subject: [PATCH 15/98] WIP on Mantine v6 --- .../SelectElement/Components/Shared/GenericElementType.tsx | 2 +- .../Components/StaticElementsTab/AvailableStaticElementsTab.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Dashboard/Modals/SelectElement/Components/Shared/GenericElementType.tsx b/src/components/Dashboard/Modals/SelectElement/Components/Shared/GenericElementType.tsx index fbf9cd169..cde3d46e4 100644 --- a/src/components/Dashboard/Modals/SelectElement/Components/Shared/GenericElementType.tsx +++ b/src/components/Dashboard/Modals/SelectElement/Components/Shared/GenericElementType.tsx @@ -29,7 +29,7 @@ export const GenericAvailableElementType = ({ : image; return ( - + diff --git a/src/components/Dashboard/Modals/SelectElement/Components/StaticElementsTab/AvailableStaticElementsTab.tsx b/src/components/Dashboard/Modals/SelectElement/Components/StaticElementsTab/AvailableStaticElementsTab.tsx index ef0da1757..6ae6b5562 100644 --- a/src/components/Dashboard/Modals/SelectElement/Components/StaticElementsTab/AvailableStaticElementsTab.tsx +++ b/src/components/Dashboard/Modals/SelectElement/Components/StaticElementsTab/AvailableStaticElementsTab.tsx @@ -19,7 +19,7 @@ export const AvailableStaticTypes = ({ onClickBack }: AvailableStaticTypesProps) they don't integrate with any apps and their content never changes.
- + Date: Fri, 3 Mar 2023 12:38:56 +0900 Subject: [PATCH 16/98] =?UTF-8?q?=F0=9F=92=84=20Icon=20selector=20style=20?= =?UTF-8?q?changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modals/EditAppModal/Tabs/AppereanceTab/IconSelector.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/AppereanceTab/IconSelector.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/AppereanceTab/IconSelector.tsx index 0d4fd4249..c9c01035d 100644 --- a/src/components/Dashboard/Modals/EditAppModal/Tabs/AppereanceTab/IconSelector.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/AppereanceTab/IconSelector.tsx @@ -90,7 +90,8 @@ export const IconSelector = ({ } variant="default" withAsterisk - dropdownComponent={(props: any) => } + dropdownComponent={(props: any) => } + dropdownPosition="bottom" required onChange={(event) => { if (allowAppNamePropagation) { From 85120e381620570cc4609e647a5019b685aca1df Mon Sep 17 00:00:00 2001 From: ajnart Date: Fri, 3 Mar 2023 12:39:10 +0900 Subject: [PATCH 17/98] =?UTF-8?q?=F0=9F=92=84=20Icon=20selector=20style=20?= =?UTF-8?q?changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dashboard/Tiles/GenericTileMenu.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Dashboard/Tiles/GenericTileMenu.tsx b/src/components/Dashboard/Tiles/GenericTileMenu.tsx index fba87edfa..d414d0613 100644 --- a/src/components/Dashboard/Tiles/GenericTileMenu.tsx +++ b/src/components/Dashboard/Tiles/GenericTileMenu.tsx @@ -24,9 +24,9 @@ export const GenericTileMenu = ({ } return ( - + - + From 68cea4b6a83592aa8bf2dbb76fba841728f0df90 Mon Sep 17 00:00:00 2001 From: ajnart Date: Fri, 3 Mar 2023 12:39:40 +0900 Subject: [PATCH 18/98] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20=20Icon=20selector?= =?UTF-8?q?=20performance=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added caching for the icons --- src/hooks/icons/useGetDashboardIcons.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/hooks/icons/useGetDashboardIcons.tsx b/src/hooks/icons/useGetDashboardIcons.tsx index 854322693..707461eec 100644 --- a/src/hooks/icons/useGetDashboardIcons.tsx +++ b/src/hooks/icons/useGetDashboardIcons.tsx @@ -10,5 +10,7 @@ export const useGetDashboardIcons = () => return data as NormalizedIconRepositoryResult[]; }, refetchOnMount: false, + // Cache for infinity, refetch every so often. + cacheTime: Infinity, refetchOnWindowFocus: false, }); From 457e9cf2bdb29511e679f4e7c288398770877d8d Mon Sep 17 00:00:00 2001 From: ajnart Date: Fri, 3 Mar 2023 12:40:49 +0900 Subject: [PATCH 19/98] =?UTF-8?q?=F0=9F=8E=A8=20Format=20codebase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dashboard/Tiles/Apps/AppTile.tsx | 8 ++- .../Customization/CustomizationSettings.tsx | 4 +- .../Customization/Meta/LogoImageChanger.tsx | 4 +- .../download-speed/useGetNetworkSpeed.tsx | 17 ++--- src/pages/api/icons/index.ts | 24 +++++-- src/pages/api/modules/calendar.ts | 2 +- src/pages/api/modules/downloads/index.ts | 4 +- .../images/jsdelivr-icons-repository.ts | 2 +- src/types/api/media-server/session-info.ts | 62 ++++++++++--------- src/widgets/date/DateTile.tsx | 2 +- src/widgets/iframe/IFrameTile.tsx | 2 +- .../media-server/DetailCollapseable.tsx | 4 +- src/widgets/useNet/UseNetTile.tsx | 2 +- src/widgets/weather/WeatherTile.tsx | 2 +- 14 files changed, 86 insertions(+), 53 deletions(-) diff --git a/src/components/Dashboard/Tiles/Apps/AppTile.tsx b/src/components/Dashboard/Tiles/Apps/AppTile.tsx index 1c9edd328..42dacd806 100644 --- a/src/components/Dashboard/Tiles/Apps/AppTile.tsx +++ b/src/components/Dashboard/Tiles/Apps/AppTile.tsx @@ -36,7 +36,13 @@ export const AppTile = ({ className, app }: AppTileProps) => { className="dashboard-tile-app" > diff --git a/src/components/Settings/Customization/CustomizationSettings.tsx b/src/components/Settings/Customization/CustomizationSettings.tsx index f7dbc327d..30bbe4149 100644 --- a/src/components/Settings/Customization/CustomizationSettings.tsx +++ b/src/components/Settings/Customization/CustomizationSettings.tsx @@ -10,9 +10,7 @@ export default function CustomizationSettings() { return ( - - {t('text')} - + {t('text')} diff --git a/src/components/Settings/Customization/Meta/LogoImageChanger.tsx b/src/components/Settings/Customization/Meta/LogoImageChanger.tsx index 3d5563fe1..18fc8246a 100644 --- a/src/components/Settings/Customization/Meta/LogoImageChanger.tsx +++ b/src/components/Settings/Customization/Meta/LogoImageChanger.tsx @@ -8,7 +8,9 @@ export const LogoImageChanger = () => { const { t } = useTranslation('settings/customization/page-appearance'); const updateConfig = useConfigStore((x) => x.updateConfig); const { config, name: configName } = useConfigContext(); - const [logoImageSrc, setLogoImageSrc] = useState(config?.settings.customization.logoImageUrl ?? '/imgs/logo/logo.png'); + const [logoImageSrc, setLogoImageSrc] = useState( + config?.settings.customization.logoImageUrl ?? '/imgs/logo/logo.png' + ); if (!configName) return null; diff --git a/src/hooks/widgets/download-speed/useGetNetworkSpeed.tsx b/src/hooks/widgets/download-speed/useGetNetworkSpeed.tsx index 965607e1c..2af50a67e 100644 --- a/src/hooks/widgets/download-speed/useGetNetworkSpeed.tsx +++ b/src/hooks/widgets/download-speed/useGetNetworkSpeed.tsx @@ -1,11 +1,12 @@ import { useQuery } from '@tanstack/react-query'; import { NormalizedDownloadQueueResponse } from '../../../types/api/downloads/queue/NormalizedDownloadQueueResponse'; -export const useGetDownloadClientsQueue = () => useQuery({ - queryKey: ['network-speed'], - queryFn: async (): Promise => { - const response = await fetch('/api/modules/downloads'); - return response.json(); - }, - refetchInterval: 3000, -}); +export const useGetDownloadClientsQueue = () => + useQuery({ + queryKey: ['network-speed'], + queryFn: async (): Promise => { + const response = await fetch('/api/modules/downloads'); + return response.json(); + }, + refetchInterval: 3000, + }); diff --git a/src/pages/api/icons/index.ts b/src/pages/api/icons/index.ts index 7b1c6a4f9..9649f9cbe 100644 --- a/src/pages/api/icons/index.ts +++ b/src/pages/api/icons/index.ts @@ -6,10 +6,26 @@ import { UnpkgIconsRepository } from '../../../tools/server/images/unpkg-icons-r const Get = async (request: NextApiRequest, response: NextApiResponse) => { const respositories = [ new LocalIconsRepository(), - new JsdelivrIconsRepository(JsdelivrIconsRepository.tablerRepository, 'Walkxcode Dashboard Icons', 'Walkxcode on Github'), - new UnpkgIconsRepository(UnpkgIconsRepository.tablerRepository, 'Tabler Icons', 'Tabler Icons - GitHub (MIT)'), - new JsdelivrIconsRepository(JsdelivrIconsRepository.papirusRepository, 'Papirus Icons', 'Papirus Development Team on GitHub (Apache 2.0)'), - new JsdelivrIconsRepository(JsdelivrIconsRepository.homelabSvgAssetsRepository, 'Homelab Svg Assets', 'loganmarchione on GitHub (MIT)'), + new JsdelivrIconsRepository( + JsdelivrIconsRepository.tablerRepository, + 'Walkxcode Dashboard Icons', + 'Walkxcode on Github' + ), + new UnpkgIconsRepository( + UnpkgIconsRepository.tablerRepository, + 'Tabler Icons', + 'Tabler Icons - GitHub (MIT)' + ), + new JsdelivrIconsRepository( + JsdelivrIconsRepository.papirusRepository, + 'Papirus Icons', + 'Papirus Development Team on GitHub (Apache 2.0)' + ), + new JsdelivrIconsRepository( + JsdelivrIconsRepository.homelabSvgAssetsRepository, + 'Homelab Svg Assets', + 'loganmarchione on GitHub (MIT)' + ), ]; const fetches = respositories.map((rep) => rep.fetch()); const data = await Promise.all(fetches); diff --git a/src/pages/api/modules/calendar.ts b/src/pages/api/modules/calendar.ts index ab3694eda..275555656 100644 --- a/src/pages/api/modules/calendar.ts +++ b/src/pages/api/modules/calendar.ts @@ -53,7 +53,7 @@ async function Get(req: NextApiRequest, res: NextApiResponse) { ); const IntegrationTypeEndpointMap = new Map([ - ['sonarr', useSonarrv4 ? '/api/v3/calendar' : '/api/calendar'], + ['sonarr', useSonarrv4 ? '/api/v3/calendar' : '/api/calendar'], ['radarr', '/api/v3/calendar'], ['lidarr', '/api/v1/calendar'], ['readarr', '/api/v1/calendar'], diff --git a/src/pages/api/modules/downloads/index.ts b/src/pages/api/modules/downloads/index.ts index d7d5dc086..6d80db458 100644 --- a/src/pages/api/modules/downloads/index.ts +++ b/src/pages/api/modules/downloads/index.ts @@ -61,7 +61,9 @@ const Get = async (request: NextApiRequest, response: NextApiResponse) => { const responseBody = { apps: data, failedApps: failedClients } as NormalizedDownloadQueueResponse; if (failedClients.length > 0) { - Consola.warn(`${failedClients.length} download clients failed. Please check your configuration and the above log`); + Consola.warn( + `${failedClients.length} download clients failed. Please check your configuration and the above log` + ); } return response.status(200).json(responseBody); diff --git a/src/tools/server/images/jsdelivr-icons-repository.ts b/src/tools/server/images/jsdelivr-icons-repository.ts index 734f49853..acce25790 100644 --- a/src/tools/server/images/jsdelivr-icons-repository.ts +++ b/src/tools/server/images/jsdelivr-icons-repository.ts @@ -23,7 +23,7 @@ export class JsdelivrIconsRepository extends AbstractIconRepository { constructor( private readonly repository: JsdelivrRepositoryUrl, private readonly displayName: string, - copyright: string, + copyright: string ) { super(copyright); } diff --git a/src/types/api/media-server/session-info.ts b/src/types/api/media-server/session-info.ts index 5b8c25ab7..d9ee0cece 100644 --- a/src/types/api/media-server/session-info.ts +++ b/src/types/api/media-server/session-info.ts @@ -14,33 +14,39 @@ export type GenericCurrentlyPlaying = { episodeCount: number | undefined; type: 'audio' | 'video' | 'tv' | 'movie' | undefined; metadata: { - video: { - videoCodec: string | undefined; - videoFrameRate: string | undefined; - height: number | undefined; - width: number | undefined; - bitrate: number | undefined; - } | undefined; - audio: { - audioCodec: string | undefined; - audioChannels: number | undefined; - } | undefined; - transcoding: { - context: string | undefined; - sourceVideoCodec: string | undefined; - sourceAudioCodec: string | undefined; - videoDecision: string | undefined; - audioDecision: string | undefined; - container: string | undefined; - videoCodec: string | undefined; - audioCodec: string | undefined; - error: boolean | undefined; - duration: number | undefined; - audioChannels: number | undefined; - width: number | undefined; - height: number | undefined; - transcodeHwRequested: boolean | undefined; - timeStamp: number | undefined; - } | undefined; + video: + | { + videoCodec: string | undefined; + videoFrameRate: string | undefined; + height: number | undefined; + width: number | undefined; + bitrate: number | undefined; + } + | undefined; + audio: + | { + audioCodec: string | undefined; + audioChannels: number | undefined; + } + | undefined; + transcoding: + | { + context: string | undefined; + sourceVideoCodec: string | undefined; + sourceAudioCodec: string | undefined; + videoDecision: string | undefined; + audioDecision: string | undefined; + container: string | undefined; + videoCodec: string | undefined; + audioCodec: string | undefined; + error: boolean | undefined; + duration: number | undefined; + audioChannels: number | undefined; + width: number | undefined; + height: number | undefined; + transcodeHwRequested: boolean | undefined; + timeStamp: number | undefined; + } + | undefined; }; }; diff --git a/src/widgets/date/DateTile.tsx b/src/widgets/date/DateTile.tsx index b9f005873..07c26cb5c 100644 --- a/src/widgets/date/DateTile.tsx +++ b/src/widgets/date/DateTile.tsx @@ -25,7 +25,7 @@ const definition = defineWidget({ component: DateTile, }); -export type IDateWidget = IWidget; +export type IDateWidget = IWidget<(typeof definition)['id'], typeof definition>; interface DateTileProps { widget: IDateWidget; diff --git a/src/widgets/iframe/IFrameTile.tsx b/src/widgets/iframe/IFrameTile.tsx index 44b17d089..8cc2efe1f 100644 --- a/src/widgets/iframe/IFrameTile.tsx +++ b/src/widgets/iframe/IFrameTile.tsx @@ -43,7 +43,7 @@ function IFrameTile({ widget }: IFrameTileProps) { - {t('card.errors.noUrl.title')} + {t('card.errors.noUrl.title')} {t('card.errors.noUrl.text')} diff --git a/src/widgets/media-server/DetailCollapseable.tsx b/src/widgets/media-server/DetailCollapseable.tsx index 536e3d0e7..2517962bf 100644 --- a/src/widgets/media-server/DetailCollapseable.tsx +++ b/src/widgets/media-server/DetailCollapseable.tsx @@ -107,7 +107,9 @@ export const DetailCollapseable = ({ session }: { session: GenericSessionInfo }) {session.sessionName} - {details.length > 0 && } + {details.length > 0 && ( + + )} {details.map((detail, index) => ( diff --git a/src/widgets/useNet/UseNetTile.tsx b/src/widgets/useNet/UseNetTile.tsx index 832b8d2d7..bfe1345cb 100644 --- a/src/widgets/useNet/UseNetTile.tsx +++ b/src/widgets/useNet/UseNetTile.tsx @@ -46,7 +46,7 @@ const definition = defineWidget({ }, }); -export type IUsenetWidget = IWidget; +export type IUsenetWidget = IWidget<(typeof definition)['id'], typeof definition>; interface UseNetTileProps { widget: IUsenetWidget; diff --git a/src/widgets/weather/WeatherTile.tsx b/src/widgets/weather/WeatherTile.tsx index ba7b9eff7..b23731aa1 100644 --- a/src/widgets/weather/WeatherTile.tsx +++ b/src/widgets/weather/WeatherTile.tsx @@ -28,7 +28,7 @@ const definition = defineWidget({ component: WeatherTile, }); -export type IWeatherWidget = IWidget; +export type IWeatherWidget = IWidget<(typeof definition)['id'], typeof definition>; interface WeatherTileProps { widget: IWeatherWidget; From c8ef6bae1ad55eb5fb4c6ded787dc92ba4722a2d Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Fri, 3 Mar 2023 20:27:30 +0100 Subject: [PATCH 20/98] =?UTF-8?q?=F0=9F=9A=91=20Fix=20URL=20malformed=20(#?= =?UTF-8?q?743)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/middleware.ts | 6 +-- yarn.lock | 127 ++++++++++++++++++++++++---------------------- 3 files changed, 69 insertions(+), 66 deletions(-) diff --git a/package.json b/package.json index c398dc5cc..b64160f85 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "html-entities": "^2.3.3", "i18next": "^21.9.1", "js-file-download": "^0.4.12", - "next": "^13.1.6", + "next": "^13.2.1", "next-i18next": "^11.3.0", "nzbget-api": "^0.0.3", "prismjs": "^1.29.0", diff --git a/src/middleware.ts b/src/middleware.ts index 79f85b693..6652e8d41 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -1,8 +1,8 @@ -import { NextFetchEvent, NextRequest, NextResponse } from 'next/server'; +import { NextRequest, NextResponse } from 'next/server'; -// eslint-disable-next-line consistent-return -export function middleware(req: NextRequest, ev: NextFetchEvent) { +export function middleware(req: NextRequest) { const { cookies } = req; + // Don't even bother with the middleware if there is no defined password if (!process.env.PASSWORD) return NextResponse.next(); diff --git a/yarn.lock b/yarn.lock index 2d3338ba5..aa12f8a2d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1272,10 +1272,10 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:13.1.6": - version: 13.1.6 - resolution: "@next/env@npm:13.1.6" - checksum: 0f911a18f0b3372007632fffa87f5d7f802c00d07b3bf757d2d09574735ae43f60000ecdf64b6f06e195971c508c2bcee82dd1e3aab27a08a4300eb0317652bb +"@next/env@npm:13.2.1": + version: 13.2.1 + resolution: "@next/env@npm:13.2.1" + checksum: 16a877479348b9d6a9e69e74312546889d6419a6dec0556cf7d9ed5876b4f69a0974c804f2c5ec81526522c243d97bd2d6919d3241cd165e10e8fd6c3bb4b975 languageName: node linkType: hard @@ -1288,93 +1288,93 @@ __metadata: languageName: node linkType: hard -"@next/swc-android-arm-eabi@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-android-arm-eabi@npm:13.1.6" +"@next/swc-android-arm-eabi@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-android-arm-eabi@npm:13.2.1" conditions: os=android & cpu=arm languageName: node linkType: hard -"@next/swc-android-arm64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-android-arm64@npm:13.1.6" +"@next/swc-android-arm64@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-android-arm64@npm:13.2.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-darwin-arm64@npm:13.1.6" +"@next/swc-darwin-arm64@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-darwin-arm64@npm:13.2.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-darwin-x64@npm:13.1.6" +"@next/swc-darwin-x64@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-darwin-x64@npm:13.2.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-freebsd-x64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-freebsd-x64@npm:13.1.6" +"@next/swc-freebsd-x64@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-freebsd-x64@npm:13.2.1" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm-gnueabihf@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-arm-gnueabihf@npm:13.1.6" +"@next/swc-linux-arm-gnueabihf@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-linux-arm-gnueabihf@npm:13.2.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-arm64-gnu@npm:13.1.6" +"@next/swc-linux-arm64-gnu@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-linux-arm64-gnu@npm:13.2.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-arm64-musl@npm:13.1.6" +"@next/swc-linux-arm64-musl@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-linux-arm64-musl@npm:13.2.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-x64-gnu@npm:13.1.6" +"@next/swc-linux-x64-gnu@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-linux-x64-gnu@npm:13.2.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-x64-musl@npm:13.1.6" +"@next/swc-linux-x64-musl@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-linux-x64-musl@npm:13.2.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-win32-arm64-msvc@npm:13.1.6" +"@next/swc-win32-arm64-msvc@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-win32-arm64-msvc@npm:13.2.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-ia32-msvc@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-win32-ia32-msvc@npm:13.1.6" +"@next/swc-win32-ia32-msvc@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-win32-ia32-msvc@npm:13.2.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-win32-x64-msvc@npm:13.1.6" +"@next/swc-win32-x64-msvc@npm:13.2.1": + version: 13.2.1 + resolution: "@next/swc-win32-x64-msvc@npm:13.2.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -4990,7 +4990,7 @@ __metadata: i18next: ^21.9.1 jest: ^28.1.3 js-file-download: ^0.4.12 - next: ^13.1.6 + next: ^13.2.1 next-i18next: ^11.3.0 nzbget-api: ^0.0.3 prettier: ^2.7.1 @@ -6697,29 +6697,30 @@ __metadata: languageName: node linkType: hard -"next@npm:^13.1.6": - version: 13.1.6 - resolution: "next@npm:13.1.6" +"next@npm:^13.2.1": + version: 13.2.1 + resolution: "next@npm:13.2.1" dependencies: - "@next/env": 13.1.6 - "@next/swc-android-arm-eabi": 13.1.6 - "@next/swc-android-arm64": 13.1.6 - "@next/swc-darwin-arm64": 13.1.6 - "@next/swc-darwin-x64": 13.1.6 - "@next/swc-freebsd-x64": 13.1.6 - "@next/swc-linux-arm-gnueabihf": 13.1.6 - "@next/swc-linux-arm64-gnu": 13.1.6 - "@next/swc-linux-arm64-musl": 13.1.6 - "@next/swc-linux-x64-gnu": 13.1.6 - "@next/swc-linux-x64-musl": 13.1.6 - "@next/swc-win32-arm64-msvc": 13.1.6 - "@next/swc-win32-ia32-msvc": 13.1.6 - "@next/swc-win32-x64-msvc": 13.1.6 + "@next/env": 13.2.1 + "@next/swc-android-arm-eabi": 13.2.1 + "@next/swc-android-arm64": 13.2.1 + "@next/swc-darwin-arm64": 13.2.1 + "@next/swc-darwin-x64": 13.2.1 + "@next/swc-freebsd-x64": 13.2.1 + "@next/swc-linux-arm-gnueabihf": 13.2.1 + "@next/swc-linux-arm64-gnu": 13.2.1 + "@next/swc-linux-arm64-musl": 13.2.1 + "@next/swc-linux-x64-gnu": 13.2.1 + "@next/swc-linux-x64-musl": 13.2.1 + "@next/swc-win32-arm64-msvc": 13.2.1 + "@next/swc-win32-ia32-msvc": 13.2.1 + "@next/swc-win32-x64-msvc": 13.2.1 "@swc/helpers": 0.4.14 caniuse-lite: ^1.0.30001406 postcss: 8.4.14 styled-jsx: 5.1.1 peerDependencies: + "@opentelemetry/api": ^1.4.0 fibers: ">= 3.1.0" node-sass: ^6.0.0 || ^7.0.0 react: ^18.2.0 @@ -6753,6 +6754,8 @@ __metadata: "@next/swc-win32-x64-msvc": optional: true peerDependenciesMeta: + "@opentelemetry/api": + optional: true fibers: optional: true node-sass: @@ -6761,7 +6764,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 584977e382bd826c21e7fc5f67bca50e4d95741a854b1686394d45331404479c7266569671227421975fc18e5cf70769a4ad7edede7450d4497213205bba77c8 + checksum: 2dba145ef4d604cd8eadc27f9e5a537df799614d1a801b9161a997f77a432684871eae51642580972a80ef363d724789677ae7c5fe44dc3dd66e71cd43f609c8 languageName: node linkType: hard From c6fa03ba8cb6462a3fe669f690cb0eee4dc5ae9d Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Mon, 6 Mar 2023 11:05:27 +0100 Subject: [PATCH 21/98] Update bug.yml --- .github/ISSUE_TEMPLATE/bug.yml | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 55879bb7a..2e8c262ca 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -32,8 +32,15 @@ body: - type: textarea id: logs attributes: - label: Additional info - description: Logs? Screenshots? More info? + label: Logs + description: Provide your Homarr logs so we can investigate what's going on + validations: + required: true + - type: textarea + id: context + attributes: + label: Context + description: Screenshots? More info? validations: required: false - type: checkboxes @@ -42,9 +49,11 @@ body: label: Please tick the boxes description: Before submitting, please ensure that options: - - label: You've read the [docs](https://github.com/ajnart/homarr#readme) + - label: I confirm that I attached the proper logs required: true - - label: You've checked for [duplicate issues](https://github.com/ajnart/homarr/issues) + - label: I've read the [docs](https://github.com/ajnart/homarr#readme) required: true - - label: You've tried to debug yourself + - label: I've checked for [duplicate issues](https://github.com/ajnart/homarr/issues) + required: true + - label: I've tried to debug myself required: true From 13999e44eb08c1454964f0d7befacfd965f3f8d4 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Tue, 7 Mar 2023 19:52:56 +0100 Subject: [PATCH 22/98] =?UTF-8?q?=F0=9F=92=84=20Add=20conditional=20render?= =?UTF-8?q?ing=20for=20image?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widgets/rss/RssWidgetTile.tsx | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index 39b03db68..dd3bf80f9 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -137,15 +137,17 @@ function RssTile({ widget }: RssTileProps) { )} - - - + {item.enclosure && ( + + + + )} {item.categories && ( From 47cb9cd5b62361eb1231d36c55a72d73d23d3e03 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Tue, 7 Mar 2023 20:09:51 +0100 Subject: [PATCH 23/98] =?UTF-8?q?=F0=9F=92=84=20Fix=20overflow=20of=20item?= =?UTF-8?q?s=20in=20RSS=20widget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widgets/rss/RssWidgetTile.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index dd3bf80f9..c441fa48f 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -148,7 +148,7 @@ function RssTile({ widget }: RssTileProps) { /> )} - + {item.categories && ( {item.categories.map((category: any, categoryIndex: number) => ( From 4a856c6267f01fbb06d877f93c8c350ba39675e2 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Fri, 17 Mar 2023 22:10:00 +0100 Subject: [PATCH 24/98] =?UTF-8?q?=E2=9C=85=20Add=20vitest=20and=20initial?= =?UTF-8?q?=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 11 +- src/hooks/widgets/dashDot/api.ts | 2 +- src/pages/_app.tsx | 4 +- src/pages/api/modules/rss/index.ts | 2 +- src/tools/addToHomarr.ts | 29 - .../tanstack/queryClient.tool.ts} | 0 src/tools/{ => server/theme}/theme.ts | 0 src/tools/shared/math/percentage.tool.test.ts | 27 + .../math/percentage.tool.ts} | 0 src/tools/shared/time/date.tool.test.ts | 47 + .../{isToday.ts => shared/time/date.tool.ts} | 0 src/tools/shared/time/stopwatch.tool.test.ts | 26 + .../{stopwatch.ts => time/stopwatch.tool.ts} | 0 src/widgets/calendar/CalendarTile.tsx | 2 +- src/widgets/dashDot/DashDotCompactStorage.tsx | 2 +- vitest.config.ts | 11 + yarn.lock | 1303 ++++++++++++++++- 17 files changed, 1410 insertions(+), 56 deletions(-) delete mode 100644 src/tools/addToHomarr.ts rename src/tools/{queryClient.ts => server/configurations/tanstack/queryClient.tool.ts} (100%) rename src/tools/{ => server/theme}/theme.ts (100%) create mode 100644 src/tools/shared/math/percentage.tool.test.ts rename src/tools/{percentage.ts => shared/math/percentage.tool.ts} (100%) create mode 100644 src/tools/shared/time/date.tool.test.ts rename src/tools/{isToday.ts => shared/time/date.tool.ts} (100%) create mode 100644 src/tools/shared/time/stopwatch.tool.test.ts rename src/tools/shared/{stopwatch.ts => time/stopwatch.tool.ts} (100%) create mode 100644 vitest.config.ts diff --git a/package.json b/package.json index b64160f85..2cfffc73c 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,9 @@ "jest:watch": "jest --watch", "prettier:check": "prettier --check \"**/*.{ts,tsx}\"", "prettier:write": "prettier --write \"**/*.{ts,tsx}\"", - "test": "npm run prettier:check && npm run lint && npm run typecheck && npm run jest", + "test": "vitest", + "test:ui": "vitest --ui", + "test:run": "vitest run", "ci": "yarn test && yarn lint --fix && yarn typecheck && yarn prettier:write" }, "dependencies": { @@ -43,6 +45,7 @@ "@tabler/icons": "^1.106.0", "@tanstack/react-query": "^4.2.1", "@tanstack/react-query-devtools": "^4.24.4", + "@vitejs/plugin-react": "^3.1.0", "axios": "^0.27.2", "consola": "^2.15.3", "cookies-next": "^2.1.1", @@ -70,6 +73,7 @@ "devDependencies": { "@next/bundle-analyzer": "^12.1.4", "@next/eslint-plugin-next": "^12.1.4", + "@testing-library/react": "^14.0.0", "@types/dockerode": "^3.3.9", "@types/node": "17.0.1", "@types/prismjs": "^1.26.0", @@ -78,6 +82,7 @@ "@types/video.js": "^7.3.51", "@typescript-eslint/eslint-plugin": "^5.30.7", "@typescript-eslint/parser": "^5.30.7", + "@vitest/ui": "^0.29.3", "eslint": "^8.20.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-typescript": "^17.0.0", @@ -90,11 +95,13 @@ "eslint-plugin-testing-library": "^5.5.1", "eslint-plugin-unused-imports": "^2.0.0", "jest": "^28.1.3", + "jsdom": "^21.1.1", "prettier": "^2.7.1", "sass": "^1.56.1", "turbo": "^1.7.4", "typescript": "^4.7.4", - "video.js": "^8.0.3" + "video.js": "^8.0.3", + "vitest": "^0.29.3" }, "resolutions": { "@types/react": "17.0.2", diff --git a/src/hooks/widgets/dashDot/api.ts b/src/hooks/widgets/dashDot/api.ts index 34a290475..eafb8b25c 100644 --- a/src/hooks/widgets/dashDot/api.ts +++ b/src/hooks/widgets/dashDot/api.ts @@ -11,7 +11,7 @@ import type { } from '../../../pages/api/modules/usenet/history'; import { UsenetInfoRequestParams, UsenetInfoResponse } from '../../../pages/api/modules/usenet'; import { UsenetPauseRequestParams } from '../../../pages/api/modules/usenet/pause'; -import { queryClient } from '../../../tools/queryClient'; +import { queryClient } from '../../../tools/server/configurations/tanstack/queryClient.tool'; import { UsenetResumeRequestParams } from '../../../pages/api/modules/usenet/resume'; const POLLING_INTERVAL = 2000; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index e55dd6bef..7e2c34429 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -22,12 +22,12 @@ import { CategoryEditModal } from '../components/Dashboard/Wrappers/Category/Cat import { ConfigProvider } from '../config/provider'; import { usePackageAttributesStore } from '../tools/client/zustands/usePackageAttributesStore'; import { ColorTheme } from '../tools/color'; -import { queryClient } from '../tools/queryClient'; +import { queryClient } from '../tools/server/configurations/tanstack/queryClient.tool'; import { getServiceSidePackageAttributes, ServerSidePackageAttributesType, } from '../tools/server/getPackageVersion'; -import { theme } from '../tools/theme'; +import { theme } from '../tools/server/theme/theme'; import { useEditModeInformationStore } from '../hooks/useEditModeInformation'; import '../styles/global.scss'; diff --git a/src/pages/api/modules/rss/index.ts b/src/pages/api/modules/rss/index.ts index 0a5623158..7ce1659fd 100644 --- a/src/pages/api/modules/rss/index.ts +++ b/src/pages/api/modules/rss/index.ts @@ -9,8 +9,8 @@ import { NextApiRequest, NextApiResponse } from 'next'; import Parser from 'rss-parser'; import { getConfig } from '../../../../tools/config/getConfig'; -import { Stopwatch } from '../../../../tools/shared/stopwatch'; import { IRssWidget } from '../../../../widgets/rss/RssWidgetTile'; +import { Stopwatch } from '../../../../tools/shared/time/stopwatch.tool'; type CustomItem = { 'media:content': string; diff --git a/src/tools/addToHomarr.ts b/src/tools/addToHomarr.ts deleted file mode 100644 index ea79d93c7..000000000 --- a/src/tools/addToHomarr.ts +++ /dev/null @@ -1,29 +0,0 @@ -import Dockerode from 'dockerode'; - -import { MatchingImages, ServiceType, tryMatchPort } from './types'; - -function tryMatchType(imageName: string): ServiceType { - // Try to find imageName inside MatchingImages - - const match = MatchingImages.find(({ image }) => imageName.includes(image)); - if (match) { - return match.type; - } - return 'Other'; -} - -export function tryMatchService(container: Dockerode.ContainerInfo | undefined) { - if (container === undefined) return {}; - const name = container.Names[0].substring(1); - const type = tryMatchType(container.Image); - const port = tryMatchPort(type.toLowerCase())?.value ?? container.Ports[0]?.PublicPort; - return { - name, - id: container.Id, - type: tryMatchType(container.Image), - url: `localhost${port ? `:${port}` : ''}`, - icon: `https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/${name - .replace(/\s+/g, '-') - .toLowerCase()}.png`, - }; -} diff --git a/src/tools/queryClient.ts b/src/tools/server/configurations/tanstack/queryClient.tool.ts similarity index 100% rename from src/tools/queryClient.ts rename to src/tools/server/configurations/tanstack/queryClient.tool.ts diff --git a/src/tools/theme.ts b/src/tools/server/theme/theme.ts similarity index 100% rename from src/tools/theme.ts rename to src/tools/server/theme/theme.ts diff --git a/src/tools/shared/math/percentage.tool.test.ts b/src/tools/shared/math/percentage.tool.test.ts new file mode 100644 index 000000000..f96beaf0b --- /dev/null +++ b/src/tools/shared/math/percentage.tool.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, it } from 'vitest'; + +import { percentage } from './percentage.tool'; + +describe('percentage', () => { + it.concurrent('be fixed value', () => { + // arrange + const value = 62; + + // act + const fixedPercentage = percentage(value, 100); + + // assert + expect(fixedPercentage).toBe('62.0'); + }); + + it.concurrent('be fixed value when decimal places', () => { + // arrange + const value = 42.69696969; + + // act + const fixedPercentage = percentage(value, 100); + + // assert + expect(fixedPercentage).toBe('42.7'); + }); +}); diff --git a/src/tools/percentage.ts b/src/tools/shared/math/percentage.tool.ts similarity index 100% rename from src/tools/percentage.ts rename to src/tools/shared/math/percentage.tool.ts diff --git a/src/tools/shared/time/date.tool.test.ts b/src/tools/shared/time/date.tool.test.ts new file mode 100644 index 000000000..51cd72b84 --- /dev/null +++ b/src/tools/shared/time/date.tool.test.ts @@ -0,0 +1,47 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +import { isToday } from './date.tool'; + +describe('isToday', () => { + beforeEach(() => { + vi.useFakeTimers(); + }); + + afterEach(() => { + vi.useRealTimers(); + }); + + it.concurrent('should return true if date is today', () => { + // arrange + const date = new Date(2022, 3, 17); + vi.setSystemTime(date); + + // act + const today = isToday(date); + + // assert + expect(today).toBe(true); + }); + + it.concurrent("should return true if date is today and time doesn't match", () => { + // arrange + vi.setSystemTime(new Date(2022, 3, 17, 16, 25, 11)); + + // act + const today = isToday(new Date(2022, 3, 17)); + + // assert + expect(today).toBe(true); + }); + + it.concurrent("should be false if date doesn't match", () => { + // arrange + vi.setSystemTime(new Date(2022, 3, 17, 16)); + + // act + const today = isToday(new Date(2022, 3, 15)); + + // assert + expect(today).toBe(false); + }); +}); diff --git a/src/tools/isToday.ts b/src/tools/shared/time/date.tool.ts similarity index 100% rename from src/tools/isToday.ts rename to src/tools/shared/time/date.tool.ts diff --git a/src/tools/shared/time/stopwatch.tool.test.ts b/src/tools/shared/time/stopwatch.tool.test.ts new file mode 100644 index 000000000..b39c51c61 --- /dev/null +++ b/src/tools/shared/time/stopwatch.tool.test.ts @@ -0,0 +1,26 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +import { Stopwatch } from './stopwatch.tool'; + +describe('stopwatch', () => { + beforeEach(() => { + vi.useFakeTimers(); + }); + + afterEach(() => { + vi.useRealTimers(); + }); + + it.concurrent('should be elapsed time between start and current', () => { + // arrange + vi.setSystemTime(new Date(2023, 2, 26, 0, 0, 0)); + const stopwatch = new Stopwatch(); + + // act + vi.setSystemTime(new Date(2023, 2, 26, 0, 0, 2)); + const milliseconds = stopwatch.getEllapsedMilliseconds(); + + // assert + expect(milliseconds).toBe(2000); + }); +}); diff --git a/src/tools/shared/stopwatch.ts b/src/tools/shared/time/stopwatch.tool.ts similarity index 100% rename from src/tools/shared/stopwatch.ts rename to src/tools/shared/time/stopwatch.tool.ts diff --git a/src/widgets/calendar/CalendarTile.tsx b/src/widgets/calendar/CalendarTile.tsx index edd4b6672..ccf06fb80 100644 --- a/src/widgets/calendar/CalendarTile.tsx +++ b/src/widgets/calendar/CalendarTile.tsx @@ -6,7 +6,7 @@ import { i18n } from 'next-i18next'; import { useState } from 'react'; import { useConfigContext } from '../../config/provider'; import { useColorTheme } from '../../tools/color'; -import { isToday } from '../../tools/isToday'; +import { isToday } from '../../tools/shared/time/date.tool'; import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; import { CalendarDay } from './CalendarDay'; diff --git a/src/widgets/dashDot/DashDotCompactStorage.tsx b/src/widgets/dashDot/DashDotCompactStorage.tsx index d321f28b1..b69b0f2d5 100644 --- a/src/widgets/dashDot/DashDotCompactStorage.tsx +++ b/src/widgets/dashDot/DashDotCompactStorage.tsx @@ -4,7 +4,7 @@ import axios from 'axios'; import { useTranslation } from 'next-i18next'; import { useConfigContext } from '../../config/provider'; import { bytes } from '../../tools/bytesHelper'; -import { percentage } from '../../tools/percentage'; +import { percentage } from '../../tools/shared/math/percentage.tool'; import { DashDotInfo } from './DashDotCompactNetwork'; interface DashDotCompactStorageProps { diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 000000000..c278c37ec --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,11 @@ +import react from '@vitejs/plugin-react'; + +import { defineConfig } from 'vitest/config'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + test: { + environment: 'jsdom', + }, +}); diff --git a/yarn.lock b/yarn.lock index aa12f8a2d..fad127708 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,7 +5,7 @@ __metadata: version: 6 cacheKey: 8 -"@ampproject/remapping@npm:^2.1.0": +"@ampproject/remapping@npm:^2.1.0, @ampproject/remapping@npm:^2.2.0": version: 2.2.0 resolution: "@ampproject/remapping@npm:2.2.0" dependencies: @@ -15,7 +15,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": version: 7.18.6 resolution: "@babel/code-frame@npm:7.18.6" dependencies: @@ -54,6 +54,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.20.12": + version: 7.21.3 + resolution: "@babel/core@npm:7.21.3" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.21.3 + "@babel/helper-compilation-targets": ^7.20.7 + "@babel/helper-module-transforms": ^7.21.2 + "@babel/helpers": ^7.21.0 + "@babel/parser": ^7.21.3 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.3 + "@babel/types": ^7.21.3 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.2 + semver: ^6.3.0 + checksum: bef25fbea96f461bf79bd1d0e4f0cdce679fd5ada464a89c1141ddba59ae1adfdbb23e04440c266ed525712d33d5ffd818cd8b0c25b1dee0e648d5559516153a + languageName: node + linkType: hard + "@babel/generator@npm:^7.20.7, @babel/generator@npm:^7.7.2": version: 7.20.14 resolution: "@babel/generator@npm:7.20.14" @@ -65,6 +88,18 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.21.3": + version: 7.21.3 + resolution: "@babel/generator@npm:7.21.3" + dependencies: + "@babel/types": ^7.21.3 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: be6bb5a32a0273260b91210d4137b7b5da148a2db8dd324654275cb0af865ae59de5e1536e93ac83423b2586415059e1c24cf94293026755cf995757238da749 + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.20.7": version: 7.20.7 resolution: "@babel/helper-compilation-targets@npm:7.20.7" @@ -97,6 +132,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-function-name@npm:7.21.0" + dependencies: + "@babel/template": ^7.20.7 + "@babel/types": ^7.21.0 + checksum: d63e63c3e0e3e8b3138fa47b0cd321148a300ef12b8ee951196994dcd2a492cc708aeda94c2c53759a5c9177fffaac0fd8778791286746f72a000976968daf4e + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-hoist-variables@npm:7.18.6" @@ -131,7 +176,23 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.8.0": +"@babel/helper-module-transforms@npm:^7.21.2": + version: 7.21.2 + resolution: "@babel/helper-module-transforms@npm:7.21.2" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-simple-access": ^7.20.2 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.2 + "@babel/types": ^7.21.2 + checksum: 8a1c129a4f90bdf97d8b6e7861732c9580f48f877aaaafbc376ce2482febebcb8daaa1de8bc91676d12886487603f8c62a44f9e90ee76d6cac7f9225b26a49e1 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.20.2 resolution: "@babel/helper-plugin-utils@npm:7.20.2" checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b @@ -188,6 +249,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helpers@npm:7.21.0" + dependencies: + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.0 + "@babel/types": ^7.21.0 + checksum: 9370dad2bb665c551869a08ac87c8bdafad53dbcdce1f5c5d498f51811456a3c005d9857562715151a0f00b2e912ac8d89f56574f837b5689f5f5072221cdf54 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" @@ -208,6 +280,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.21.3": + version: 7.21.3 + resolution: "@babel/parser@npm:7.21.3" + bin: + parser: ./bin/babel-parser.js + checksum: a71e6456a1260c2a943736b56cc0acdf5f2a53c6c79e545f56618967e51f9b710d1d3359264e7c979313a7153741b1d95ad8860834cc2ab4ce4f428b13cc07be + languageName: node + linkType: hard + "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -351,6 +432,28 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx-self@npm:^7.18.6": + version: 7.21.0 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.21.0" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 696f74c04a265409ccd46e333ff762e6011d394e6972128b5d97db4c1647289141bc7ebd45ab2bab99b60932f9793e8f89ee9432d3bde19962de2100456f6147 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-source@npm:^7.19.6": + version: 7.19.6 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.19.6" + dependencies: + "@babel/helper-plugin-utils": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1e9e29a4efc5b79840bd4f68e404f5ab7765ce48c7bd22f12f2b185f9c782c66933bdf54a1b21879e4e56e6b50b4e88aca82789ecb1f61123af6dfa9ab16c555 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7": version: 7.20.13 resolution: "@babel/runtime@npm:7.20.13" @@ -389,6 +492,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.3": + version: 7.21.3 + resolution: "@babel/traverse@npm:7.21.3" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.21.3 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.21.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.21.3 + "@babel/types": ^7.21.3 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 0af5bcd47a2fc501592b90ac1feae9d449afb9ab0772a4f6e68230f4cd3a475795d538c1de3f880fe3414b6c2820bac84d02c6549eea796f39d74a603717447b + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": version: 7.20.7 resolution: "@babel/types@npm:7.20.7" @@ -400,6 +521,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.21.3": + version: 7.21.3 + resolution: "@babel/types@npm:7.21.3" + dependencies: + "@babel/helper-string-parser": ^7.19.4 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: b750274718ba9cefd0b81836c464009bb6ba339fccce51b9baff497a0a2d96c044c61dc90cf203cec0adc770454b53a9681c3f7716883c802b85ab84c365ba35 + languageName: node + linkType: hard + "@balena/dockerignore@npm:^1.0.2": version: 1.0.2 resolution: "@balena/dockerignore@npm:1.0.2" @@ -646,6 +778,160 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/android-arm64@npm:0.17.12" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/android-arm@npm:0.17.12" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/android-x64@npm:0.17.12" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/darwin-arm64@npm:0.17.12" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/darwin-x64@npm:0.17.12" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/freebsd-arm64@npm:0.17.12" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/freebsd-x64@npm:0.17.12" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-arm64@npm:0.17.12" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-arm@npm:0.17.12" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-ia32@npm:0.17.12" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-loong64@npm:0.17.12" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-mips64el@npm:0.17.12" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-ppc64@npm:0.17.12" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-riscv64@npm:0.17.12" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-s390x@npm:0.17.12" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/linux-x64@npm:0.17.12" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/netbsd-x64@npm:0.17.12" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/openbsd-x64@npm:0.17.12" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/sunos-x64@npm:0.17.12" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/win32-arm64@npm:0.17.12" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/win32-ia32@npm:0.17.12" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.17.12": + version: 0.17.12 + resolution: "@esbuild/win32-x64@npm:0.17.12" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^1.4.1": version: 1.4.1 resolution: "@eslint/eslintrc@npm:1.4.1" @@ -1033,14 +1319,14 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": +"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13": version: 1.4.14 resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.17 resolution: "@jridgewell/trace-mapping@npm:0.3.17" dependencies: @@ -1911,6 +2197,36 @@ __metadata: languageName: node linkType: hard +"@testing-library/dom@npm:^9.0.0": + version: 9.0.1 + resolution: "@testing-library/dom@npm:9.0.1" + dependencies: + "@babel/code-frame": ^7.10.4 + "@babel/runtime": ^7.12.5 + "@types/aria-query": ^5.0.1 + aria-query: ^5.0.0 + chalk: ^4.1.0 + dom-accessibility-api: ^0.5.9 + lz-string: ^1.5.0 + pretty-format: ^27.0.2 + checksum: fa3d4097d0efd3b186d90e32ffa71c3f9c4ea7a5a793b186b565044b2950eea469594e1f75803e5edb52a75731feecd19cf7034b009b0bd3bfba173eb9c9cd0c + languageName: node + linkType: hard + +"@testing-library/react@npm:^14.0.0": + version: 14.0.0 + resolution: "@testing-library/react@npm:14.0.0" + dependencies: + "@babel/runtime": ^7.12.5 + "@testing-library/dom": ^9.0.0 + "@types/react-dom": ^18.0.0 + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 4a54c8f56cc4a39b50803205f84f06280bb76521d6d5d4b3b36651d760c7c7752ef142d857d52aaf4fad4848ed7a8be49afc793a5dda105955d2f8bef24901ac + languageName: node + linkType: hard + "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -1918,6 +2234,13 @@ __metadata: languageName: node linkType: hard +"@types/aria-query@npm:^5.0.1": + version: 5.0.1 + resolution: "@types/aria-query@npm:5.0.1" + checksum: 69fd7cceb6113ed370591aef04b3fd0742e9a1b06dd045c43531448847b85de181495e4566f98e776b37c422a12fd71866e0a1dfd904c5ec3f84d271682901de + languageName: node + linkType: hard + "@types/babel__core@npm:^7.1.14": version: 7.20.0 resolution: "@types/babel__core@npm:7.20.0" @@ -1971,6 +2294,22 @@ __metadata: languageName: node linkType: hard +"@types/chai-subset@npm:^1.3.3": + version: 1.3.3 + resolution: "@types/chai-subset@npm:1.3.3" + dependencies: + "@types/chai": "*" + checksum: 4481da7345022995f5a105e6683744f7203d2c3d19cfe88d8e17274d045722948abf55e0adfd97709e0f043dade37a4d4e98cd4c660e2e8a14f23e6ecf79418f + languageName: node + linkType: hard + +"@types/chai@npm:*, @types/chai@npm:^4.3.4": + version: 4.3.4 + resolution: "@types/chai@npm:4.3.4" + checksum: 571184967beb03bf64c4392a13a7d44e72da9af5a1e83077ff81c39cf59c0fda2a5c78d2005084601cf8f3d11726608574d8b5b4a0e3e9736792807afd926cd0 + languageName: node + linkType: hard + "@types/cookie@npm:^0.4.1": version: 0.4.1 resolution: "@types/cookie@npm:0.4.1" @@ -2121,6 +2460,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:17.0.2": + version: 17.0.2 + resolution: "@types/react-dom@npm:17.0.2" + dependencies: + "@types/react": "*" + checksum: 1725928a1c3a0026044e6401e6b53729e1a88849034fc67138d7784ec44a5132fe2e9056a19b741ccb462ff0ec0d8c2c01ef316bda19be0e31f2ead9346f600b + languageName: node + linkType: hard + "@types/react@npm:17.0.2": version: 17.0.2 resolution: "@types/react@npm:17.0.2" @@ -2365,6 +2713,77 @@ __metadata: languageName: node linkType: hard +"@vitejs/plugin-react@npm:^3.1.0": + version: 3.1.0 + resolution: "@vitejs/plugin-react@npm:3.1.0" + dependencies: + "@babel/core": ^7.20.12 + "@babel/plugin-transform-react-jsx-self": ^7.18.6 + "@babel/plugin-transform-react-jsx-source": ^7.19.6 + magic-string: ^0.27.0 + react-refresh: ^0.14.0 + peerDependencies: + vite: ^4.1.0-beta.0 + checksum: 450fac79e67cba9e1581c860f78e687b44108ab4117663ef20db279316e03cd8e87f94fef376e27cc5e200bd52813dcc09b70ea570c7c7cc291fcd47eb260fbc + languageName: node + linkType: hard + +"@vitest/expect@npm:0.29.3": + version: 0.29.3 + resolution: "@vitest/expect@npm:0.29.3" + dependencies: + "@vitest/spy": 0.29.3 + "@vitest/utils": 0.29.3 + chai: ^4.3.7 + checksum: d4d42e052cb9d8f60f69373cddd2f366e768bff7a0541fe4036eddf87dd1f50be3459a1901053f9ff91e2d90594be34b780be5a349ba2c06a6376d2788c34f3c + languageName: node + linkType: hard + +"@vitest/runner@npm:0.29.3": + version: 0.29.3 + resolution: "@vitest/runner@npm:0.29.3" + dependencies: + "@vitest/utils": 0.29.3 + p-limit: ^4.0.0 + pathe: ^1.1.0 + checksum: b7b84c18024cc9866e156c3637dad8d8a070a632d4aaa0c93d4635ba6f1fd4f354473b7c07ed10499e0ed1aa15d22fa13eff82656cd37034d9214b237d3d5f5b + languageName: node + linkType: hard + +"@vitest/spy@npm:0.29.3": + version: 0.29.3 + resolution: "@vitest/spy@npm:0.29.3" + dependencies: + tinyspy: ^1.0.2 + checksum: 136bddc311f832666d114a695a095242f73ba4717c95835dabf72ffb4a7823d6273c9209b114fe0846f6eecc9de6546b36a0e01d2ea174b923796dc7580a628b + languageName: node + linkType: hard + +"@vitest/ui@npm:^0.29.3": + version: 0.29.3 + resolution: "@vitest/ui@npm:0.29.3" + dependencies: + fast-glob: ^3.2.12 + flatted: ^3.2.7 + pathe: ^1.1.0 + picocolors: ^1.0.0 + sirv: ^2.0.2 + checksum: 5c4cbd6484e06b46f24f7512fce668c3738c7d7933e5f5fc04b059abca3668898c6febd20714782a674942b4869769213ace35afb6b95b10210d1dabdab5c678 + languageName: node + linkType: hard + +"@vitest/utils@npm:0.29.3": + version: 0.29.3 + resolution: "@vitest/utils@npm:0.29.3" + dependencies: + cli-truncate: ^3.1.0 + diff: ^5.1.0 + loupe: ^2.3.6 + pretty-format: ^27.5.1 + checksum: 549cfef427700795bea5e23526a0bce9cd0492d9e153bc086a6358c56829a0ec15d27d514c597a9dc086ef824304cff17b6b7c4ad6ae7bb4cfc3fcd6d1a86d93 + languageName: node + linkType: hard + "@xmldom/xmldom@npm:^0.8.3": version: 0.8.6 resolution: "@xmldom/xmldom@npm:0.8.6" @@ -2372,6 +2791,13 @@ __metadata: languageName: node linkType: hard +"abab@npm:^2.0.6": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e + languageName: node + linkType: hard + "abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -2379,6 +2805,16 @@ __metadata: languageName: node linkType: hard +"acorn-globals@npm:^7.0.0": + version: 7.0.1 + resolution: "acorn-globals@npm:7.0.1" + dependencies: + acorn: ^8.1.0 + acorn-walk: ^8.0.2 + checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -2388,14 +2824,14 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.0.0": +"acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.2.0": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 languageName: node linkType: hard -"acorn@npm:^8.0.4, acorn@npm:^8.8.0": +"acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.8.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2": version: 8.8.2 resolution: "acorn@npm:8.8.2" bin: @@ -2474,6 +2910,13 @@ __metadata: languageName: node linkType: hard +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + "ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" @@ -2499,6 +2942,13 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^6.0.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + "anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" @@ -2557,7 +3007,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.1.3": +"aria-query@npm:^5.0.0, aria-query@npm:^5.1.3": version: 5.1.3 resolution: "aria-query@npm:5.1.3" dependencies: @@ -2632,6 +3082,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf + languageName: node + linkType: hard + "ast-types-flow@npm:^0.0.7": version: 0.0.7 resolution: "ast-types-flow@npm:0.0.7" @@ -2896,6 +3353,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a + languageName: node + linkType: hard + "cacache@npm:^16.1.0": version: 16.1.3 resolution: "cacache@npm:16.1.3" @@ -3004,6 +3468,21 @@ __metadata: languageName: node linkType: hard +"chai@npm:^4.3.7": + version: 4.3.7 + resolution: "chai@npm:4.3.7" + dependencies: + assertion-error: ^1.1.0 + check-error: ^1.0.2 + deep-eql: ^4.1.2 + get-func-name: ^2.0.0 + loupe: ^2.3.1 + pathval: ^1.1.1 + type-detect: ^4.0.5 + checksum: 0bba7d267848015246a66995f044ce3f0ebc35e530da3cbdf171db744e14cbe301ab913a8d07caf7952b430257ccbb1a4a983c570a7c5748dc537897e5131f7c + languageName: node + linkType: hard + "chalk@npm:^2.0.0": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -3032,6 +3511,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^1.0.2": + version: 1.0.2 + resolution: "check-error@npm:1.0.2" + checksum: d9d106504404b8addd1ee3f63f8c0eaa7cd962a1a28eb9c519b1c4a1dc7098be38007fc0060f045ee00f075fbb7a2a4f42abcf61d68323677e11ab98dc16042e + languageName: node + linkType: hard + "chokidar@npm:>=3.0.0 <4.0.0": version: 3.5.3 resolution: "chokidar@npm:3.5.3" @@ -3086,6 +3572,16 @@ __metadata: languageName: node linkType: hard +"cli-truncate@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-truncate@npm:3.1.0" + dependencies: + slice-ansi: ^5.0.0 + string-width: ^5.0.0 + checksum: c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a + languageName: node + linkType: hard + "client-only@npm:0.0.1": version: 0.0.1 resolution: "client-only@npm:0.0.1" @@ -3316,6 +3812,15 @@ __metadata: languageName: node linkType: hard +"cssstyle@npm:^3.0.0": + version: 3.0.0 + resolution: "cssstyle@npm:3.0.0" + dependencies: + rrweb-cssom: ^0.6.0 + checksum: 31f694dfed9998ed93570fe539610837b878193dd8487c33cb12db8004333c53c2a3904166288bbec68388c72fb01014d46d3243ddfb02fe845989d852c06f27 + languageName: node + linkType: hard + "csstype@npm:3.0.9": version: 3.0.9 resolution: "csstype@npm:3.0.9" @@ -3449,6 +3954,17 @@ __metadata: languageName: node linkType: hard +"data-urls@npm:^4.0.0": + version: 4.0.0 + resolution: "data-urls@npm:4.0.0" + dependencies: + abab: ^2.0.6 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^12.0.0 + checksum: 006e869b5bf079647949a3e9b1dd69d84b2d5d26e6b01c265485699bc96e83817d4b5aae758b2910a4c58c0601913f3a0034121c1ca2da268e9a244c57515b15 + languageName: node + linkType: hard + "dayjs@npm:^1.11.7": version: 1.11.7 resolution: "dayjs@npm:1.11.7" @@ -3477,6 +3993,13 @@ __metadata: languageName: node linkType: hard +"decimal.js@npm:^10.4.3": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae + languageName: node + linkType: hard + "decompress-response@npm:^6.0.0": version: 6.0.0 resolution: "decompress-response@npm:6.0.0" @@ -3493,6 +4016,15 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^4.1.2": + version: 4.1.3 + resolution: "deep-eql@npm:4.1.3" + dependencies: + type-detect: ^4.0.0 + checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f + languageName: node + linkType: hard + "deep-equal@npm:^2.0.5": version: 2.2.0 resolution: "deep-equal@npm:2.2.0" @@ -3518,7 +4050,7 @@ __metadata: languageName: node linkType: hard -"deep-is@npm:^0.1.3": +"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 @@ -3591,6 +4123,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:^5.1.0": + version: 5.1.0 + resolution: "diff@npm:5.1.0" + checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -3641,6 +4180,13 @@ __metadata: languageName: node linkType: hard +"dom-accessibility-api@npm:^0.5.9": + version: 0.5.16 + resolution: "dom-accessibility-api@npm:0.5.16" + checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 + languageName: node + linkType: hard + "dom-helpers@npm:^5.0.1": version: 5.2.1 resolution: "dom-helpers@npm:5.2.1" @@ -3676,6 +4222,15 @@ __metadata: languageName: node linkType: hard +"domexception@npm:^4.0.0": + version: 4.0.0 + resolution: "domexception@npm:4.0.0" + dependencies: + webidl-conversions: ^7.0.0 + checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 + languageName: node + linkType: hard + "domhandler@npm:4.3.1, domhandler@npm:^4.2.0, domhandler@npm:^4.2.2": version: 4.3.1 resolution: "domhandler@npm:4.3.1" @@ -3712,6 +4267,13 @@ __metadata: languageName: node linkType: hard +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + "electron-to-chromium@npm:^1.4.284": version: 1.4.302 resolution: "electron-to-chromium@npm:1.4.302" @@ -3772,6 +4334,13 @@ __metadata: languageName: node linkType: hard +"entities@npm:^4.4.0": + version: 4.4.0 + resolution: "entities@npm:4.4.0" + checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -3884,6 +4453,83 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.17.5": + version: 0.17.12 + resolution: "esbuild@npm:0.17.12" + dependencies: + "@esbuild/android-arm": 0.17.12 + "@esbuild/android-arm64": 0.17.12 + "@esbuild/android-x64": 0.17.12 + "@esbuild/darwin-arm64": 0.17.12 + "@esbuild/darwin-x64": 0.17.12 + "@esbuild/freebsd-arm64": 0.17.12 + "@esbuild/freebsd-x64": 0.17.12 + "@esbuild/linux-arm": 0.17.12 + "@esbuild/linux-arm64": 0.17.12 + "@esbuild/linux-ia32": 0.17.12 + "@esbuild/linux-loong64": 0.17.12 + "@esbuild/linux-mips64el": 0.17.12 + "@esbuild/linux-ppc64": 0.17.12 + "@esbuild/linux-riscv64": 0.17.12 + "@esbuild/linux-s390x": 0.17.12 + "@esbuild/linux-x64": 0.17.12 + "@esbuild/netbsd-x64": 0.17.12 + "@esbuild/openbsd-x64": 0.17.12 + "@esbuild/sunos-x64": 0.17.12 + "@esbuild/win32-arm64": 0.17.12 + "@esbuild/win32-ia32": 0.17.12 + "@esbuild/win32-x64": 0.17.12 + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: ea6d33eb1bc6c9e00dcee5e253c7e935251b4801d376661fd9f19a9dcffc27f970078a6f7116d6c78ee825ceff9b974594b0b616bd560ce4d875a951aa92977b + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -3912,6 +4558,25 @@ __metadata: languageName: node linkType: hard +"escodegen@npm:^2.0.0": + version: 2.0.0 + resolution: "escodegen@npm:2.0.0" + dependencies: + esprima: ^4.0.1 + estraverse: ^5.2.0 + esutils: ^2.0.2 + optionator: ^0.8.1 + source-map: ~0.6.1 + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: 5aa6b2966fafe0545e4e77936300cc94ad57cfe4dc4ebff9950492eaba83eef634503f12d7e3cbd644ecc1bab388ad0e92b06fd32222c9281a75d1cf02ec6cef + languageName: node + linkType: hard + "eslint-config-airbnb-base@npm:^15.0.0": version: 15.0.0 resolution: "eslint-config-airbnb-base@npm:15.0.0" @@ -4238,7 +4903,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0": +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -4331,7 +4996,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.9": +"fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.9": version: 3.2.12 resolution: "fast-glob@npm:3.2.12" dependencies: @@ -4351,7 +5016,7 @@ __metadata: languageName: node linkType: hard -"fast-levenshtein@npm:^2.0.6": +"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": version: 2.0.6 resolution: "fast-levenshtein@npm:2.0.6" checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c @@ -4447,7 +5112,7 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.1.0": +"flatted@npm:^3.1.0, flatted@npm:^3.2.7": version: 3.2.7 resolution: "flatted@npm:3.2.7" checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 @@ -4627,6 +5292,13 @@ __metadata: languageName: node linkType: hard +"get-func-name@npm:^2.0.0": + version: 2.0.0 + resolution: "get-func-name@npm:2.0.0" + checksum: 8d82e69f3e7fab9e27c547945dfe5cc0c57fc0adf08ce135dddb01081d75684a03e7a0487466f478872b341d52ac763ae49e660d01ab83741f74932085f693c3 + languageName: node + linkType: hard + "get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": version: 1.2.0 resolution: "get-intrinsic@npm:1.2.0" @@ -4960,6 +5632,7 @@ __metadata: "@tabler/icons": ^1.106.0 "@tanstack/react-query": ^4.2.1 "@tanstack/react-query-devtools": ^4.24.4 + "@testing-library/react": ^14.0.0 "@types/dockerode": ^3.3.9 "@types/node": 17.0.1 "@types/prismjs": ^1.26.0 @@ -4968,6 +5641,8 @@ __metadata: "@types/video.js": ^7.3.51 "@typescript-eslint/eslint-plugin": ^5.30.7 "@typescript-eslint/parser": ^5.30.7 + "@vitejs/plugin-react": ^3.1.0 + "@vitest/ui": ^0.29.3 axios: ^0.27.2 consola: ^2.15.3 cookies-next: ^2.1.1 @@ -4990,6 +5665,7 @@ __metadata: i18next: ^21.9.1 jest: ^28.1.3 js-file-download: ^0.4.12 + jsdom: ^21.1.1 next: ^13.2.1 next-i18next: ^11.3.0 nzbget-api: ^0.0.3 @@ -5005,6 +5681,7 @@ __metadata: typescript: ^4.7.4 uuid: ^8.3.2 video.js: ^8.0.3 + vitest: ^0.29.3 xml-js: ^1.6.11 yarn: ^1.22.19 zustand: ^4.1.4 @@ -5021,6 +5698,15 @@ __metadata: languageName: node linkType: hard +"html-encoding-sniffer@npm:^3.0.0": + version: 3.0.0 + resolution: "html-encoding-sniffer@npm:3.0.0" + dependencies: + whatwg-encoding: ^2.0.0 + checksum: 8d806aa00487e279e5ccb573366a951a9f68f65c90298eac9c3a2b440a7ffe46615aff2995a2f61c6746c639234e6179a97e18ca5ccbbf93d3725ef2099a4502 + languageName: node + linkType: hard + "html-entities@npm:^2.3.3": version: 2.3.3 resolution: "html-entities@npm:2.3.3" @@ -5123,7 +5809,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^5.0.0": +"https-proxy-agent@npm:^5.0.0, https-proxy-agent@npm:^5.0.1": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" dependencies: @@ -5165,7 +5851,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:^0.6.2": +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: @@ -5389,6 +6075,13 @@ __metadata: languageName: node linkType: hard +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d + languageName: node + linkType: hard + "is-function@npm:^1.0.1": version: 1.0.2 resolution: "is-function@npm:1.0.2" @@ -5456,6 +6149,13 @@ __metadata: languageName: node linkType: hard +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab + languageName: node + linkType: hard + "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -6116,6 +6816,45 @@ __metadata: languageName: node linkType: hard +"jsdom@npm:^21.1.1": + version: 21.1.1 + resolution: "jsdom@npm:21.1.1" + dependencies: + abab: ^2.0.6 + acorn: ^8.8.2 + acorn-globals: ^7.0.0 + cssstyle: ^3.0.0 + data-urls: ^4.0.0 + decimal.js: ^10.4.3 + domexception: ^4.0.0 + escodegen: ^2.0.0 + form-data: ^4.0.0 + html-encoding-sniffer: ^3.0.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.1 + is-potential-custom-element-name: ^1.0.1 + nwsapi: ^2.2.2 + parse5: ^7.1.2 + rrweb-cssom: ^0.6.0 + saxes: ^6.0.0 + symbol-tree: ^3.2.4 + tough-cookie: ^4.1.2 + w3c-xmlserializer: ^4.0.0 + webidl-conversions: ^7.0.0 + whatwg-encoding: ^2.0.0 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^12.0.1 + ws: ^8.13.0 + xml-name-validator: ^4.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: ea33c3f3f084b48685e3838baa1112f0cbffc2949b0249f90ee19152b66dbafc6ae7dd8573ee66933697f881e3bc04c0efc2b56cd26f64fd3e6321a64164e2d1 + languageName: node + linkType: hard + "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -6173,6 +6912,13 @@ __metadata: languageName: node linkType: hard +"jsonc-parser@npm:^3.2.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 + languageName: node + linkType: hard + "jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.3": version: 3.3.3 resolution: "jsx-ast-utils@npm:3.3.3" @@ -6246,6 +6992,16 @@ __metadata: languageName: node linkType: hard +"levn@npm:~0.3.0": + version: 0.3.0 + resolution: "levn@npm:0.3.0" + dependencies: + prelude-ls: ~1.1.2 + type-check: ~0.3.2 + checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e + languageName: node + linkType: hard + "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -6253,6 +7009,13 @@ __metadata: languageName: node linkType: hard +"local-pkg@npm:^0.4.2": + version: 0.4.3 + resolution: "local-pkg@npm:0.4.3" + checksum: 7825aca531dd6afa3a3712a0208697aa4a5cd009065f32e3fb732aafcc42ed11f277b5ac67229222e96f4def55197171cdf3d5522d0381b489d2e5547b407d55 + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -6296,6 +7059,15 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^2.3.1, loupe@npm:^2.3.6": + version: 2.3.6 + resolution: "loupe@npm:2.3.6" + dependencies: + get-func-name: ^2.0.0 + checksum: cc83f1b124a1df7384601d72d8d1f5fe95fd7a8185469fec48bb2e4027e45243949e7a013e8d91051a138451ff0552310c32aa9786e60b6a30d1e801bdc2163f + languageName: node + linkType: hard + "lowercase-keys@npm:^2.0.0": version: 2.0.0 resolution: "lowercase-keys@npm:2.0.0" @@ -6335,6 +7107,15 @@ __metadata: languageName: node linkType: hard +"lz-string@npm:^1.5.0": + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" + bin: + lz-string: bin/bin.js + checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d + languageName: node + linkType: hard + "m3u8-parser@npm:^6.0.0": version: 6.0.0 resolution: "m3u8-parser@npm:6.0.0" @@ -6346,6 +7127,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.27.0": + version: 0.27.0 + resolution: "magic-string@npm:0.27.0" + dependencies: + "@jridgewell/sourcemap-codec": ^1.4.13 + checksum: 273faaa50baadb7a2df6e442eac34ad611304fc08fe16e24fe2e472fd944bfcb73ffb50d2dc972dc04e92784222002af46868cb9698b1be181c81830fd95a13e + languageName: node + linkType: hard + "make-dir@npm:^3.0.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -6583,6 +7373,18 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.1.0, mlly@npm:^1.1.1": + version: 1.2.0 + resolution: "mlly@npm:1.2.0" + dependencies: + acorn: ^8.8.2 + pathe: ^1.1.0 + pkg-types: ^1.0.2 + ufo: ^1.1.1 + checksum: 640b019eb20e8e556bd623141b861d47e5c05f8af00210376ce1015912695dbd93a38cfe7ba18ca04f00e75645378f0f94a48a90bfa6e1b5dee1f0ec9c14eed1 + languageName: node + linkType: hard + "mpd-parser@npm:^1.0.1": version: 1.0.1 resolution: "mpd-parser@npm:1.0.1" @@ -6869,6 +7671,13 @@ __metadata: languageName: node linkType: hard +"nwsapi@npm:^2.2.2": + version: 2.2.2 + resolution: "nwsapi@npm:2.2.2" + checksum: 43769106292bc95f776756ca2f3513dab7b4d506a97c67baec32406447841a35f65f29c1f95ab5d42785210fd41668beed33ca16fa058780be43b101ad73e205 + languageName: node + linkType: hard + "nzbget-api@npm:^0.0.3": version: 0.0.3 resolution: "nzbget-api@npm:0.0.3" @@ -7000,6 +7809,20 @@ __metadata: languageName: node linkType: hard +"optionator@npm:^0.8.1": + version: 0.8.3 + resolution: "optionator@npm:0.8.3" + dependencies: + deep-is: ~0.1.3 + fast-levenshtein: ~2.0.6 + levn: ~0.3.0 + prelude-ls: ~1.1.2 + type-check: ~0.3.2 + word-wrap: ~1.2.3 + checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 + languageName: node + linkType: hard + "optionator@npm:^0.9.1": version: 0.9.1 resolution: "optionator@npm:0.9.1" @@ -7046,6 +7869,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: ^1.0.0 + checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b + languageName: node + linkType: hard + "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -7101,6 +7933,15 @@ __metadata: languageName: node linkType: hard +"parse5@npm:^7.1.2": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: ^4.4.0 + checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -7136,6 +7977,20 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^1.1.0": + version: 1.1.0 + resolution: "pathe@npm:1.1.0" + checksum: 6b9be9968ea08a90c0824934799707a1c6a1ad22ac1f22080f377e3f75856d5e53a331b01d327329bfce538a14590587cfb250e8e7947f64408797c84c252056 + languageName: node + linkType: hard + +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -7177,6 +8032,17 @@ __metadata: languageName: node linkType: hard +"pkg-types@npm:^1.0.2": + version: 1.0.2 + resolution: "pkg-types@npm:1.0.2" + dependencies: + jsonc-parser: ^3.2.0 + mlly: ^1.1.1 + pathe: ^1.1.0 + checksum: 2d0a70c1721c2ebbe075b912531a4f43136e6658fdcc59dc76c39966201ab5ddf265868d1211943183406d4b70d373c17e3b176487bc2020ea737d030b0fd080 + languageName: node + linkType: hard + "postcss@npm:8.4.14": version: 8.4.14 resolution: "postcss@npm:8.4.14" @@ -7188,6 +8054,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.21": + version: 8.4.21 + resolution: "postcss@npm:8.4.21" + dependencies: + nanoid: ^3.3.4 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: e39ac60ccd1542d4f9d93d894048aac0d686b3bb38e927d8386005718e6793dbbb46930f0a523fe382f1bbd843c6d980aaea791252bf5e176180e5a4336d9679 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -7195,6 +8072,13 @@ __metadata: languageName: node linkType: hard +"prelude-ls@npm:~1.1.2": + version: 1.1.2 + resolution: "prelude-ls@npm:1.1.2" + checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 + languageName: node + linkType: hard + "prettier@npm:^2.7.1": version: 2.8.4 resolution: "prettier@npm:2.8.4" @@ -7204,6 +8088,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^27.0.2, pretty-format@npm:^27.5.1": + version: 27.5.1 + resolution: "pretty-format@npm:27.5.1" + dependencies: + ansi-regex: ^5.0.1 + ansi-styles: ^5.0.0 + react-is: ^17.0.1 + checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 + languageName: node + linkType: hard + "pretty-format@npm:^28.1.3": version: 28.1.3 resolution: "pretty-format@npm:28.1.3" @@ -7292,7 +8187,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.0": version: 2.3.0 resolution: "punycode@npm:2.3.0" checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 @@ -7377,6 +8272,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^17.0.1": + version: 17.0.2 + resolution: "react-is@npm:17.0.2" + checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 + languageName: node + linkType: hard + "react-is@npm:^18.0.0": version: 18.2.0 resolution: "react-is@npm:18.2.0" @@ -7398,6 +8300,13 @@ __metadata: languageName: node linkType: hard +"react-refresh@npm:^0.14.0": + version: 0.14.0 + resolution: "react-refresh@npm:0.14.0" + checksum: dc69fa8c993df512f42dd0f1b604978ae89bd747c0ed5ec595c0cc50d535fb2696619ccd98ae28775cc01d0a7c146a532f0f7fb81dc22e1977c242a4912312f4 + languageName: node + linkType: hard + "react-simple-code-editor@npm:^0.13.1": version: 0.13.1 resolution: "react-simple-code-editor@npm:0.13.1" @@ -7670,6 +8579,27 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^3.18.0": + version: 3.19.1 + resolution: "rollup@npm:3.19.1" + dependencies: + fsevents: ~2.3.2 + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: f78198c6de224b26650c70b16db156762d1fcceeb375d34fb2c76fc5b23a78f712c3c881d3248e6f277a511589e20d50c247bcf5c7920f1ddc0a43cadf9f0140 + languageName: node + linkType: hard + +"rrweb-cssom@npm:^0.6.0": + version: 0.6.0 + resolution: "rrweb-cssom@npm:0.6.0" + checksum: 182312f6e4f41d18230ccc34f14263bc8e8a6b9d30ee3ec0d2d8e643c6f27964cd7a8d638d4a00e988d93e8dc55369f4ab5a473ccfeff7a8bab95b36d2b5499c + languageName: node + linkType: hard + "rss-parser@npm:^3.12.0": version: 3.12.0 resolution: "rss-parser@npm:3.12.0" @@ -7769,6 +8699,15 @@ __metadata: languageName: node linkType: hard +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" + dependencies: + xmlchars: ^2.2.0 + checksum: d3fa3e2aaf6c65ed52ee993aff1891fc47d5e47d515164b5449cbf5da2cbdc396137e55590472e64c5c436c14ae64a8a03c29b9e7389fc6f14035cf4e982ef3b + languageName: node + linkType: hard + "scheduler@npm:^0.23.0": version: 0.23.0 resolution: "scheduler@npm:0.23.0" @@ -7832,6 +8771,13 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 8aa5a98640ca09fe00d74416eca97551b3e42991614a3d1b824b115fc1401543650914f651ab1311518177e4d297e80b953f4cd4cd7ea1eabe824e8f2091de01 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -7850,6 +8796,17 @@ __metadata: languageName: node linkType: hard +"sirv@npm:^2.0.2": + version: 2.0.2 + resolution: "sirv@npm:2.0.2" + dependencies: + "@polka/url": ^1.0.0-next.20 + mrmime: ^1.0.0 + totalist: ^3.0.0 + checksum: 6982f8ecee9392d246d7eeea8144e50334fe1b46a4fa942995a844ea88c2d518b17cce781bb09926c9a5692a7002a207d18dfd67af2aa538a15e733dc2042298 + languageName: node + linkType: hard + "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -7864,6 +8821,16 @@ __metadata: languageName: node linkType: hard +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: ^6.0.0 + is-fullwidth-code-point: ^4.0.0 + checksum: 7e600a2a55e333a21ef5214b987c8358fe28bfb03c2867ff2cbf919d62143d1812ac27b4297a077fdaf27a03da3678e49551c93e35f9498a3d90221908a1180e + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -7916,7 +8883,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1": +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 @@ -7972,6 +8939,20 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 + languageName: node + linkType: hard + +"std-env@npm:^3.3.1": + version: 3.3.2 + resolution: "std-env@npm:3.3.2" + checksum: c02256bb041ba1870d23f8360bc7e47a9cf1fabcd02c8b7c4246d48f2c6bb47b4f45c70964348844e6d36521df84c4a9d09d468654b51e0eb5c600e3392b4570 + languageName: node + linkType: hard + "stop-iteration-iterator@npm:^1.0.0": version: 1.0.0 resolution: "stop-iteration-iterator@npm:1.0.0" @@ -8002,6 +8983,17 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^5.0.0": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + "string.prototype.matchall@npm:^4.0.8": version: 4.0.8 resolution: "string.prototype.matchall@npm:4.0.8" @@ -8074,6 +9066,15 @@ __metadata: languageName: node linkType: hard +"strip-ansi@npm:^7.0.1": + version: 7.0.1 + resolution: "strip-ansi@npm:7.0.1" + dependencies: + ansi-regex: ^6.0.1 + checksum: 257f78fa433520e7f9897722731d78599cb3fce29ff26a20a5e12ba4957463b50a01136f37c43707f4951817a75e90820174853d6ccc240997adc5df8f966039 + languageName: node + linkType: hard + "strip-bom@npm:^3.0.0": version: 3.0.0 resolution: "strip-bom@npm:3.0.0" @@ -8102,6 +9103,15 @@ __metadata: languageName: node linkType: hard +"strip-literal@npm:^1.0.0": + version: 1.0.1 + resolution: "strip-literal@npm:1.0.1" + dependencies: + acorn: ^8.8.2 + checksum: ab40496820f02220390d95cdd620a997168efb69d5bd7d180bc4ef83ca562a95447843d8c7c88b8284879a29cf4eedc89d8001d1e098c1a1e23d12a9c755dff4 + languageName: node + linkType: hard + "style-to-js@npm:1.1.0": version: 1.1.0 resolution: "style-to-js@npm:1.1.0" @@ -8196,6 +9206,13 @@ __metadata: languageName: node linkType: hard +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d + languageName: node + linkType: hard + "tabbable@npm:^6.0.1": version: 6.1.1 resolution: "tabbable@npm:6.1.1" @@ -8287,6 +9304,27 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.3.1": + version: 2.4.0 + resolution: "tinybench@npm:2.4.0" + checksum: cfbe90f75755488653dde256019cc810f65e90f63fdd962e71e8b209b49598c5fc90c2227d2087eb807944895fafe7f12fe9ecae2b5e89db5adde66415e9b836 + languageName: node + linkType: hard + +"tinypool@npm:^0.3.1": + version: 0.3.1 + resolution: "tinypool@npm:0.3.1" + checksum: 23af5f3889ccab1619a0459748bd419db52b5cbdfd409241f8d42993ace485af5fa4eb3d945e5c37f4b90690b727b7858696967b00b4292149b5d71fb5848185 + languageName: node + linkType: hard + +"tinyspy@npm:^1.0.2": + version: 1.1.1 + resolution: "tinyspy@npm:1.1.1" + checksum: 4ea908fdfddb92044c4454193ec543f5980ced0bd25c5b3d240a94c1511e47e765ad39cd13ae6d3370fb730f62038eedc357f55e4e239416e126bc418f0eee79 + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -8317,6 +9355,13 @@ __metadata: languageName: node linkType: hard +"totalist@npm:^3.0.0": + version: 3.0.0 + resolution: "totalist@npm:3.0.0" + checksum: ec499bddfc73d5b6c73f8ff68afd7bed286705797f928a11177fee5d1ee80e9052ffcb434638437702e16864bd5490f437a54f79bfea9564e875d34ed3254bca + languageName: node + linkType: hard + "tough-cookie@npm:^4.0.0, tough-cookie@npm:^4.1.2": version: 4.1.2 resolution: "tough-cookie@npm:4.1.2" @@ -8329,6 +9374,15 @@ __metadata: languageName: node linkType: hard +"tr46@npm:^4.1.1": + version: 4.1.1 + resolution: "tr46@npm:4.1.1" + dependencies: + punycode: ^2.3.0 + checksum: aeeb821ac2cd792e63ec84888b4fd6598ac6ed75d861579e21a5cf9d4ee78b2c6b94e7d45036f2ca2088bc85b9b46560ad23c4482979421063b24137349dbd96 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.14.1": version: 3.14.1 resolution: "tsconfig-paths@npm:3.14.1" @@ -8453,7 +9507,16 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8": +"type-check@npm:~0.3.2": + version: 0.3.2 + resolution: "type-check@npm:0.3.2" + dependencies: + prelude-ls: ~1.1.2 + checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 + languageName: node + linkType: hard + +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 @@ -8505,6 +9568,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.1.1": + version: 1.1.1 + resolution: "ufo@npm:1.1.1" + checksum: 6bd210ed93d8c0dedd76c456b1d1dfb0e3b08c2216ee6080e61f0f545de0bac24b3d3a5530cd6a403810855f8d8fc3922583965296142e04cfc287442635e6c7 + languageName: node + linkType: hard + "unbox-primitive@npm:^1.0.2": version: 1.0.2 resolution: "unbox-primitive@npm:1.0.2" @@ -8702,6 +9772,111 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:0.29.3": + version: 0.29.3 + resolution: "vite-node@npm:0.29.3" + dependencies: + cac: ^6.7.14 + debug: ^4.3.4 + mlly: ^1.1.0 + pathe: ^1.1.0 + picocolors: ^1.0.0 + vite: ^3.0.0 || ^4.0.0 + bin: + vite-node: vite-node.mjs + checksum: 8bf0a5377d41276f2343819dca5638cab1fb23e55331d06915c5ea0edcc5d593ed295d4c1d1e874f3d7a6c980c25b1c08d9c83d1cff836681ec5778d39583e0b + languageName: node + linkType: hard + +"vite@npm:^3.0.0 || ^4.0.0": + version: 4.2.0 + resolution: "vite@npm:4.2.0" + dependencies: + esbuild: ^0.17.5 + fsevents: ~2.3.2 + postcss: ^8.4.21 + resolve: ^1.22.1 + rollup: ^3.18.0 + peerDependencies: + "@types/node": ">= 14" + less: "*" + sass: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 1088cdc0c89ab835aab07a0a114397b749e8dfb20f4b94241ba179d9c371b72d31e13782b22893860c3d65da596e43b24fce5e023f79cfde427f42549f2e1844 + languageName: node + linkType: hard + +"vitest@npm:^0.29.3": + version: 0.29.3 + resolution: "vitest@npm:0.29.3" + dependencies: + "@types/chai": ^4.3.4 + "@types/chai-subset": ^1.3.3 + "@types/node": "*" + "@vitest/expect": 0.29.3 + "@vitest/runner": 0.29.3 + "@vitest/spy": 0.29.3 + "@vitest/utils": 0.29.3 + acorn: ^8.8.1 + acorn-walk: ^8.2.0 + cac: ^6.7.14 + chai: ^4.3.7 + debug: ^4.3.4 + local-pkg: ^0.4.2 + pathe: ^1.1.0 + picocolors: ^1.0.0 + source-map: ^0.6.1 + std-env: ^3.3.1 + strip-literal: ^1.0.0 + tinybench: ^2.3.1 + tinypool: ^0.3.1 + tinyspy: ^1.0.2 + vite: ^3.0.0 || ^4.0.0 + vite-node: 0.29.3 + why-is-node-running: ^2.2.2 + peerDependencies: + "@edge-runtime/vm": "*" + "@vitest/browser": "*" + "@vitest/ui": "*" + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: c0f87c365d6fff9221e92dba0bdb0ae81af390b4f8da5af2a72c789c11d1cc0f09995d5fc6f9557832e7533436af7f6d595116557d376dedf5ce4f5951cbcb2c + languageName: node + linkType: hard + "void-elements@npm:3.1.0": version: 3.1.0 resolution: "void-elements@npm:3.1.0" @@ -8709,6 +9884,15 @@ __metadata: languageName: node linkType: hard +"w3c-xmlserializer@npm:^4.0.0": + version: 4.0.0 + resolution: "w3c-xmlserializer@npm:4.0.0" + dependencies: + xml-name-validator: ^4.0.0 + checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 + languageName: node + linkType: hard + "walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -8725,6 +9909,13 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b + languageName: node + linkType: hard + "webpack-bundle-analyzer@npm:4.3.0": version: 4.3.0 resolution: "webpack-bundle-analyzer@npm:4.3.0" @@ -8744,6 +9935,32 @@ __metadata: languageName: node linkType: hard +"whatwg-encoding@npm:^2.0.0": + version: 2.0.0 + resolution: "whatwg-encoding@npm:2.0.0" + dependencies: + iconv-lite: 0.6.3 + checksum: 7087810c410aa9b689cbd6af8773341a53cdc1f3aae2a882c163bd5522ec8ca4cdfc269aef417a5792f411807d5d77d50df4c24e3abb00bb60192858a40cc675 + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 + languageName: node + linkType: hard + +"whatwg-url@npm:^12.0.0, whatwg-url@npm:^12.0.1": + version: 12.0.1 + resolution: "whatwg-url@npm:12.0.1" + dependencies: + tr46: ^4.1.1 + webidl-conversions: ^7.0.0 + checksum: 8698993b763c1e7eda5ed16c31dab24bca6489626aca7caf8b5a2b64684dda6578194786f10ec42ceb1c175feea16d0a915096e6419e08d154ce551c43176972 + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2" @@ -8794,6 +10011,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.2.2": + version: 2.2.2 + resolution: "why-is-node-running@npm:2.2.2" + dependencies: + siginfo: ^2.0.0 + stackback: 0.0.2 + bin: + why-is-node-running: cli.js + checksum: 50820428f6a82dfc3cbce661570bcae9b658723217359b6037b67e495255409b4c8bc7931745f5c175df71210450464517cab32b2f7458ac9c40b4925065200a + languageName: node + linkType: hard + "wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" @@ -8803,7 +10032,7 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:^1.2.3": +"word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": version: 1.2.3 resolution: "word-wrap@npm:1.2.3" checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f @@ -8853,6 +10082,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + languageName: node + linkType: hard + "xml-js@npm:^1.6.11": version: 1.6.11 resolution: "xml-js@npm:1.6.11" @@ -8864,6 +10108,13 @@ __metadata: languageName: node linkType: hard +"xml-name-validator@npm:^4.0.0": + version: 4.0.0 + resolution: "xml-name-validator@npm:4.0.0" + checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad + languageName: node + linkType: hard + "xml2js@npm:^0.4.19": version: 0.4.23 resolution: "xml2js@npm:0.4.23" @@ -8881,6 +10132,13 @@ __metadata: languageName: node linkType: hard +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 + languageName: node + linkType: hard + "xtend@npm:^4.0.0": version: 4.0.2 resolution: "xtend@npm:4.0.2" @@ -8964,6 +10222,13 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 + languageName: node + linkType: hard + "zustand@npm:^4.1.4": version: 4.3.3 resolution: "zustand@npm:4.3.3" From 464b9d4142a79ec85b42cab097fb12d996b2cc24 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Fri, 17 Mar 2023 22:40:14 +0100 Subject: [PATCH 25/98] =?UTF-8?q?=F0=9F=9A=A8=20Fix=20nestjs=20warnings,?= =?UTF-8?q?=20remove=20old=20eslint=20plugins?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 10 +- next-i18next.config.js | 13 +- next.config.js | 2 +- package.json | 14 +- src/modules/Docker/ContainerActionBar.tsx | 27 +- src/pages/404.tsx | 10 +- src/pages/[slug].tsx | 2 +- src/pages/index.tsx | 2 +- src/tools/server/getServerSideTranslations.ts | 17 +- yarn.lock | 1973 +---------------- 10 files changed, 181 insertions(+), 1889 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index f9e126647..4c527d3ab 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,12 +2,12 @@ module.exports = { extends: [ 'mantine', 'plugin:@next/next/recommended', - 'plugin:jest/recommended', 'eslint:recommended', 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended', + 'plugin:vitest/recommended', ], - plugins: ['testing-library', 'jest', 'react-hooks', 'react', 'unused-imports'], + plugins: ['testing-library', 'react-hooks', 'react', 'unused-imports', 'vitest'], overrides: [ { files: ['**/?(*.)+(spec|test).[jt]s?(x)'], @@ -31,5 +31,11 @@ module.exports = { '@typescript-eslint/no-non-null-assertion': 'off', 'no-continue': 'off', 'linebreak-style': 0, + 'vitest/max-nested-describe': [ + 'error', + { + max: 3, + }, + ], }, }; diff --git a/next-i18next.config.js b/next-i18next.config.js index 097721344..71af66b5d 100644 --- a/next-i18next.config.js +++ b/next-i18next.config.js @@ -1,7 +1,6 @@ const path = require('path'); module.exports = { - // https://www.i18next.com/overview/configuration-options#logging i18n: { defaultLocale: 'en', locales: [ @@ -28,12 +27,12 @@ module.exports = { 'sk', 'no', ], - localePath: path.resolve('./public/locales'), - fallbackLng: 'en', + localeDetection: true, - returnEmptyString: false, - debug: false, - appendNamespaceToCIMode: true, - reloadOnPrerender: process.env.NODE_ENV === 'development', }, + returnEmptyString: false, + appendNamespaceToCIMode: true, + reloadOnPrerender: process.env.NODE_ENV === 'development', + fallbackLng: 'en', + localePath: path.resolve('./public/locales'), }; diff --git a/next.config.js b/next.config.js index dde3ec977..187db4b22 100644 --- a/next.config.js +++ b/next.config.js @@ -10,5 +10,5 @@ module.exports = withBundleAnalyzer({ }, reactStrictMode: true, output: 'standalone', - i18n, + i18n: i18n, }); diff --git a/package.json b/package.json index 2cfffc73c..535585964 100644 --- a/package.json +++ b/package.json @@ -9,20 +9,17 @@ }, "scripts": { "dev": "next dev", - "build": "next build", - "analyze": "ANALYZE=true next build", + "build": "vitest run && next build", + "analyze": "vitest run && ANALYZE=true next build", "start": "next start", "typecheck": "tsc --noEmit", - "export": "next build && next export", + "export": "vitest run && next build && next export", "lint": "next lint", - "jest": "jest", - "jest:watch": "jest --watch", "prettier:check": "prettier --check \"**/*.{ts,tsx}\"", "prettier:write": "prettier --write \"**/*.{ts,tsx}\"", "test": "vitest", "test:ui": "vitest --ui", - "test:run": "vitest run", - "ci": "yarn test && yarn lint --fix && yarn typecheck && yarn prettier:write" + "test:run": "vitest run" }, "dependencies": { "@ctrl/deluge": "^4.1.0", @@ -88,13 +85,12 @@ "eslint-config-airbnb-typescript": "^17.0.0", "eslint-config-mantine": "^2.0.0", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jest": "^26.6.0", "eslint-plugin-jsx-a11y": "^6.6.1", "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-testing-library": "^5.5.1", "eslint-plugin-unused-imports": "^2.0.0", - "jest": "^28.1.3", + "eslint-plugin-vitest": "^0.0.54", "jsdom": "^21.1.1", "prettier": "^2.7.1", "sass": "^1.56.1", diff --git a/src/modules/Docker/ContainerActionBar.tsx b/src/modules/Docker/ContainerActionBar.tsx index 427b877ea..2c8a312ad 100644 --- a/src/modules/Docker/ContainerActionBar.tsx +++ b/src/modules/Docker/ContainerActionBar.tsx @@ -17,8 +17,8 @@ import { useState } from 'react'; import { TFunction } from 'react-i18next'; import { v4 as uuidv4 } from 'uuid'; import { useConfigContext } from '../../config/provider'; -import { tryMatchService } from '../../tools/addToHomarr'; import { openContextModalGeneric } from '../../tools/mantineModalManagerExtensions'; +import { MatchingImages, ServiceType, tryMatchPort } from '../../tools/types'; import { AppType } from '../../types/app'; let t: TFunction<'modules/docker', undefined>; @@ -206,3 +206,28 @@ export default function ContainerActionBar({ selected, reload }: ContainerAction ); } + +function tryMatchType(imageName: string): ServiceType { + const match = MatchingImages.find(({ image }) => imageName.includes(image)); + if (match) { + return match.type; + } + // TODO: Remove this legacy code + return 'Other'; +} + +const tryMatchService = (container: Dockerode.ContainerInfo | undefined) => { + if (container === undefined) return {}; + const name = container.Names[0].substring(1); + const type = tryMatchType(container.Image); + const port = tryMatchPort(type.toLowerCase())?.value ?? container.Ports[0]?.PublicPort; + return { + name, + id: container.Id, + type: tryMatchType(container.Image), + url: `localhost${port ? `:${port}` : ''}`, + icon: `https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/${name + .replace(/\s+/g, '-') + .toLowerCase()}.png`, + }; +}; diff --git a/src/pages/404.tsx b/src/pages/404.tsx index aadf66175..97c490dd7 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -9,8 +9,9 @@ import { } from '@mantine/core'; import React from 'react'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { GetServerSidePropsContext } from 'next'; import Link from 'next/link'; +import { getServerSideTranslations } from '../tools/server/getServerSideTranslations'; const useStyles = createStyles((theme) => ({ root: { @@ -94,12 +95,11 @@ export default function Custom404() { ); } - -export async function getStaticProps({ locale }: { locale: string }) { +export async function getStaticProps({ req, res, locale }: GetServerSidePropsContext) { + const translations = await getServerSideTranslations(['common'], locale, undefined, undefined); return { props: { - ...(await serverSideTranslations(locale, ['common'])), - // Will be passed to the page component as props + ...translations, }, }; } diff --git a/src/pages/[slug].tsx b/src/pages/[slug].tsx index c3ac1b272..9ce096887 100644 --- a/src/pages/[slug].tsx +++ b/src/pages/[slug].tsx @@ -23,7 +23,7 @@ export async function getServerSideProps({ const configPath = path.join(process.cwd(), 'data/configs', `${configName}.json`); const configExists = fs.existsSync(configPath); - const translations = await getServerSideTranslations(req, res, dashboardNamespaces, locale); + const translations = await getServerSideTranslations(dashboardNamespaces, locale, req, res); if (!configExists) { // Redirect to 404 diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 5b1f60d8a..7ff04c4cb 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -46,7 +46,7 @@ export async function getServerSideProps({ configName = 'default'; } - const translations = await getServerSideTranslations(req, res, dashboardNamespaces, locale); + const translations = await getServerSideTranslations(dashboardNamespaces, locale, req, res); const config = getFrontendConfig(configName as string); return { diff --git a/src/tools/server/getServerSideTranslations.ts b/src/tools/server/getServerSideTranslations.ts index 5576fafc7..aa782cd7a 100644 --- a/src/tools/server/getServerSideTranslations.ts +++ b/src/tools/server/getServerSideTranslations.ts @@ -3,17 +3,22 @@ import { IncomingMessage, ServerResponse } from 'http'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; export const getServerSideTranslations = async ( - req: IncomingMessage, - res: ServerResponse, namespaces: string[], - requestLocale?: string + requestLocale?: string, + req?: IncomingMessage, + res?: ServerResponse, ) => { + if (!req || !res) { + return await serverSideTranslations( + requestLocale ?? 'en', + namespaces + ); + } + const configLocale = getCookie('config-locale', { req, res }); - const translations = await serverSideTranslations( + return await serverSideTranslations( (configLocale ?? requestLocale ?? 'en') as string, namespaces ); - - return translations; }; diff --git a/yarn.lock b/yarn.lock index fad127708..61f41c148 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,7 +5,7 @@ __metadata: version: 6 cacheKey: 8 -"@ampproject/remapping@npm:^2.1.0, @ampproject/remapping@npm:^2.2.0": +"@ampproject/remapping@npm:^2.2.0": version: 2.2.0 resolution: "@ampproject/remapping@npm:2.2.0" dependencies: @@ -15,7 +15,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.18.6": version: 7.18.6 resolution: "@babel/code-frame@npm:7.18.6" dependencies: @@ -31,29 +31,6 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": - version: 7.20.12 - resolution: "@babel/core@npm:7.20.12" - dependencies: - "@ampproject/remapping": ^2.1.0 - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.7 - "@babel/helper-compilation-targets": ^7.20.7 - "@babel/helper-module-transforms": ^7.20.11 - "@babel/helpers": ^7.20.7 - "@babel/parser": ^7.20.7 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.12 - "@babel/types": ^7.20.7 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.2 - semver: ^6.3.0 - checksum: 62e6c3e2149a70b5c9729ef5f0d3e2e97e9dcde89fc039c8d8e3463d5d7ba9b29ee84d10faf79b61532ac1645aa62f2bd42338320617e6e3a8a4d8e2a27076e7 - languageName: node - linkType: hard - "@babel/core@npm:^7.20.12": version: 7.21.3 resolution: "@babel/core@npm:7.21.3" @@ -77,17 +54,6 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.20.7, @babel/generator@npm:^7.7.2": - version: 7.20.14 - resolution: "@babel/generator@npm:7.20.14" - dependencies: - "@babel/types": ^7.20.7 - "@jridgewell/gen-mapping": ^0.3.2 - jsesc: ^2.5.1 - checksum: 5f6aa2d86af26e76d276923a5c34191124a119b16ee9ccc34aef654a7dec84fbd7d2daed2e6458a6a06bf87f3661deb77c9fea59b8f67faff5c90793c96d76d6 - languageName: node - linkType: hard - "@babel/generator@npm:^7.21.3": version: 7.21.3 resolution: "@babel/generator@npm:7.21.3" @@ -122,16 +88,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-function-name@npm:7.19.0" - dependencies: - "@babel/template": ^7.18.10 - "@babel/types": ^7.19.0 - checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e - languageName: node - linkType: hard - "@babel/helper-function-name@npm:^7.21.0": version: 7.21.0 resolution: "@babel/helper-function-name@npm:7.21.0" @@ -160,22 +116,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.20.11": - version: 7.20.11 - resolution: "@babel/helper-module-transforms@npm:7.20.11" - dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-simple-access": ^7.20.2 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/helper-validator-identifier": ^7.19.1 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.10 - "@babel/types": ^7.20.7 - checksum: 29319ebafa693d48756c6ba0d871677bb0037e0da084fbe221a17c38d57093fc8aa38543c07d76e788266a937976e37ab4901971ca7f237c5ab45f524b9ecca0 - languageName: node - linkType: hard - "@babel/helper-module-transforms@npm:^7.21.2": version: 7.21.2 resolution: "@babel/helper-module-transforms@npm:7.21.2" @@ -192,7 +132,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.8.0": +"@babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2": version: 7.20.2 resolution: "@babel/helper-plugin-utils@npm:7.20.2" checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b @@ -238,17 +178,6 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.20.7": - version: 7.20.13 - resolution: "@babel/helpers@npm:7.20.13" - dependencies: - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.13 - "@babel/types": ^7.20.7 - checksum: d62076fa834f342798f8c3fd7aec0870cc1725d273d99e540cbaa8d6c3ed10258228dd14601c8e66bfeabbb9424c3b31090ecc467fe855f7bd72c4734df7fb09 - languageName: node - linkType: hard - "@babel/helpers@npm:^7.21.0": version: 7.21.0 resolution: "@babel/helpers@npm:7.21.0" @@ -271,7 +200,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.13, @babel/parser@npm:^7.20.7": +"@babel/parser@npm:^7.20.7": version: 7.20.15 resolution: "@babel/parser@npm:7.20.15" bin: @@ -289,149 +218,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 - languageName: node - linkType: hard - -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.8.3": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": ^7.12.13 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.8.3": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.20.0 - resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" - dependencies: - "@babel/helper-plugin-utils": ^7.19.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 - languageName: node - linkType: hard - "@babel/plugin-transform-react-jsx-self@npm:^7.18.6": version: 7.21.0 resolution: "@babel/plugin-transform-react-jsx-self@npm:7.21.0" @@ -463,7 +249,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.20.7": version: 7.20.7 resolution: "@babel/template@npm:7.20.7" dependencies: @@ -474,24 +260,6 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.20.10, @babel/traverse@npm:^7.20.12, @babel/traverse@npm:^7.20.13, @babel/traverse@npm:^7.7.2": - version: 7.20.13 - resolution: "@babel/traverse@npm:7.20.13" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.7 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.20.13 - "@babel/types": ^7.20.7 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 30ca6e0bd18233fda48fa09315efd14dfc61dcf5b8fa3712b343bfc61b32bc63b5e85ea1773cc9576c9b293b96f46b4589aaeb0a52e1f3eeac4edc076d049fc7 - languageName: node - linkType: hard - "@babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.3": version: 7.21.3 resolution: "@babel/traverse@npm:7.21.3" @@ -510,7 +278,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.18.6, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7, @babel/types@npm:^7.8.3": version: 7.20.7 resolution: "@babel/types@npm:7.20.7" dependencies: @@ -539,13 +307,6 @@ __metadata: languageName: node linkType: hard -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 - languageName: node - linkType: hard - "@ctrl/deluge@npm:^4.1.0": version: 4.3.0 resolution: "@ctrl/deluge@npm:4.3.0" @@ -932,6 +693,17 @@ __metadata: languageName: node linkType: hard +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.3.0 + resolution: "@eslint-community/eslint-utils@npm:4.3.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: f487760a692f0f1fef76e248ad72976919576ba57edc2b1b1dc1d182553bae6b5bf7b078e654da85d04f0af8a485d20bd26280002768f4fbcd2e330078340cb0 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^1.4.1": version: 1.4.1 resolution: "@eslint/eslintrc@npm:1.4.1" @@ -1023,26 +795,6 @@ __metadata: languageName: node linkType: hard -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: ^5.3.1 - find-up: ^4.1.0 - get-package-type: ^0.1.0 - js-yaml: ^3.13.1 - resolve-from: ^5.0.0 - checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 - languageName: node - linkType: hard - "@jellyfin/sdk@npm:^0.7.0": version: 0.7.0 resolution: "@jellyfin/sdk@npm:0.7.0" @@ -1053,237 +805,6 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/console@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - slash: ^3.0.0 - checksum: fe50d98d26d02ce2901c76dff4bd5429a33c13affb692c9ebf8a578ca2f38a5dd854363d40d6c394f215150791fd1f692afd8e730a4178dda24107c8dfd9750a - languageName: node - linkType: hard - -"@jest/core@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/core@npm:28.1.3" - dependencies: - "@jest/console": ^28.1.3 - "@jest/reporters": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - ci-info: ^3.2.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-changed-files: ^28.1.3 - jest-config: ^28.1.3 - jest-haste-map: ^28.1.3 - jest-message-util: ^28.1.3 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.3 - jest-resolve-dependencies: ^28.1.3 - jest-runner: ^28.1.3 - jest-runtime: ^28.1.3 - jest-snapshot: ^28.1.3 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - jest-watcher: ^28.1.3 - micromatch: ^4.0.4 - pretty-format: ^28.1.3 - rimraf: ^3.0.0 - slash: ^3.0.0 - strip-ansi: ^6.0.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: cb79f34bafc4637e7130df12257f5b29075892a2be2c7f45c6d4c0420853e80b5dae11016e652530eb234f4c44c00910cdca3c2cd86275721860725073f7d9b4 - languageName: node - linkType: hard - -"@jest/environment@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/environment@npm:28.1.3" - dependencies: - "@jest/fake-timers": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - jest-mock: ^28.1.3 - checksum: 14c496b84aef951df33128cea68988e9de43b2e9d62be9f9c4308d4ac307fa345642813679f80d0a4cedeb900cf6f0b6bb2b92ce089528e8721f72295fdc727f - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect-utils@npm:28.1.3" - dependencies: - jest-get-type: ^28.0.2 - checksum: 808ea3a68292a7e0b95490fdd55605c430b4cf209ea76b5b61bfb2a1badcb41bc046810fe4e364bd5fe04663978aa2bd73d8f8465a761dd7c655aeb44cf22987 - languageName: node - linkType: hard - -"@jest/expect@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect@npm:28.1.3" - dependencies: - expect: ^28.1.3 - jest-snapshot: ^28.1.3 - checksum: 4197f6fdddc33dc45ba4e838f992fc61839c421d7aed0dfe665ef9c2f172bb1df8a8cac9cecee272b40e744a326da521d5e182709fe82a0b936055bfffa3b473 - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/fake-timers@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@sinonjs/fake-timers": ^9.1.2 - "@types/node": "*" - jest-message-util: ^28.1.3 - jest-mock: ^28.1.3 - jest-util: ^28.1.3 - checksum: cec14d5b14913a54dce64a62912c5456235f5d90b509ceae19c727565073114dae1aaf960ac6be96b3eb94789a3a758b96b72c8fca7e49a6ccac415fbc0321e1 - languageName: node - linkType: hard - -"@jest/globals@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/globals@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/expect": ^28.1.3 - "@jest/types": ^28.1.3 - checksum: 3504bb23de629d466c6f2b6b75d2e1c1b10caccbbcfb7eaa82d22cc37711c8e364c243929581184846605c023b475ea6c42c2e3ea5994429a988d8d527af32cd - languageName: node - linkType: hard - -"@jest/reporters@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/reporters@npm:28.1.3" - dependencies: - "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - "@jridgewell/trace-mapping": ^0.3.13 - "@types/node": "*" - chalk: ^4.0.0 - collect-v8-coverage: ^1.0.0 - exit: ^0.1.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^5.1.0 - istanbul-lib-report: ^3.0.0 - istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - jest-worker: ^28.1.3 - slash: ^3.0.0 - string-length: ^4.0.1 - strip-ansi: ^6.0.0 - terminal-link: ^2.0.0 - v8-to-istanbul: ^9.0.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: a7440887ce837922cbeaa64c3232eb48aae02aa9123f29fc4280ad3e1afe4b35dcba171ba1d5fd219037c396c5152d9c2d102cff1798dd5ae3bd33ac4759ae0a - languageName: node - linkType: hard - -"@jest/schemas@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/schemas@npm:28.1.3" - dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de - languageName: node - linkType: hard - -"@jest/source-map@npm:^28.1.2": - version: 28.1.2 - resolution: "@jest/source-map@npm:28.1.2" - dependencies: - "@jridgewell/trace-mapping": ^0.3.13 - callsites: ^3.0.0 - graceful-fs: ^4.2.9 - checksum: b82a5c2e93d35d86779c61a02ccb967d1b5cd2e9dd67d26d8add44958637cbbb99daeeb8129c7653389cb440dc2a2f5ae4d2183dc453c67669ff98938b775a3a - languageName: node - linkType: hard - -"@jest/test-result@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/test-result@npm:28.1.3" - dependencies: - "@jest/console": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: 957a5dd2fd2e84aabe86698f93c0825e96128ccaa23abf548b159a9b08ac74e4bde7acf4bec48479243dbdb27e4ea1b68c171846d21fb64855c6b55cead9ef27 - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/test-sequencer@npm:28.1.3" - dependencies: - "@jest/test-result": ^28.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - slash: ^3.0.0 - checksum: 13f8905e6d1ec8286694146f7be3cf90eff801bbdea5e5c403e6881444bb390ed15494c7b9948aa94bd7e9c9a851e0d3002ed6e7371d048b478596e5b23df953 - languageName: node - linkType: hard - -"@jest/transform@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/transform@npm:28.1.3" - dependencies: - "@babel/core": ^7.11.6 - "@jest/types": ^28.1.3 - "@jridgewell/trace-mapping": ^0.3.13 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - jest-regex-util: ^28.0.2 - jest-util: ^28.1.3 - micromatch: ^4.0.4 - pirates: ^4.0.4 - slash: ^3.0.0 - write-file-atomic: ^4.0.1 - checksum: dadf618936e0aa84342f07f532801d5bed43cdf95d1417b929e4f8782c872cff1adc84096d5a287a796d0039a2691c06d8450cce5a713a8b52fbb9f872a1e760 - languageName: node - linkType: hard - -"@jest/types@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/types@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.3 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: 1e258d9c063fcf59ebc91e46d5ea5984674ac7ae6cae3e50aa780d22b4405bf2c925f40350bf30013839eb5d4b5e521d956ddf8f3b7c78debef0e75a07f57350 - languageName: node - linkType: hard - "@jridgewell/gen-mapping@npm:^0.1.0": version: 0.1.1 resolution: "@jridgewell/gen-mapping@npm:0.1.1" @@ -1326,7 +847,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.17 resolution: "@jridgewell/trace-mapping@npm:0.3.17" dependencies: @@ -2066,13 +1587,6 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.24.1": - version: 0.24.51 - resolution: "@sinclair/typebox@npm:0.24.51" - checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 - languageName: node - linkType: hard - "@sindresorhus/is@npm:^4.0.0": version: 4.6.0 resolution: "@sindresorhus/is@npm:4.6.0" @@ -2087,24 +1601,6 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^1.7.0": - version: 1.8.6 - resolution: "@sinonjs/commons@npm:1.8.6" - dependencies: - type-detect: 4.0.8 - checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^9.1.2": - version: 9.1.2 - resolution: "@sinonjs/fake-timers@npm:9.1.2" - dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6 - languageName: node - linkType: hard - "@swc/helpers@npm:0.4.14": version: 0.4.14 resolution: "@swc/helpers@npm:0.4.14" @@ -2241,47 +1737,6 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.1.14": - version: 7.20.0 - resolution: "@types/babel__core@npm:7.20.0" - dependencies: - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - "@types/babel__generator": "*" - "@types/babel__template": "*" - "@types/babel__traverse": "*" - checksum: 49b601a0a7637f1f387442c8156bd086cfd10ff4b82b0e1994e73a6396643b5435366fb33d6b604eade8467cca594ef97adcbc412aede90bb112ebe88d0ad6df - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.6.4 - resolution: "@types/babel__generator@npm:7.6.4" - dependencies: - "@babel/types": ^7.0.0 - checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" - dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 - checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee - languageName: node - linkType: hard - -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.18.3 - resolution: "@types/babel__traverse@npm:7.18.3" - dependencies: - "@babel/types": ^7.3.0 - checksum: d20953338b2f012ab7750932ece0a78e7d1645b0a6ff42d49be90f55e9998085da1374a9786a7da252df89555c6586695ba4d1d4b4e88ab2b9f306bcd35e00d3 - languageName: node - linkType: hard - "@types/cacheable-request@npm:^6.0.1": version: 6.0.3 resolution: "@types/cacheable-request@npm:6.0.3" @@ -2337,15 +1792,6 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.3": - version: 4.1.6 - resolution: "@types/graceful-fs@npm:4.1.6" - dependencies: - "@types/node": "*" - checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 - languageName: node - linkType: hard - "@types/hoist-non-react-statics@npm:^3.3.1": version: 3.3.1 resolution: "@types/hoist-non-react-statics@npm:3.3.1" @@ -2363,31 +1809,6 @@ __metadata: languageName: node linkType: hard -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.4 - resolution: "@types/istanbul-lib-coverage@npm:2.0.4" - checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 - languageName: node - linkType: hard - -"@types/istanbul-lib-report@npm:*": - version: 3.0.0 - resolution: "@types/istanbul-lib-report@npm:3.0.0" - dependencies: - "@types/istanbul-lib-coverage": "*" - checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36 - languageName: node - linkType: hard - -"@types/istanbul-reports@npm:^3.0.0": - version: 3.0.1 - resolution: "@types/istanbul-reports@npm:3.0.1" - dependencies: - "@types/istanbul-lib-report": "*" - checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 - languageName: node - linkType: hard - "@types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" @@ -2439,13 +1860,6 @@ __metadata: languageName: node linkType: hard -"@types/prettier@npm:^2.1.5": - version: 2.7.2 - resolution: "@types/prettier@npm:2.7.2" - checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 - languageName: node - linkType: hard - "@types/prismjs@npm:^1.26.0": version: 1.26.0 resolution: "@types/prismjs@npm:1.26.0" @@ -2504,13 +1918,6 @@ __metadata: languageName: node linkType: hard -"@types/stack-utils@npm:^2.0.0": - version: 2.0.1 - resolution: "@types/stack-utils@npm:2.0.1" - checksum: 205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 - languageName: node - linkType: hard - "@types/uuid@npm:^8.3.4": version: 8.3.4 resolution: "@types/uuid@npm:8.3.4" @@ -2525,22 +1932,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs-parser@npm:*": - version: 21.0.0 - resolution: "@types/yargs-parser@npm:21.0.0" - checksum: b2f4c8d12ac18a567440379909127cf2cec393daffb73f246d0a25df36ea983b93b7e9e824251f959e9f928cbc7c1aab6728d0a0ff15d6145f66cec2be67d9a2 - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.8": - version: 17.0.22 - resolution: "@types/yargs@npm:17.0.22" - dependencies: - "@types/yargs-parser": "*" - checksum: 0773523fda71bafdc52f13f5970039e535a353665a60ba9261149a5c9c2b908242e6e77fbb7a8c06931ec78ce889d64d09673c68ba23eb5f5742d5385d0d1982 - languageName: node - linkType: hard - "@typescript-eslint/eslint-plugin@npm:^5.30.7": version: 5.52.0 resolution: "@typescript-eslint/eslint-plugin@npm:5.52.0" @@ -2592,6 +1983,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:5.55.0": + version: 5.55.0 + resolution: "@typescript-eslint/scope-manager@npm:5.55.0" + dependencies: + "@typescript-eslint/types": 5.55.0 + "@typescript-eslint/visitor-keys": 5.55.0 + checksum: f253db88f69a29e4abe2f567d0a611cc3e7fb1a911a2cc54a2f6baf16e3de4d1883b3f8e45ee61b3db9fa5543dda0fd7b608de9d28ba6173ab49bfd17ff90cad + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:5.52.0": version: 5.52.0 resolution: "@typescript-eslint/type-utils@npm:5.52.0" @@ -2616,6 +2017,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.55.0": + version: 5.55.0 + resolution: "@typescript-eslint/types@npm:5.55.0" + checksum: 7d851f09a2106514d3a9c7164d34758f30abfe554e3c7a02be75cdc7e16644e23ca32840a8f39a0321bc509927fb4d98ce91b22b21e8544ac56cef33b815a864 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.52.0": version: 5.52.0 resolution: "@typescript-eslint/typescript-estree@npm:5.52.0" @@ -2634,7 +2042,25 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.52.0, @typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.43.0": +"@typescript-eslint/typescript-estree@npm:5.55.0": + version: 5.55.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.55.0" + dependencies: + "@typescript-eslint/types": 5.55.0 + "@typescript-eslint/visitor-keys": 5.55.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: d24a11aee3d01067018d99804f420aecb8af88e43bf170d5d14f6480bd378c0a81ce49a37f5d6c36e5f0f319e3fa8b099720f295f2767338be1a4f7e9a5323e1 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.52.0, @typescript-eslint/utils@npm:^5.43.0": version: 5.52.0 resolution: "@typescript-eslint/utils@npm:5.52.0" dependencies: @@ -2652,6 +2078,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:^5.53.0": + version: 5.55.0 + resolution: "@typescript-eslint/utils@npm:5.55.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.55.0 + "@typescript-eslint/types": 5.55.0 + "@typescript-eslint/typescript-estree": 5.55.0 + eslint-scope: ^5.1.1 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 368cfc3fb9d6af6901e739e2e41c3f7f1c1244576607445f4f59d95eccb237f73e1a75e7f0816ec9a32a0f1ec6bb4a3602a99e17e70fe184e62f7c69dcbe4b8d + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:5.52.0": version: 5.52.0 resolution: "@typescript-eslint/visitor-keys@npm:5.52.0" @@ -2662,6 +2106,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.55.0": + version: 5.55.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.55.0" + dependencies: + "@typescript-eslint/types": 5.55.0 + eslint-visitor-keys: ^3.3.0 + checksum: 0b24c72dff99dd2cf41c19d20067f8ab20a38aa2e82c79c5530bec7cf651031e95c80702fc21c813c9b94e5f3d4cd210f13967b2966ef38abe548cb5f05848a3 + languageName: node + linkType: hard + "@videojs/http-streaming@npm:3.0.0": version: 3.0.0 resolution: "@videojs/http-streaming@npm:3.0.0" @@ -2894,15 +2348,6 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: ^0.21.3 - checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -2926,7 +2371,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": +"ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -2949,7 +2394,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": +"anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -2976,15 +2421,6 @@ __metadata: languageName: node linkType: hard -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: ~1.0.2 - checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 - languageName: node - linkType: hard - "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -3143,48 +2579,6 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-jest@npm:28.1.3" - dependencies: - "@jest/transform": ^28.1.3 - "@types/babel__core": ^7.1.14 - babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^28.1.3 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - slash: ^3.0.0 - peerDependencies: - "@babel/core": ^7.8.0 - checksum: 57ccd2296e1839687b5df2fd138c3d00717e0369e385254b012ccd4ee70e75f5d5c8e6cfcdf92d155015b468cfebb847b38e69bb5805d8aaf730e20575127cc6 - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@istanbuljs/load-nyc-config": ^1.0.0 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-instrument: ^5.0.4 - test-exclude: ^6.0.0 - checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-plugin-jest-hoist@npm:28.1.3" - dependencies: - "@babel/template": ^7.3.3 - "@babel/types": ^7.3.3 - "@types/babel__core": ^7.1.14 - "@types/babel__traverse": ^7.0.6 - checksum: 648d89f9d80f6450ce7e50d0c32eb91b7f26269b47c3e37aaf2e0f2f66a980978345bd6b8c9b8c3aa6a8252ad2bc2c9fb50630e9895622c9a0972af5f70ed20e - languageName: node - linkType: hard - "babel-plugin-macros@npm:^3.1.0": version: 3.1.0 resolution: "babel-plugin-macros@npm:3.1.0" @@ -3196,40 +2590,6 @@ __metadata: languageName: node linkType: hard -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" - dependencies: - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.8.3 - "@babel/plugin-syntax-import-meta": ^7.8.3 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.8.3 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-top-level-await": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 - languageName: node - linkType: hard - -"babel-preset-jest@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-preset-jest@npm:28.1.3" - dependencies: - babel-plugin-jest-hoist: ^28.1.3 - babel-preset-current-node-syntax: ^1.0.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 8248a4a5ca4242cc06ad13b10b9183ad2664da8fb0da060c352223dcf286f0ce9c708fa17901dc44ecabec25e6d309e5e5b9830a61dd777c3925f187a345a47d - languageName: node - linkType: hard - "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -3313,22 +2673,6 @@ __metadata: languageName: node linkType: hard -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: ^0.4.0 - checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - "buffer-from@npm:~0.1.1": version: 0.1.2 resolution: "buffer-from@npm:0.1.2" @@ -3447,20 +2791,6 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - -"camelcase@npm:^6.2.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d - languageName: node - linkType: hard - "caniuse-lite@npm:^1.0.30001406, caniuse-lite@npm:^1.0.30001449": version: 1.0.30001456 resolution: "caniuse-lite@npm:1.0.30001456" @@ -3504,13 +2834,6 @@ __metadata: languageName: node linkType: hard -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 - languageName: node - linkType: hard - "check-error@npm:^1.0.2": version: 1.0.2 resolution: "check-error@npm:1.0.2" @@ -3551,20 +2874,6 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.2.0": - version: 3.8.0 - resolution: "ci-info@npm:3.8.0" - checksum: d0a4d3160497cae54294974a7246202244fff031b0a6ea20dd57b10ec510aa17399c41a1b0982142c105f3255aff2173e5c0dd7302ee1b2f28ba3debda375098 - languageName: node - linkType: hard - -"cjs-module-lexer@npm:^1.0.0": - version: 1.2.2 - resolution: "cjs-module-lexer@npm:1.2.2" - checksum: 977f3f042bd4f08e368c890d91eecfbc4f91da0bc009a3c557bc4dfbf32022ad1141244ac1178d44de70fc9f3dea7add7cd9a658a34b9fae98a55d8f92331ce5 - languageName: node - linkType: hard - "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -3589,17 +2898,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.1 - wrap-ansi: ^7.0.0 - checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 - languageName: node - linkType: hard - "clone-response@npm:^1.0.2": version: 1.0.3 resolution: "clone-response@npm:1.0.3" @@ -3616,20 +2914,6 @@ __metadata: languageName: node linkType: hard -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 - languageName: node - linkType: hard - -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.1 - resolution: "collect-v8-coverage@npm:1.0.1" - checksum: 4efe0a1fccd517b65478a2364b33dadd0a43fc92a56f59aaece9b6186fe5177b2de471253587de7c91516f07c7268c2f6770b6cbcffc0e0ece353b766ec87e55 - languageName: node - linkType: hard - "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -3722,7 +3006,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": +"convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 @@ -3794,7 +3078,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.2": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -4009,13 +3293,6 @@ __metadata: languageName: node linkType: hard -"dedent@npm:^0.7.0": - version: 0.7.0 - resolution: "dedent@npm:0.7.0" - checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 - languageName: node - linkType: hard - "deep-eql@npm:^4.1.2": version: 4.1.3 resolution: "deep-eql@npm:4.1.3" @@ -4057,13 +3334,6 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.2.2": - version: 4.3.0 - resolution: "deepmerge@npm:4.3.0" - checksum: c7980eb5c5be040b371f1df0d566473875cfabed9f672ccc177b81ba8eee5686ce2478de2f1d0076391621cbe729e5eacda397179a59ef0f68901849647db126 - languageName: node - linkType: hard - "defer-to-connect@npm:^2.0.0, defer-to-connect@npm:^2.0.1": version: 2.0.1 resolution: "defer-to-connect@npm:2.0.1" @@ -4109,20 +3379,6 @@ __metadata: languageName: node linkType: hard -"detect-newline@npm:^3.0.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 - languageName: node - linkType: hard - -"diff-sequences@npm:^28.1.1": - version: 28.1.1 - resolution: "diff-sequences@npm:28.1.1" - checksum: e2529036505567c7ca5a2dea86b6bcd1ca0e3ae63bf8ebf529b8a99cfa915bbf194b7021dc1c57361a4017a6d95578d4ceb29fabc3232a4f4cb866a2726c7690 - languageName: node - linkType: hard - "diff@npm:^5.1.0": version: 5.1.0 resolution: "diff@npm:5.1.0" @@ -4281,13 +3537,6 @@ __metadata: languageName: node linkType: hard -"emittery@npm:^0.10.2": - version: 0.10.2 - resolution: "emittery@npm:0.10.2" - checksum: ee3e21788b043b90885b18ea756ec3105c1cedc50b29709c92b01e239c7e55345d4bb6d3aef4ddbaf528eef448a40b3bb831bad9ee0fc9c25cbf1367ab1ab5ac - languageName: node - linkType: hard - "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -4544,13 +3793,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 - languageName: node - linkType: hard - "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -4688,23 +3930,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^26.6.0": - version: 26.9.0 - resolution: "eslint-plugin-jest@npm:26.9.0" - dependencies: - "@typescript-eslint/utils": ^5.10.0 - peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - "@typescript-eslint/eslint-plugin": - optional: true - jest: - optional: true - checksum: 6d5fd5c95368f1ca2640389aeb7ce703d6202493c3ec6bdedb4eaca37233710508b0c75829e727765a16fd27029a466d34202bc7f2811c752038ccbbce224400 - languageName: node - linkType: hard - "eslint-plugin-jsx-a11y@npm:^6.6.1": version: 6.7.1 resolution: "eslint-plugin-jsx-a11y@npm:6.7.1" @@ -4791,6 +4016,17 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-vitest@npm:^0.0.54": + version: 0.0.54 + resolution: "eslint-plugin-vitest@npm:0.0.54" + dependencies: + "@typescript-eslint/utils": ^5.53.0 + peerDependencies: + eslint: ">=8.0.0" + checksum: 4bb699f5ffc6077fd8d39b20391059681f40af37ea2741058fcb852d5ca057ffc007f0eedac1dd84f61d5e9515777da68be47b3c439e3d8baa204eae6361d808 + languageName: node + linkType: hard + "eslint-rule-composer@npm:^0.3.0": version: 0.3.0 resolution: "eslint-rule-composer@npm:0.3.0" @@ -4903,7 +4139,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1": +"esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -4952,43 +4188,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.0.0": - version: 5.1.1 - resolution: "execa@npm:5.1.1" - dependencies: - cross-spawn: ^7.0.3 - get-stream: ^6.0.0 - human-signals: ^2.1.0 - is-stream: ^2.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^4.0.1 - onetime: ^5.1.2 - signal-exit: ^3.0.3 - strip-final-newline: ^2.0.0 - checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 - languageName: node - linkType: hard - -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 - languageName: node - linkType: hard - -"expect@npm:^28.1.3": - version: 28.1.3 - resolution: "expect@npm:28.1.3" - dependencies: - "@jest/expect-utils": ^28.1.3 - jest-get-type: ^28.0.2 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - checksum: 101e0090de300bcafedb7dbfd19223368a2251ce5fe0105bbb6de5720100b89fb6b64290ebfb42febc048324c76d6a4979cdc4b61eb77747857daf7a5de9b03d - languageName: node - linkType: hard - "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -5032,15 +4231,6 @@ __metadata: languageName: node linkType: hard -"fb-watchman@npm:^2.0.0": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: 2.1.1 - checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 - languageName: node - linkType: hard - "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -5082,16 +4272,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: ^5.0.0 - path-exists: ^4.0.0 - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - "find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -5217,7 +4397,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": +"fsevents@npm:~2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" dependencies: @@ -5227,7 +4407,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": +"fsevents@patch:fsevents@~2.3.2#~builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" dependencies: @@ -5285,13 +4465,6 @@ __metadata: languageName: node linkType: hard -"get-caller-file@npm:^2.0.5": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 - languageName: node - linkType: hard - "get-func-name@npm:^2.0.0": version: 2.0.0 resolution: "get-func-name@npm:2.0.0" @@ -5310,13 +4483,6 @@ __metadata: languageName: node linkType: hard -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 - languageName: node - linkType: hard - "get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" @@ -5326,7 +4492,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": +"get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad @@ -5498,7 +4664,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.2.6": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da @@ -5653,17 +4819,16 @@ __metadata: eslint-config-airbnb-typescript: ^17.0.0 eslint-config-mantine: ^2.0.0 eslint-plugin-import: ^2.26.0 - eslint-plugin-jest: ^26.6.0 eslint-plugin-jsx-a11y: ^6.6.1 eslint-plugin-react: ^7.30.1 eslint-plugin-react-hooks: ^4.6.0 eslint-plugin-testing-library: ^5.5.1 eslint-plugin-unused-imports: ^2.0.0 + eslint-plugin-vitest: ^0.0.54 fily-publish-gridstack: ^0.0.13 framer-motion: ^9.0.2 html-entities: ^2.3.3 i18next: ^21.9.1 - jest: ^28.1.3 js-file-download: ^0.4.12 jsdom: ^21.1.1 next: ^13.2.1 @@ -5714,13 +4879,6 @@ __metadata: languageName: node linkType: hard -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 - languageName: node - linkType: hard - "html-parse-stringify@npm:^3.0.1": version: 3.0.1 resolution: "html-parse-stringify@npm:3.0.1" @@ -5819,13 +4977,6 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^2.1.0": - version: 2.1.0 - resolution: "human-signals@npm:2.1.0" - checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 - languageName: node - linkType: hard - "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" @@ -5891,18 +5042,6 @@ __metadata: languageName: node linkType: hard -"import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: ^4.2.0 - resolve-cwd: ^3.0.0 - bin: - import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd - languageName: node - linkType: hard - "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -6089,13 +5228,6 @@ __metadata: languageName: node linkType: hard -"is-generator-fn@npm:^2.0.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 - languageName: node - linkType: hard - "is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" @@ -6182,13 +5314,6 @@ __metadata: languageName: node linkType: hard -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 - languageName: node - linkType: hard - "is-string@npm:^1.0.5, is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" @@ -6281,497 +5406,6 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.0 - resolution: "istanbul-lib-coverage@npm:3.2.0" - checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" - dependencies: - "@babel/core": ^7.12.3 - "@babel/parser": ^7.14.7 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-coverage: ^3.2.0 - semver: ^6.3.0 - checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.0 - resolution: "istanbul-lib-report@npm:3.0.0" - dependencies: - istanbul-lib-coverage: ^3.0.0 - make-dir: ^3.0.0 - supports-color: ^7.1.0 - checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" - dependencies: - debug: ^4.1.1 - istanbul-lib-coverage: ^3.0.0 - source-map: ^0.6.1 - checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.3": - version: 3.1.5 - resolution: "istanbul-reports@npm:3.1.5" - dependencies: - html-escaper: ^2.0.0 - istanbul-lib-report: ^3.0.0 - checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 - languageName: node - linkType: hard - -"jest-changed-files@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-changed-files@npm:28.1.3" - dependencies: - execa: ^5.0.0 - p-limit: ^3.1.0 - checksum: c78af14a68b9b19101623ae7fde15a2488f9b3dbe8cca12a05c4a223bc9bfd3bf41ee06830f20fb560c52434435d6153c9cc6cf450b1f7b03e5e7f96a953a6a6 - languageName: node - linkType: hard - -"jest-circus@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-circus@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/expect": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - dedent: ^0.7.0 - is-generator-fn: ^2.0.0 - jest-each: ^28.1.3 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-runtime: ^28.1.3 - jest-snapshot: ^28.1.3 - jest-util: ^28.1.3 - p-limit: ^3.1.0 - pretty-format: ^28.1.3 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: b635e60a9c92adaefc3f24def8eba691e7c2fdcf6c9fa640cddf2eb8c8b26ee62eab73ebb88798fd7c52a74c1495a984e39b748429b610426f02e9d3d56e09b2 - languageName: node - linkType: hard - -"jest-cli@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-cli@npm:28.1.3" - dependencies: - "@jest/core": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - import-local: ^3.0.2 - jest-config: ^28.1.3 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - prompts: ^2.0.1 - yargs: ^17.3.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: fb424576bf38346318daddee3fcc597cd78cb8dda1759d09c529d8ba1a748f2765c17b00671072a838826e59465a810ff8a232bc6ba2395c131bf3504425a363 - languageName: node - linkType: hard - -"jest-config@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-config@npm:28.1.3" - dependencies: - "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^28.1.3 - "@jest/types": ^28.1.3 - babel-jest: ^28.1.3 - chalk: ^4.0.0 - ci-info: ^3.2.0 - deepmerge: ^4.2.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-circus: ^28.1.3 - jest-environment-node: ^28.1.3 - jest-get-type: ^28.0.2 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.3 - jest-runner: ^28.1.3 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - micromatch: ^4.0.4 - parse-json: ^5.2.0 - pretty-format: ^28.1.3 - slash: ^3.0.0 - strip-json-comments: ^3.1.1 - peerDependencies: - "@types/node": "*" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - ts-node: - optional: true - checksum: ddabffd3a3a8cb6c2f58f06cdf3535157dbf8c70bcde3e5c3de7bee6a8d617840ffc8cffb0083e38c6814f2a08c225ca19f58898efaf4f351af94679f22ce6bc - languageName: node - linkType: hard - -"jest-diff@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-diff@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^28.1.1 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: fa8583e0ccbe775714ce850b009be1b0f6b17a4b6759f33ff47adef27942ebc610dbbcc8a5f7cfb7f12b3b3b05afc9fb41d5f766674616025032ff1e4f9866e0 - languageName: node - linkType: hard - -"jest-docblock@npm:^28.1.1": - version: 28.1.1 - resolution: "jest-docblock@npm:28.1.1" - dependencies: - detect-newline: ^3.0.0 - checksum: 22fca68d988ecb2933bc65f448facdca85fc71b4bd0a188ea09a5ae1b0cc3a049a2a6ec7e7eaa2542c1d5cb5e5145e420a3df4fa280f5070f486c44da1d36151 - languageName: node - linkType: hard - -"jest-each@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-each@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - chalk: ^4.0.0 - jest-get-type: ^28.0.2 - jest-util: ^28.1.3 - pretty-format: ^28.1.3 - checksum: 5c5b8ccb1484e58b027bea682cfa020a45e5bf5379cc7c23bdec972576c1dc3c3bf03df2b78416cefc1a58859dd33b7cf5fff54c370bc3c0f14a3e509eb87282 - languageName: node - linkType: hard - -"jest-environment-node@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-environment-node@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/fake-timers": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - jest-mock: ^28.1.3 - jest-util: ^28.1.3 - checksum: 1048fe306a6a8b0880a4c66278ebb57479f29c12cff89aab3aa79ab77a8859cf17ab8aa9919fd21c329a7db90e35581b43664e694ad453d5b04e00f3c6420469 - languageName: node - linkType: hard - -"jest-get-type@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-get-type@npm:28.0.2" - checksum: 5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd - languageName: node - linkType: hard - -"jest-haste-map@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-haste-map@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/graceful-fs": ^4.1.3 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^28.0.2 - jest-util: ^28.1.3 - jest-worker: ^28.1.3 - micromatch: ^4.0.4 - walker: ^1.0.8 - dependenciesMeta: - fsevents: - optional: true - checksum: d05fdc108645fc2b39fcd4001952cc7a8cb550e93494e98c1e9ab1fc542686f6ac67177c132e564cf94fe8f81503f3f8db8b825b9b713dc8c5748aec63ba4688 - languageName: node - linkType: hard - -"jest-leak-detector@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-leak-detector@npm:28.1.3" - dependencies: - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: 2e976a4880cf9af11f53a19f6a3820e0f90b635a900737a5427fc42e337d5628ba446dcd7c020ecea3806cf92bc0bbf6982ed62a9cd84e5a13d8751aa30fbbb7 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-matcher-utils@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - jest-diff: ^28.1.3 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: 6b34f0cf66f6781e92e3bec97bf27796bd2ba31121e5c5997218d9adba6deea38a30df5203937d6785b68023ed95cbad73663cc9aad6fb0cb59aeb5813a58daf - languageName: node - linkType: hard - -"jest-message-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-message-util@npm:28.1.3" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^28.1.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^28.1.3 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 1f266854166dcc6900d75a88b54a25225a2f3710d463063ff1c99021569045c35c7d58557b25447a17eb3a65ce763b2f9b25550248b468a9d4657db365f39e96 - languageName: node - linkType: hard - -"jest-mock@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-mock@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - checksum: a573bf8e5f12f4c29c661266c31b5c6b69a28d3195b83049983bce025b2b1a0152351567e89e63b102ef817034c2a3aa97eda4e776f3bae2aee54c5765573aa7 - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 - languageName: node - linkType: hard - -"jest-regex-util@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-regex-util@npm:28.0.2" - checksum: 0ea8c5c82ec88bc85e273c0ec82e0c0f35f7a1e2d055070e50f0cc2a2177f848eec55f73e37ae0d045c3db5014c42b2f90ac62c1ab3fdb354d2abd66a9e08add - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-resolve-dependencies@npm:28.1.3" - dependencies: - jest-regex-util: ^28.0.2 - jest-snapshot: ^28.1.3 - checksum: 4eea9ec33aefc1c71dc5956391efbcc7be76bda986b366ab3931d99c5f7ed01c9ebd7520e405ea2c76e1bb2c7ce504be6eca2b9831df16564d1e625500f3bfe7 - languageName: node - linkType: hard - -"jest-resolve@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-resolve@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - jest-pnp-resolver: ^1.2.2 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - resolve: ^1.20.0 - resolve.exports: ^1.1.0 - slash: ^3.0.0 - checksum: df61a490c93f4f4cf52135e43d6a4fcacb07b0b7d4acc6319e9289529c1d14f2d8e1638e095dbf96f156834802755e38db68caca69dba21a3261ee711d4426b6 - languageName: node - linkType: hard - -"jest-runner@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-runner@npm:28.1.3" - dependencies: - "@jest/console": ^28.1.3 - "@jest/environment": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - emittery: ^0.10.2 - graceful-fs: ^4.2.9 - jest-docblock: ^28.1.1 - jest-environment-node: ^28.1.3 - jest-haste-map: ^28.1.3 - jest-leak-detector: ^28.1.3 - jest-message-util: ^28.1.3 - jest-resolve: ^28.1.3 - jest-runtime: ^28.1.3 - jest-util: ^28.1.3 - jest-watcher: ^28.1.3 - jest-worker: ^28.1.3 - p-limit: ^3.1.0 - source-map-support: 0.5.13 - checksum: 32405cd970fa6b11e039192dae699fd1bcc6f61f67d50605af81d193f24dd4373b25f5fcc1c571a028ec1b02174e8a4b6d0d608772063fb06f08a5105693533b - languageName: node - linkType: hard - -"jest-runtime@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-runtime@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/fake-timers": ^28.1.3 - "@jest/globals": ^28.1.3 - "@jest/source-map": ^28.1.2 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - chalk: ^4.0.0 - cjs-module-lexer: ^1.0.0 - collect-v8-coverage: ^1.0.0 - execa: ^5.0.0 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - jest-message-util: ^28.1.3 - jest-mock: ^28.1.3 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.3 - jest-snapshot: ^28.1.3 - jest-util: ^28.1.3 - slash: ^3.0.0 - strip-bom: ^4.0.0 - checksum: b17c40af858e74dafa4f515ef3711c1e9ef3d4ad7d74534ee0745422534bc04fd166d4eceb62a3aa7dc951505d6f6d2a81d16e90bebb032be409ec0500974a36 - languageName: node - linkType: hard - -"jest-snapshot@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-snapshot@npm:28.1.3" - dependencies: - "@babel/core": ^7.11.6 - "@babel/generator": ^7.7.2 - "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/traverse": ^7.7.2 - "@babel/types": ^7.3.3 - "@jest/expect-utils": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/babel__traverse": ^7.0.6 - "@types/prettier": ^2.1.5 - babel-preset-current-node-syntax: ^1.0.0 - chalk: ^4.0.0 - expect: ^28.1.3 - graceful-fs: ^4.2.9 - jest-diff: ^28.1.3 - jest-get-type: ^28.0.2 - jest-haste-map: ^28.1.3 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - natural-compare: ^1.4.0 - pretty-format: ^28.1.3 - semver: ^7.3.5 - checksum: 2a46a5493f1fb50b0a236a21f25045e7f46a244f9f3ae37ef4fbcd40249d0d68bb20c950ce77439e4e2cac985b05c3061c90b34739bf6069913a1199c8c716e1 - languageName: node - linkType: hard - -"jest-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-util@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: fd6459742c941f070223f25e38a2ac0719aad92561591e9fb2a50d602a5d19d754750b79b4074327a42b00055662b95da3b006542ceb8b54309da44d4a62e721 - languageName: node - linkType: hard - -"jest-validate@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-validate@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - camelcase: ^6.2.0 - chalk: ^4.0.0 - jest-get-type: ^28.0.2 - leven: ^3.1.0 - pretty-format: ^28.1.3 - checksum: 95e0513b3803c3372a145cda86edbdb33d9dfeaa18818176f2d581e821548ceac9a179f065b6d4671a941de211354efd67f1fff8789a4fb89962565c85f646db - languageName: node - linkType: hard - -"jest-watcher@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-watcher@npm:28.1.3" - dependencies: - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - emittery: ^0.10.2 - jest-util: ^28.1.3 - string-length: ^4.0.1 - checksum: 8f6d674a4865e7df251f71544f1b51f06fd36b5a3a61f2ac81aeb81fa2a196be354fba51d0f97911c88f67cd254583b3a22ee124bf2c5b6ee2fadec27356c207 - languageName: node - linkType: hard - -"jest-worker@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-worker@npm:28.1.3" - dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: e921c9a1b8f0909da9ea07dbf3592f95b653aef3a8bb0cbcd20fc7f9a795a1304adecac31eecb308992c167e8d7e75c522061fec38a5928ace0f9571c90169ca - languageName: node - linkType: hard - -"jest@npm:^28.1.3": - version: 28.1.3 - resolution: "jest@npm:28.1.3" - dependencies: - "@jest/core": ^28.1.3 - "@jest/types": ^28.1.3 - import-local: ^3.0.2 - jest-cli: ^28.1.3 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: b9dcb542eb7c16261c281cdc2bf37155dbb3f1205bae0b567f05051db362c85ddd4b765f126591efb88f6d298eb10336d0aa6c7d5373b4d53f918137a9a70182 - languageName: node - linkType: hard - "js-file-download@npm:^0.4.12": version: 0.4.12 resolution: "js-file-download@npm:0.4.12" @@ -6793,18 +5427,6 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: ^1.0.7 - esprima: ^4.0.0 - bin: - js-yaml: bin/js-yaml.js - checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c - languageName: node - linkType: hard - "js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -6945,13 +5567,6 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 - languageName: node - linkType: hard - "klona@npm:^2.0.5": version: 2.0.6 resolution: "klona@npm:2.0.6" @@ -6975,13 +5590,6 @@ __metadata: languageName: node linkType: hard -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 - languageName: node - linkType: hard - "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" @@ -7016,15 +5624,6 @@ __metadata: languageName: node linkType: hard -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: ^4.1.0 - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 - languageName: node - linkType: hard - "locate-path@npm:^6.0.0": version: 6.0.0 resolution: "locate-path@npm:6.0.0" @@ -7136,15 +5735,6 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.0.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: ^6.0.0 - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 - languageName: node - linkType: hard - "make-fetch-happen@npm:^10.0.3": version: 10.2.1 resolution: "make-fetch-happen@npm:10.2.1" @@ -7169,22 +5759,6 @@ __metadata: languageName: node linkType: hard -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: 1.0.5 - checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 - languageName: node - linkType: hard - -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 - languageName: node - linkType: hard - "merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -7218,13 +5792,6 @@ __metadata: languageName: node linkType: hard -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a - languageName: node - linkType: hard - "mimic-response@npm:^1.0.0": version: 1.0.1 resolution: "mimic-response@npm:1.0.1" @@ -7597,13 +6164,6 @@ __metadata: languageName: node linkType: hard -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e - languageName: node - linkType: hard - "node-json-rpc@npm:0.0.1": version: 0.0.1 resolution: "node-json-rpc@npm:0.0.1" @@ -7650,15 +6210,6 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^4.0.1": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: ^3.0.0 - checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 - languageName: node - linkType: hard - "npmlog@npm:^6.0.0": version: 6.0.2 resolution: "npmlog@npm:6.0.2" @@ -7791,15 +6342,6 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.2": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: ^2.1.0 - checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 - languageName: node - linkType: hard - "opener@npm:^1.5.2": version: 1.5.2 resolution: "opener@npm:1.5.2" @@ -7851,16 +6393,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: ^2.0.0 - checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": +"p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -7878,15 +6411,6 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: ^2.2.0 - checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 - languageName: node - linkType: hard - "p-locate@npm:^5.0.0": version: 5.0.0 resolution: "p-locate@npm:5.0.0" @@ -7905,13 +6429,6 @@ __metadata: languageName: node linkType: hard -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae - languageName: node - linkType: hard - "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -7921,7 +6438,7 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": +"parse-json@npm:^5.0.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" dependencies: @@ -7956,7 +6473,7 @@ __metadata: languageName: node linkType: hard -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": +"path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 @@ -7998,20 +6515,13 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf languageName: node linkType: hard -"pirates@npm:^4.0.4": - version: 4.0.5 - resolution: "pirates@npm:4.0.5" - checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 - languageName: node - linkType: hard - "pkcs7@npm:^1.0.4": version: 1.0.4 resolution: "pkcs7@npm:1.0.4" @@ -8023,15 +6533,6 @@ __metadata: languageName: node linkType: hard -"pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" - dependencies: - find-up: ^4.0.0 - checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 - languageName: node - linkType: hard - "pkg-types@npm:^1.0.2": version: 1.0.2 resolution: "pkg-types@npm:1.0.2" @@ -8099,18 +6600,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^28.1.3": - version: 28.1.3 - resolution: "pretty-format@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.3 - ansi-regex: ^5.0.1 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: e69f857358a3e03d271252d7524bec758c35e44680287f36c1cb905187fbc82da9981a6eb07edfd8a03bc3cbeebfa6f5234c13a3d5b59f2bbdf9b4c4053e0a7f - languageName: node - linkType: hard - "prismjs@npm:^1.29.0": version: 1.29.0 resolution: "prismjs@npm:1.29.0" @@ -8149,16 +6638,6 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.0.1": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" - dependencies: - kleur: ^3.0.3 - sisteransi: ^1.0.5 - checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d - languageName: node - linkType: hard - "prop-types@npm:^15.6.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" @@ -8279,13 +6758,6 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.0.0": - version: 18.2.0 - resolution: "react-is@npm:18.2.0" - checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e - languageName: node - linkType: hard - "react-lifecycles-compat@npm:^3.0.4": version: 3.0.4 resolution: "react-lifecycles-compat@npm:3.0.4" @@ -8433,13 +6905,6 @@ __metadata: languageName: node linkType: hard -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 - languageName: node - linkType: hard - "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -8454,15 +6919,6 @@ __metadata: languageName: node linkType: hard -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: ^5.0.0 - checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 - languageName: node - linkType: hard - "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -8470,21 +6926,7 @@ __metadata: languageName: node linkType: hard -"resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf - languageName: node - linkType: hard - -"resolve.exports@npm:^1.1.0": - version: 1.1.1 - resolution: "resolve.exports@npm:1.1.1" - checksum: 485aa10082eb388a569d696e17ad7b16f4186efc97dd34eadd029d95b811f21ffee13b1b733198bb4584dbb3cb296aa6f141835221fb7613b9606b84f1386655 - languageName: node - linkType: hard - -"resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1": +"resolve@npm:^1.19.0, resolve@npm:^1.22.1": version: 1.22.1 resolution: "resolve@npm:1.22.1" dependencies: @@ -8510,7 +6952,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": +"resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" dependencies: @@ -8568,7 +7010,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -8717,7 +7159,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.3.0": +"semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" bin: @@ -8778,7 +7220,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -8807,13 +7249,6 @@ __metadata: languageName: node linkType: hard -"sisteransi@npm:^1.0.5": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 - languageName: node - linkType: hard - "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -8866,16 +7301,6 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:0.5.13": - version: 0.5.13 - resolution: "source-map-support@npm:0.5.13" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 - languageName: node - linkType: hard - "source-map@npm:^0.5.7": version: 0.5.7 resolution: "source-map@npm:0.5.7" @@ -8883,7 +7308,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": +"source-map@npm:^0.6.1, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 @@ -8897,13 +7322,6 @@ __metadata: languageName: node linkType: hard -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 - languageName: node - linkType: hard - "ssh2@npm:^1.11.0": version: 1.11.0 resolution: "ssh2@npm:1.11.0" @@ -8930,15 +7348,6 @@ __metadata: languageName: node linkType: hard -"stack-utils@npm:^2.0.3": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: ^2.0.0 - checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 - languageName: node - linkType: hard - "stackback@npm:0.0.2": version: 0.0.2 resolution: "stackback@npm:0.0.2" @@ -8962,17 +7371,7 @@ __metadata: languageName: node linkType: hard -"string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: ^1.0.2 - strip-ansi: ^6.0.0 - checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 - languageName: node - linkType: hard - -"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -9057,7 +7456,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": +"strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -9082,20 +7481,6 @@ __metadata: languageName: node linkType: hard -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 - languageName: node - linkType: hard - -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 - languageName: node - linkType: hard - "strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -9171,7 +7556,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": +"supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: @@ -9180,25 +7565,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: ^4.0.0 - checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 - languageName: node - linkType: hard - -"supports-hyperlinks@npm:^2.0.0": - version: 2.3.0 - resolution: "supports-hyperlinks@npm:2.3.0" - dependencies: - has-flag: ^4.0.0 - supports-color: ^7.0.0 - checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -9259,27 +7625,6 @@ __metadata: languageName: node linkType: hard -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: ^4.2.1 - supports-hyperlinks: ^2.0.0 - checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - -"test-exclude@npm:^6.0.0": - version: 6.0.0 - resolution: "test-exclude@npm:6.0.0" - dependencies: - "@istanbuljs/schema": ^0.1.2 - glob: ^7.1.4 - minimatch: ^3.0.4 - checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 - languageName: node - linkType: hard - "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -9325,13 +7670,6 @@ __metadata: languageName: node linkType: hard -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 - languageName: node - linkType: hard - "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -9516,7 +7854,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": +"type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 @@ -9530,13 +7868,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 - languageName: node - linkType: hard - "typed-array-length@npm:^1.0.4": version: 1.0.4 resolution: "typed-array-length@npm:1.0.4" @@ -9712,17 +8043,6 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^9.0.1": - version: 9.1.0 - resolution: "v8-to-istanbul@npm:9.1.0" - dependencies: - "@jridgewell/trace-mapping": ^0.3.12 - "@types/istanbul-lib-coverage": ^2.0.1 - convert-source-map: ^1.6.0 - checksum: 2069d59ee46cf8d83b4adfd8a5c1a90834caffa9f675e4360f1157ffc8578ef0f763c8f32d128334424159bb6b01f3876acd39cd13297b2769405a9da241f8d1 - languageName: node - linkType: hard - "video.js@npm:^7 || ^8, video.js@npm:^8.0.3": version: 8.0.4 resolution: "video.js@npm:8.0.4" @@ -9893,15 +8213,6 @@ __metadata: languageName: node linkType: hard -"walker@npm:^1.0.8": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: 1.0.12 - checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c - languageName: node - linkType: hard - "web-streams-polyfill@npm:4.0.0-beta.3": version: 4.0.0-beta.3 resolution: "web-streams-polyfill@npm:4.0.0-beta.3" @@ -10039,17 +8350,6 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b - languageName: node - linkType: hard - "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" @@ -10057,16 +8357,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.1": - version: 4.0.2 - resolution: "write-file-atomic@npm:4.0.2" - dependencies: - imurmurhash: ^0.1.4 - signal-exit: ^3.0.7 - checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c - languageName: node - linkType: hard - "ws@npm:^7.3.1": version: 7.5.9 resolution: "ws@npm:7.5.9" @@ -10155,13 +8445,6 @@ __metadata: languageName: node linkType: hard -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 - languageName: node - linkType: hard - "yallist@npm:^3.0.2": version: 3.1.1 resolution: "yallist@npm:3.1.1" @@ -10183,28 +8466,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c - languageName: node - linkType: hard - -"yargs@npm:^17.3.1": - version: 17.7.0 - resolution: "yargs@npm:17.7.0" - dependencies: - cliui: ^8.0.1 - escalade: ^3.1.1 - get-caller-file: ^2.0.5 - require-directory: ^2.1.1 - string-width: ^4.2.3 - y18n: ^5.0.5 - yargs-parser: ^21.1.1 - checksum: e7d5f5b60e63b04ded7c27c3d4b194565565cac3ea19fffcdbb183bed973a83106822a04dda28ebba4811ce92949a9d9858d3935186ff8f343548bf98aab2120 - languageName: node - linkType: hard - "yarn@npm:^1.22.19": version: 1.22.19 resolution: "yarn@npm:1.22.19" From 77bad9d6b350a5ee57e14742b29ef07a30b9e960 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Fri, 17 Mar 2023 22:44:27 +0100 Subject: [PATCH 26/98] =?UTF-8?q?=F0=9F=93=9D=20Update=20contribution=20gu?= =?UTF-8?q?ideline=20for=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 316feba89..461f16f4a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -104,3 +104,8 @@ Enhancement suggestions are tracked as [GitHub issues](https://github.com/ajnart Homarr uses [GitMoji](https://gitmoji.dev/). We would appreciate it if everyone keeps their commit messages withing these rulings. +### Tests +- Place testfiles directly at the root of the unit +- Only test a single unit of work inside a unit test +- You may test multiple units inside one test file +- Testnames do not begin with ``should`` or the unit name \ No newline at end of file From 5ed363146fa5532e711678dc6e3ba0ce7966ae4f Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Fri, 17 Mar 2023 23:05:30 +0100 Subject: [PATCH 27/98] =?UTF-8?q?=E2=9C=85=20Add=20test=20for=20AppAvatar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/AppAvatar.test.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/components/AppAvatar.test.tsx diff --git a/src/components/AppAvatar.test.tsx b/src/components/AppAvatar.test.tsx new file mode 100644 index 000000000..b5cb29eaf --- /dev/null +++ b/src/components/AppAvatar.test.tsx @@ -0,0 +1,16 @@ +import { render } from '@testing-library/react'; +import { describe, expect, it } from 'vitest'; +import { AppAvatar } from './AppAvatar'; + +describe(AppAvatar.name, () => { + it.concurrent('display placeholder when no url', () => { + const { container } = render(); + + expect(container.firstElementChild).not.toBeNull(); + expect(container.firstElementChild!.className).contain('mantine-Avatar-root'); + + const svgElement = container.querySelector('svg'); + expect(svgElement).not.toBeNull(); + expect(svgElement?.getAttribute('fill')).not.toBeNull(); + }); +}); From 0b237f27f7d2860cd944607c8996cf44c716c2be Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Fri, 17 Mar 2023 23:17:58 +0100 Subject: [PATCH 28/98] =?UTF-8?q?=E2=9C=85=20Add=20c8=20code=20coverage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 +- vitest.config.ts | 6 ++ yarn.lock | 214 +++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 215 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 535585964..cce450335 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "prettier:write": "prettier --write \"**/*.{ts,tsx}\"", "test": "vitest", "test:ui": "vitest --ui", - "test:run": "vitest run" + "test:run": "vitest run", + "test:coverage": "vitest run --coverage" }, "dependencies": { "@ctrl/deluge": "^4.1.0", @@ -79,6 +80,7 @@ "@types/video.js": "^7.3.51", "@typescript-eslint/eslint-plugin": "^5.30.7", "@typescript-eslint/parser": "^5.30.7", + "@vitest/coverage-c8": "^0.29.3", "@vitest/ui": "^0.29.3", "eslint": "^8.20.0", "eslint-config-airbnb": "^19.0.4", diff --git a/vitest.config.ts b/vitest.config.ts index c278c37ec..8f02bb21c 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -7,5 +7,11 @@ export default defineConfig({ plugins: [react()], test: { environment: 'jsdom', + coverage: { + provider: 'c8', + reporter: ['html'], + all: true, + exclude: ['.next/', '.yarn/', 'data/'] + } }, }); diff --git a/yarn.lock b/yarn.lock index 61f41c148..1c4215b7d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -307,6 +307,13 @@ __metadata: languageName: node linkType: hard +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 + languageName: node + linkType: hard + "@ctrl/deluge@npm:^4.1.0": version: 4.3.0 resolution: "@ctrl/deluge@npm:4.3.0" @@ -795,6 +802,13 @@ __metadata: languageName: node linkType: hard +"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + "@jellyfin/sdk@npm:^0.7.0": version: 0.7.0 resolution: "@jellyfin/sdk@npm:0.7.0" @@ -847,7 +861,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.17 resolution: "@jridgewell/trace-mapping@npm:0.3.17" dependencies: @@ -1809,6 +1823,13 @@ __metadata: languageName: node linkType: hard +"@types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.4 + resolution: "@types/istanbul-lib-coverage@npm:2.0.4" + checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" @@ -2182,6 +2203,19 @@ __metadata: languageName: node linkType: hard +"@vitest/coverage-c8@npm:^0.29.3": + version: 0.29.3 + resolution: "@vitest/coverage-c8@npm:0.29.3" + dependencies: + c8: ^7.13.0 + picocolors: ^1.0.0 + std-env: ^3.3.1 + peerDependencies: + vitest: ">=0.29.0 <1" + checksum: 6b8a6aa088318a93c0124d45f5c6fea43ae36d0c435a26d083cb38d505fea05d35faac6a695b3c6516cf61ef33f690d5f572bb90d8f71c701c28e863c1476a2b + languageName: node + linkType: hard + "@vitest/expect@npm:0.29.3": version: 0.29.3 resolution: "@vitest/expect@npm:0.29.3" @@ -2371,7 +2405,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^4.1.0": +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -2697,6 +2731,28 @@ __metadata: languageName: node linkType: hard +"c8@npm:^7.13.0": + version: 7.13.0 + resolution: "c8@npm:7.13.0" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@istanbuljs/schema": ^0.1.3 + find-up: ^5.0.0 + foreground-child: ^2.0.0 + istanbul-lib-coverage: ^3.2.0 + istanbul-lib-report: ^3.0.0 + istanbul-reports: ^3.1.4 + rimraf: ^3.0.2 + test-exclude: ^6.0.0 + v8-to-istanbul: ^9.0.0 + yargs: ^16.2.0 + yargs-parser: ^20.2.9 + bin: + c8: bin/c8.js + checksum: 491abf4cf3097cdcfd24dbac49162f1383861c22c77fdd9280bcd38240e1e07d2c6a59da5d4df59a61a8204e2fc297d31fd526e495faf8d2f20dcc12a37b144c + languageName: node + linkType: hard + "cac@npm:^6.7.14": version: 6.7.14 resolution: "cac@npm:6.7.14" @@ -2898,6 +2954,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^7.0.0 + checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f + languageName: node + linkType: hard + "clone-response@npm:^1.0.2": version: 1.0.3 resolution: "clone-response@npm:1.0.3" @@ -3006,7 +3073,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.7.0": +"convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 @@ -3078,7 +3145,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.2": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -4318,6 +4385,16 @@ __metadata: languageName: node linkType: hard +"foreground-child@npm:^2.0.0": + version: 2.0.0 + resolution: "foreground-child@npm:2.0.0" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^3.0.2 + checksum: f77ec9aff621abd6b754cb59e690743e7639328301fbea6ff09df27d2befaf7dd5b77cec51c32323d73a81a7d91caaf9413990d305cbe3d873eec4fe58960956 + languageName: node + linkType: hard + "form-data-encoder@npm:^2.1.2": version: 2.1.4 resolution: "form-data-encoder@npm:2.1.4" @@ -4465,6 +4542,13 @@ __metadata: languageName: node linkType: hard +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + "get-func-name@npm:^2.0.0": version: 2.0.0 resolution: "get-func-name@npm:2.0.0" @@ -4808,6 +4892,7 @@ __metadata: "@typescript-eslint/eslint-plugin": ^5.30.7 "@typescript-eslint/parser": ^5.30.7 "@vitejs/plugin-react": ^3.1.0 + "@vitest/coverage-c8": ^0.29.3 "@vitest/ui": ^0.29.3 axios: ^0.27.2 consola: ^2.15.3 @@ -4879,6 +4964,13 @@ __metadata: languageName: node linkType: hard +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 + languageName: node + linkType: hard + "html-parse-stringify@npm:^3.0.1": version: 3.0.1 resolution: "html-parse-stringify@npm:3.0.1" @@ -5406,6 +5498,34 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.0 + resolution: "istanbul-lib-report@npm:3.0.0" + dependencies: + istanbul-lib-coverage: ^3.0.0 + make-dir: ^3.0.0 + supports-color: ^7.1.0 + checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.4": + version: 3.1.5 + resolution: "istanbul-reports@npm:3.1.5" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 + languageName: node + linkType: hard + "js-file-download@npm:^0.4.12": version: 0.4.12 resolution: "js-file-download@npm:0.4.12" @@ -5735,6 +5855,15 @@ __metadata: languageName: node linkType: hard +"make-dir@npm:^3.0.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: ^6.0.0 + checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 + languageName: node + linkType: hard + "make-fetch-happen@npm:^10.0.3": version: 10.2.1 resolution: "make-fetch-happen@npm:10.2.1" @@ -6905,6 +7034,13 @@ __metadata: languageName: node linkType: hard +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -7159,7 +7295,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.3.0": +"semver@npm:^6.0.0, semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" bin: @@ -7220,7 +7356,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -7371,7 +7507,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.2.3": +"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -7456,7 +7592,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.1": +"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -7625,6 +7761,17 @@ __metadata: languageName: node linkType: hard +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": ^0.1.2 + glob: ^7.1.4 + minimatch: ^3.0.4 + checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 + languageName: node + linkType: hard + "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -8043,6 +8190,17 @@ __metadata: languageName: node linkType: hard +"v8-to-istanbul@npm:^9.0.0": + version: 9.1.0 + resolution: "v8-to-istanbul@npm:9.1.0" + dependencies: + "@jridgewell/trace-mapping": ^0.3.12 + "@types/istanbul-lib-coverage": ^2.0.1 + convert-source-map: ^1.6.0 + checksum: 2069d59ee46cf8d83b4adfd8a5c1a90834caffa9f675e4360f1157ffc8578ef0f763c8f32d128334424159bb6b01f3876acd39cd13297b2769405a9da241f8d1 + languageName: node + linkType: hard + "video.js@npm:^7 || ^8, video.js@npm:^8.0.3": version: 8.0.4 resolution: "video.js@npm:8.0.4" @@ -8350,6 +8508,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" @@ -8445,6 +8614,13 @@ __metadata: languageName: node linkType: hard +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + "yallist@npm:^3.0.2": version: 3.1.1 resolution: "yallist@npm:3.1.1" @@ -8466,6 +8642,28 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.9": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + +"yargs@npm:^16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.0 + y18n: ^5.0.5 + yargs-parser: ^20.2.2 + checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + languageName: node + linkType: hard + "yarn@npm:^1.22.19": version: 1.22.19 resolution: "yarn@npm:1.22.19" From 04a304dcd68285f71f3d1858107ffaedf6c6b5ba Mon Sep 17 00:00:00 2001 From: Thomas Camlong <49837342+ajnart@users.noreply.github.com> Date: Sat, 18 Mar 2023 18:19:28 +0800 Subject: [PATCH 29/98] Turbo cache (#767) * Try to add vercel caching with turbo * Update lockfile * Update turbo json file * Fix CI * Add new rule * re-launch ci * Update CI to use Turbo * Use yarn turbo build --- .github/workflows/docker_dev.yml | 7 ++-- .gitignore | 1 + package.json | 3 +- turbo.json | 11 ++++++ yarn.lock | 58 ++++++++++++++++---------------- 5 files changed, 48 insertions(+), 32 deletions(-) create mode 100644 turbo.json diff --git a/.github/workflows/docker_dev.yml b/.github/workflows/docker_dev.yml index db5961ed4..d65cbea87 100644 --- a/.github/workflows/docker_dev.yml +++ b/.github/workflows/docker_dev.yml @@ -24,11 +24,14 @@ env: REGISTRY: ghcr.io # github.repository as / IMAGE_NAME: ${{ github.repository }} + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ secrets.TURBO_TEAM }} + jobs: # Push image to GitHub Packages. # See also https://docs.docker.com/docker-hub/builds/ - yarn_install_and_build: + yarn_install_and_build_dev: runs-on: ubuntu-latest permissions: packages: write @@ -67,7 +70,7 @@ jobs: - run: yarn install --immutable - - run: yarn build + - run: yarn turbo build - name: Docker meta if: github.event_name != 'pull_request' diff --git a/.gitignore b/.gitignore index 92b9ea013..1731b2f41 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ yarn-error.log* # vercel .vercel +.turbo *.tsbuildinfo # storybook diff --git a/package.json b/package.json index b64160f85..6d904f4b1 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "scripts": { "dev": "next dev", "build": "next build", + "turbo" : "turbo run build", "analyze": "ANALYZE=true next build", "start": "next start", "typecheck": "tsc --noEmit", @@ -92,7 +93,7 @@ "jest": "^28.1.3", "prettier": "^2.7.1", "sass": "^1.56.1", - "turbo": "^1.7.4", + "turbo": "^1.8.3", "typescript": "^4.7.4", "video.js": "^8.0.3" }, diff --git a/turbo.json b/turbo.json new file mode 100644 index 000000000..833e96950 --- /dev/null +++ b/turbo.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://turbo.build/schema.json", + "pipeline": { + "build": { + "outputs": [ + ".next/**", + "!.next/cache/**" + ] + } + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index aa12f8a2d..1b4d1f91d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5001,7 +5001,7 @@ __metadata: rss-parser: ^3.12.0 sabnzbd-api: ^1.5.0 sass: ^1.56.1 - turbo: ^1.7.4 + turbo: ^1.8.3 typescript: ^4.7.4 uuid: ^8.3.2 video.js: ^8.0.3 @@ -8366,58 +8366,58 @@ __metadata: languageName: node linkType: hard -"turbo-darwin-64@npm:1.8.0": - version: 1.8.0 - resolution: "turbo-darwin-64@npm:1.8.0" +"turbo-darwin-64@npm:1.8.3": + version: 1.8.3 + resolution: "turbo-darwin-64@npm:1.8.3" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"turbo-darwin-arm64@npm:1.8.0": - version: 1.8.0 - resolution: "turbo-darwin-arm64@npm:1.8.0" +"turbo-darwin-arm64@npm:1.8.3": + version: 1.8.3 + resolution: "turbo-darwin-arm64@npm:1.8.3" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"turbo-linux-64@npm:1.8.0": - version: 1.8.0 - resolution: "turbo-linux-64@npm:1.8.0" +"turbo-linux-64@npm:1.8.3": + version: 1.8.3 + resolution: "turbo-linux-64@npm:1.8.3" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"turbo-linux-arm64@npm:1.8.0": - version: 1.8.0 - resolution: "turbo-linux-arm64@npm:1.8.0" +"turbo-linux-arm64@npm:1.8.3": + version: 1.8.3 + resolution: "turbo-linux-arm64@npm:1.8.3" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"turbo-windows-64@npm:1.8.0": - version: 1.8.0 - resolution: "turbo-windows-64@npm:1.8.0" +"turbo-windows-64@npm:1.8.3": + version: 1.8.3 + resolution: "turbo-windows-64@npm:1.8.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"turbo-windows-arm64@npm:1.8.0": - version: 1.8.0 - resolution: "turbo-windows-arm64@npm:1.8.0" +"turbo-windows-arm64@npm:1.8.3": + version: 1.8.3 + resolution: "turbo-windows-arm64@npm:1.8.3" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"turbo@npm:^1.7.4": - version: 1.8.0 - resolution: "turbo@npm:1.8.0" +"turbo@npm:^1.8.3": + version: 1.8.3 + resolution: "turbo@npm:1.8.3" dependencies: - turbo-darwin-64: 1.8.0 - turbo-darwin-arm64: 1.8.0 - turbo-linux-64: 1.8.0 - turbo-linux-arm64: 1.8.0 - turbo-windows-64: 1.8.0 - turbo-windows-arm64: 1.8.0 + turbo-darwin-64: 1.8.3 + turbo-darwin-arm64: 1.8.3 + turbo-linux-64: 1.8.3 + turbo-linux-arm64: 1.8.3 + turbo-windows-64: 1.8.3 + turbo-windows-arm64: 1.8.3 dependenciesMeta: turbo-darwin-64: optional: true @@ -8433,7 +8433,7 @@ __metadata: optional: true bin: turbo: bin/turbo - checksum: 7f97068d7f9a155e088d3575b1f9922e68fa3015aae0c92625238d44b4e6c275bec2a281907702dedb402fca29a6cd4690499e916cb334d7c24c98099bc3d8b0 + checksum: 4a07d120ef8adf6c8e58a48abd02e075ffa215287cc6c3ef843d4fb08aeb0a566fe810ec9bfc376254468a2aa4f29bae154a60804a83af78dfa86d0e8e995476 languageName: node linkType: hard From 2063adc6c0d9b3951bef6b0aa4b34348a742e1c6 Mon Sep 17 00:00:00 2001 From: ajnart Date: Sat, 18 Mar 2023 18:29:22 +0800 Subject: [PATCH 30/98] =?UTF-8?q?=E2=9C=A8=20Add=20console=20warn=20if=20a?= =?UTF-8?q?pps=20are=20missing=20properties?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tools/config/getFrontendConfig.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/tools/config/getFrontendConfig.ts b/src/tools/config/getFrontendConfig.ts index c968c9b28..c208e81e7 100644 --- a/src/tools/config/getFrontendConfig.ts +++ b/src/tools/config/getFrontendConfig.ts @@ -7,6 +7,22 @@ export const getFrontendConfig = (name: string): ConfigType => { const config = getConfig(name); Consola.info(`Requested frontend content of configuration '${name}'`); + // Find out if config as apps with integrations that have a property with no value or undefined + // If so, remove print an error using consola + // If not, return the config + const appsWithIntegrationsWithUndefinedProperties = config.apps.filter( + (app) => + app.integration?.properties.some( + (property) => property.value === null || property.value === undefined + ) ?? false + ); + if (appsWithIntegrationsWithUndefinedProperties.length > 0) { + Consola.warn( + `The following apps have integrations with errored properties: [${appsWithIntegrationsWithUndefinedProperties + .map((app) => app.name) + .join(', ')}] please input the correct secrets once again for the concerned app(s), save them, exit edit mode and reload the page.` + ); + } return { ...config, From b3aae68469bc633b4571cf15a079a3f6c62828dd Mon Sep 17 00:00:00 2001 From: ajnart Date: Sat, 18 Mar 2023 19:09:21 +0800 Subject: [PATCH 31/98] =?UTF-8?q?=E2=9C=A8=20Make=20integrations=20fields?= =?UTF-8?q?=20required?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Minor integration styling, bigger tooltips, longer texts, removed clear secret button --- .../InputElements/GenericSecretInput.tsx | 44 +++++++------------ 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/GenericSecretInput.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/GenericSecretInput.tsx index 895dbf015..b65b0f5b7 100644 --- a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/GenericSecretInput.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/GenericSecretInput.tsx @@ -6,7 +6,6 @@ import { Grid, Group, PasswordInput, - Stack, ThemeIcon, Title, Text, @@ -40,7 +39,7 @@ export const GenericSecretInput = ({ const Icon = setIcon; - const [displayUpdateField, setDisplayUpdateField] = useState(false); + const [displayUpdateField, setDisplayUpdateField] = useState(!secretIsPresent); const { t } = useTranslation(['layout/modals/add-app', 'common']); return ( @@ -51,26 +50,26 @@ export const GenericSecretInput = ({ - + {t(label)} - {secretIsPresent ? ( - - {t('integration.type.defined')} - - ) : ( - - {t('integration.type.undefined')} - - )} + + {secretIsPresent + ? t('integration.type.defined') + : t('integration.type.undefined')} + {type === 'private' ? ( - + {type === 'private' ? 'Private: Once saved, you cannot read out this value again' : 'Public: Can be read out repeatedly'} - + - {displayUpdateField === true ? ( Date: Sat, 18 Mar 2023 12:28:11 +0100 Subject: [PATCH 32/98] =?UTF-8?q?=E2=9C=A8=20Add=20beforeunload=20hook=20(?= =?UTF-8?q?#762)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Actions/ToggleEditMode/ToggleEditMode.tsx | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/components/layout/header/Actions/ToggleEditMode/ToggleEditMode.tsx b/src/components/layout/header/Actions/ToggleEditMode/ToggleEditMode.tsx index 794d992be..365431379 100644 --- a/src/components/layout/header/Actions/ToggleEditMode/ToggleEditMode.tsx +++ b/src/components/layout/header/Actions/ToggleEditMode/ToggleEditMode.tsx @@ -1,18 +1,20 @@ +import { ActionIcon, Button, Group, Text, Title, Tooltip } from '@mantine/core'; +import { useHotkeys, useWindowEvent } from '@mantine/hooks'; +import { hideNotification, showNotification } from '@mantine/notifications'; +import { IconEditCircle, IconEditCircleOff } from '@tabler/icons'; import axios from 'axios'; import Consola from 'consola'; -import { ActionIcon, Button, Group, Text, Title, Tooltip } from '@mantine/core'; -import { IconEditCircle, IconEditCircleOff } from '@tabler/icons'; import { getCookie } from 'cookies-next'; import { Trans, useTranslation } from 'next-i18next'; -import { useHotkeys } from '@mantine/hooks'; -import { hideNotification, showNotification } from '@mantine/notifications'; import { useConfigContext } from '../../../../../config/provider'; import { useScreenSmallerThan } from '../../../../../hooks/useScreenSmallerThan'; import { useEditModeStore } from '../../../../Dashboard/Views/useEditModeStore'; -import { AddElementAction } from '../AddElementAction/AddElementAction'; import { useNamedWrapperColumnCount } from '../../../../Dashboard/Wrappers/gridstack/store'; import { useCardStyles } from '../../../useCardStyles'; +import { AddElementAction } from '../AddElementAction/AddElementAction'; + +const beforeUnloadEventText = 'Exit the edit mode to save your changes'; export const ToggleEditModeAction = () => { const { enabled, toggleEditMode } = useEditModeStore(); @@ -29,6 +31,16 @@ export const ToggleEditModeAction = () => { useHotkeys([['ctrl+E', toggleEditMode]]); + useWindowEvent('beforeunload', (event: BeforeUnloadEvent) => { + if (enabled) { + // eslint-disable-next-line no-param-reassign + event.returnValue = beforeUnloadEventText; + return beforeUnloadEventText; + } + + return undefined; + }); + const toggleButtonClicked = () => { toggleEditMode(); if (enabled || config === undefined || config?.schemaVersion === undefined) { From 4c28a77e00f7f3ef70c6ea1228f5b700723ea5b8 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Sat, 18 Mar 2023 12:29:10 +0100 Subject: [PATCH 33/98] =?UTF-8?q?=E2=9C=A8=20Add=20widget=20error=20bounda?= =?UTF-8?q?ry=20(#753)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/locales/en/widgets/error-boundary.json | 14 ++ src/tools/server/translation-namespaces.ts | 1 + src/widgets/WidgetWrapper.tsx | 11 +- src/widgets/boundary.tsx | 127 ++++++++++++++++++ 4 files changed, 149 insertions(+), 4 deletions(-) create mode 100644 public/locales/en/widgets/error-boundary.json create mode 100644 src/widgets/boundary.tsx diff --git a/public/locales/en/widgets/error-boundary.json b/public/locales/en/widgets/error-boundary.json new file mode 100644 index 000000000..9b75f4080 --- /dev/null +++ b/public/locales/en/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Oops, there was an error!", + "buttons": { + "details": "Details", + "tryAgain": "Try again" + } + }, + "modal": { + "text": "We're sorry for the inconvinience! This shouln't happen - please report this issue on GitHub.", + "label": "Your error", + "reportButton": "Report this error" + } +} \ No newline at end of file diff --git a/src/tools/server/translation-namespaces.ts b/src/tools/server/translation-namespaces.ts index 5fe821c3f..90aedada9 100644 --- a/src/tools/server/translation-namespaces.ts +++ b/src/tools/server/translation-namespaces.ts @@ -36,6 +36,7 @@ export const dashboardNamespaces = [ 'modules/media-server', 'modules/common-media-cards', 'modules/video-stream', + 'widgets/error-boundary', ]; export const loginNamespaces = ['authentication/login']; diff --git a/src/widgets/WidgetWrapper.tsx b/src/widgets/WidgetWrapper.tsx index bb7323073..457890537 100644 --- a/src/widgets/WidgetWrapper.tsx +++ b/src/widgets/WidgetWrapper.tsx @@ -2,6 +2,7 @@ import { ComponentType, useMemo } from 'react'; import Widgets from '.'; import { HomarrCardWrapper } from '../components/Dashboard/Tiles/HomarrCardWrapper'; import { WidgetsMenu } from '../components/Dashboard/Tiles/Widgets/WidgetsMenu'; +import ErrorBoundary from './boundary'; import { IWidget } from './widgets'; interface WidgetWrapperProps { @@ -40,9 +41,11 @@ export const WidgetWrapper = ({ const widgetWithDefaultProps = useWidget(widget); return ( - - - - + + + + + + ); }; diff --git a/src/widgets/boundary.tsx b/src/widgets/boundary.tsx new file mode 100644 index 000000000..21530f9f3 --- /dev/null +++ b/src/widgets/boundary.tsx @@ -0,0 +1,127 @@ +import Consola from 'consola'; +import React, { ReactNode } from 'react'; +import { openModal } from '@mantine/modals'; +import { withTranslation } from 'next-i18next'; +import { Button, Card, Center, Code, Group, Stack, Text, Title } from '@mantine/core'; +import { IconBrandGithub, IconBug, IconInfoCircle, IconRefresh } from '@tabler/icons'; + +type ErrorBoundaryState = { + hasError: boolean; + error: Error | undefined; +}; + +type ErrorBoundaryProps = { + t: (key: string) => string; + children: ReactNode; +}; + +/** + * A custom error boundary, that catches errors within widgets and renders an error component. + * The error component can be refreshed and shows a modal with error details + */ +class ErrorBoundary extends React.Component { + constructor(props: any) { + super(props); + + // Define a state variable to track whether is an error or not + this.state = { hasError: false, error: undefined }; + } + + static getDerivedStateFromError(error: Error) { + // Update state so the next render will show the fallback UI + return { hasError: true, error }; + } + + componentDidCatch(error: Error, errorInfo: any) { + Consola.error(`Error while rendering widget, ${error}: ${errorInfo}`); + } + + render() { + // Check if the error is thrown + if (this.state.hasError) { + return ( + ({ + backgroundColor: theme.colors.red[5], + })} + radius="lg" + shadow="sm" + withBorder + > +
+ + + + + {this.props.t('card.title')} + + {this.state.error && ( + + {this.state.error.toString()} + + )} + + + + + ), + }) + } + leftIcon={} + variant="light" + > + {this.props.t('card.buttons.details')} + + + + +
+
+ ); + } + + // Return children components in case of no error + return this.props.children; + } +} + +export default withTranslation('widgets/error-boundary')(ErrorBoundary); From 63f82971c8f725e2f497640eaead6e07b95e4954 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Sat, 18 Mar 2023 12:29:39 +0100 Subject: [PATCH 34/98] =?UTF-8?q?=E2=9C=A8=20Environment=20variable=20for?= =?UTF-8?q?=20default=20color=20scheme=20#237=20(#744)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/_app.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index e55dd6bef..b8178c006 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -38,6 +38,7 @@ function App( colorScheme: ColorScheme; packageAttributes: ServerSidePackageAttributesType; editModeEnabled: boolean; + defaultColorScheme: ColorScheme; } ) { const { Component, pageProps } = props; @@ -55,7 +56,7 @@ function App( // hook will return either 'dark' or 'light' on client // and always 'light' during ssr as window.matchMedia is not available - const preferredColorScheme = useColorScheme(); + const preferredColorScheme = useColorScheme(props.defaultColorScheme); const [colorScheme, setColorScheme] = useLocalStorage({ key: 'mantine-color-scheme', defaultValue: preferredColorScheme, @@ -144,10 +145,18 @@ App.getInitialProps = ({ ctx }: { ctx: GetServerSidePropsContext }) => { 'EXPERIMENTAL: You have disabled the edit mode. Modifications are no longer possible and any requests on the API will be dropped. If you want to disable this, unset the DISABLE_EDIT_MODE environment variable. This behaviour may be removed in future versions of Homarr' ); } + + if (process.env.DEFAULT_COLOR_SCHEME !== undefined) { + Consola.debug(`Overriding the default color scheme with ${process.env.DEFAULT_COLOR_SCHEME}`); + } + + const colorScheme: ColorScheme = process.env.DEFAULT_COLOR_SCHEME as ColorScheme ?? 'light'; + return { colorScheme: getCookie('color-scheme', ctx) || 'light', packageAttributes: getServiceSidePackageAttributes(), editModeEnabled: !disableEditMode, + defaultColorScheme: colorScheme, }; }; From 9aebcf0c698c12756c3d6b08fa1c097db97b62a3 Mon Sep 17 00:00:00 2001 From: ajnart Date: Mon, 20 Mar 2023 10:54:46 +0800 Subject: [PATCH 35/98] =?UTF-8?q?=E2=9C=A8=20Add=20a=20simple=20keybind=20?= =?UTF-8?q?viewer=20in=20about=20menu=20#751?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modals/AboutModal/AboutModal.tsx | 39 +++++++++++++++++-- .../Actions/ToggleEditMode/ToggleEditMode.tsx | 2 +- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx index 8f366fd9f..952018c0f 100644 --- a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx +++ b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx @@ -1,13 +1,14 @@ import { + Accordion, ActionIcon, Anchor, Badge, Button, createStyles, - Divider, Grid, Group, HoverCard, + Kbd, Modal, Stack, Table, @@ -35,6 +36,7 @@ import { useConfigContext } from '../../../../config/provider'; import { useConfigStore } from '../../../../config/store'; import { useEditModeInformationStore } from '../../../../hooks/useEditModeInformation'; import { usePackageAttributesStore } from '../../../../tools/client/zustands/usePackageAttributesStore'; +import Tip from '../../../layout/Tip'; import { usePrimaryGradient } from '../../../layout/useGradient'; import Credits from '../../../Settings/Common/Credits'; @@ -50,6 +52,21 @@ export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutMod const informations = useInformationTableItems(newVersionAvailable); const { t } = useTranslation(['common', 'layout/modals/about']); + const keybinds = [ + { key: 'Mod + J', shortcut: 'Toggle light/dark mode' }, + { key: 'Mod + K', shortcut: 'Focus on search bar' }, + { key: 'Mod + B', shortcut: 'Open docker widget' }, + { key: 'Mod + E', shortcut: 'Toggle Edit mode' }, + ]; + const rows = keybinds.map((element) => ( + + + {element.key} + + {element.shortcut} + + )); + return ( closeModal()} @@ -76,7 +93,7 @@ export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutMod
- +
{informations.map((item, index) => ( @@ -100,8 +117,24 @@ export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutMod ))}
+ + + }>Keybinds + + + + + + + + + {rows} +
KeyShortcut
+ Mod refers to your modifier key, it is Ctrl and Command/Super/Windows key +
+
+
- {t('layout/modals/about:contact')} diff --git a/src/components/layout/header/Actions/ToggleEditMode/ToggleEditMode.tsx b/src/components/layout/header/Actions/ToggleEditMode/ToggleEditMode.tsx index 365431379..c1f4445ff 100644 --- a/src/components/layout/header/Actions/ToggleEditMode/ToggleEditMode.tsx +++ b/src/components/layout/header/Actions/ToggleEditMode/ToggleEditMode.tsx @@ -29,7 +29,7 @@ export const ToggleEditModeAction = () => { const { config } = useConfigContext(); const { classes } = useCardStyles(true); - useHotkeys([['ctrl+E', toggleEditMode]]); + useHotkeys([['mod+E', toggleEditMode]]); useWindowEvent('beforeunload', (event: BeforeUnloadEvent) => { if (enabled) { From 6633d2178803de8e91e7918eebc48bb9f89277b6 Mon Sep 17 00:00:00 2001 From: Manuel Date: Mon, 20 Mar 2023 23:17:17 +0100 Subject: [PATCH 36/98] =?UTF-8?q?=F0=9F=A7=AA=20Add=20test=20for=20Plex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 1 + package.json | 3 +- setupVitest.ts | 8 ++ src/components/AppAvatar.test.tsx | 50 +++++++++++-- src/tools/server/getServerSideTranslations.ts | 4 +- src/tools/server/sdk/plex/plexClient.test.ts | 73 +++++++++++++++++++ vitest.config.ts | 5 +- yarn.lock | 59 +++++++++++++++ 8 files changed, 192 insertions(+), 11 deletions(-) create mode 100644 setupVitest.ts create mode 100644 src/tools/server/sdk/plex/plexClient.test.ts diff --git a/.eslintrc.js b/.eslintrc.js index 4c527d3ab..710ccb1ac 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -37,5 +37,6 @@ module.exports = { max: 3, }, ], + 'testing-library/no-node-access': ['error', { allowContainerFirstChild: true }], }, }; diff --git a/package.json b/package.json index cce450335..156f93dc6 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,8 @@ "turbo": "^1.7.4", "typescript": "^4.7.4", "video.js": "^8.0.3", - "vitest": "^0.29.3" + "vitest": "^0.29.3", + "vitest-fetch-mock": "^0.2.2" }, "resolutions": { "@types/react": "17.0.2", diff --git a/setupVitest.ts b/setupVitest.ts new file mode 100644 index 000000000..6d1c12953 --- /dev/null +++ b/setupVitest.ts @@ -0,0 +1,8 @@ +//setupVitest.js or similar file +import createFetchMock from 'vitest-fetch-mock'; +import { vi } from 'vitest'; + +const fetchMocker = createFetchMock(vi); + +// sets globalThis.fetch and globalThis.fetchMock to our mocked version +fetchMocker.enableMocks(); diff --git a/src/components/AppAvatar.test.tsx b/src/components/AppAvatar.test.tsx index b5cb29eaf..014043d6f 100644 --- a/src/components/AppAvatar.test.tsx +++ b/src/components/AppAvatar.test.tsx @@ -2,15 +2,51 @@ import { render } from '@testing-library/react'; import { describe, expect, it } from 'vitest'; import { AppAvatar } from './AppAvatar'; -describe(AppAvatar.name, () => { - it.concurrent('display placeholder when no url', () => { +describe('AppAvatar', () => { + it('display placeholder when no url', () => { const { container } = render(); - expect(container.firstElementChild).not.toBeNull(); - expect(container.firstElementChild!.className).contain('mantine-Avatar-root'); + expect(container.firstChild).toMatchInlineSnapshot(` +
+
+ + + +
+
+ `); + }); - const svgElement = container.querySelector('svg'); - expect(svgElement).not.toBeNull(); - expect(svgElement?.getAttribute('fill')).not.toBeNull(); + it('display placeholder when valid url', () => { + const { container } = render( + + ); + + expect(container.firstChild).toMatchInlineSnapshot(` +
+ +
+ `); }); }); diff --git a/src/tools/server/getServerSideTranslations.ts b/src/tools/server/getServerSideTranslations.ts index aa782cd7a..88fa1b6e3 100644 --- a/src/tools/server/getServerSideTranslations.ts +++ b/src/tools/server/getServerSideTranslations.ts @@ -9,7 +9,7 @@ export const getServerSideTranslations = async ( res?: ServerResponse, ) => { if (!req || !res) { - return await serverSideTranslations( + return serverSideTranslations( requestLocale ?? 'en', namespaces ); @@ -17,7 +17,7 @@ export const getServerSideTranslations = async ( const configLocale = getCookie('config-locale', { req, res }); - return await serverSideTranslations( + return serverSideTranslations( (configLocale ?? requestLocale ?? 'en') as string, namespaces ); diff --git a/src/tools/server/sdk/plex/plexClient.test.ts b/src/tools/server/sdk/plex/plexClient.test.ts new file mode 100644 index 000000000..557767022 --- /dev/null +++ b/src/tools/server/sdk/plex/plexClient.test.ts @@ -0,0 +1,73 @@ +import { describe, expect, it } from 'vitest'; +import 'vitest-fetch-mock'; +import { PlexClient } from './plexClient'; + +const mockResponse = ` + +`; + +describe('Plex SDK', () => { + it('abc', async () => { + // arrange + const client = new PlexClient('https://plex', 'MY_TOKEN'); + + fetchMock.mockResponseOnce(mockResponse); + + // act + const response = await client.getSessions(); + + // assert + expect(fetchMock.requests().length).toBe(1); + expect(fetchMock.requests()[0].url).toBe('https://plex/status/sessions?X-Plex-Token=MY_TOKEN'); + expect(response).not.toBeNull(); + expect(response.length).toBe(1); + expect(response[0].id).toBe('2894294r2jf2038fj3098jgf3gt'); + expect(response[0].username).toBe('example_usr'); + expect(response[0].userProfilePicture).toBe('https://google.com'); + expect(response[0].sessionName).toBe('Plex Web (Chrome)'); + expect(response[0].currentlyPlaying).toMatchObject({ + name: 'A long title', + type: 'movie', + metadata: { + video: { + bitrate: '20231', + height: '1080', + videoCodec: 'h264', + videoFrameRate: '24p', + width: '1920', + }, + audio: { audioChannels: '2', audioCodec: 'aac' }, + transcoding: { + audioChannels: '2', + audioCodec: 'aac', + audioDecision: 'transcode', + container: 'mp4', + context: 'streaming', + duration: '100', + error: false, + height: '1080', + sourceAudioCodec: 'dca', + sourceVideoCodec: 'h264', + timeStamp: '1679349635.2791338', + transcodeHwRequested: false, + videoCodec: 'h264', + videoDecision: 'copy', + width: '1920', + }, + }, + }); + }); +}); diff --git a/vitest.config.ts b/vitest.config.ts index 8f02bb21c..84963283d 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -12,6 +12,9 @@ export default defineConfig({ reporter: ['html'], all: true, exclude: ['.next/', '.yarn/', 'data/'] - } + }, + setupFiles: [ + "./setupVitest.ts" + ] }, }); diff --git a/yarn.lock b/yarn.lock index 1c4215b7d..9af9f32dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3145,6 +3145,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^3.0.6": + version: 3.1.5 + resolution: "cross-fetch@npm:3.1.5" + dependencies: + node-fetch: 2.6.7 + checksum: f6b8c6ee3ef993ace6277fd789c71b6acf1b504fd5f5c7128df4ef2f125a429e29cd62dc8c127523f04a5f2fa4771ed80e3f3d9695617f441425045f505cf3bb + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -4932,6 +4941,7 @@ __metadata: uuid: ^8.3.2 video.js: ^8.0.3 vitest: ^0.29.3 + vitest-fetch-mock: ^0.2.2 xml-js: ^1.6.11 yarn: ^1.22.19 zustand: ^4.1.4 @@ -6273,6 +6283,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 9.3.1 resolution: "node-gyp@npm:9.3.1" @@ -7868,6 +7892,13 @@ __metadata: languageName: node linkType: hard +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.14.1": version: 3.14.1 resolution: "tsconfig-paths@npm:3.14.1" @@ -8304,6 +8335,17 @@ __metadata: languageName: node linkType: hard +"vitest-fetch-mock@npm:^0.2.2": + version: 0.2.2 + resolution: "vitest-fetch-mock@npm:0.2.2" + dependencies: + cross-fetch: ^3.0.6 + peerDependencies: + vitest: ">=0.16.0" + checksum: fa160f301171cd45dbf7d782880b6b6063fc74b9dd1965ef9206545e812ca8696e6be76662afbac822c6bf850fbb66cf8fb066af646e0e159f5a87ab25c97a02 + languageName: node + linkType: hard + "vitest@npm:^0.29.3": version: 0.29.3 resolution: "vitest@npm:0.29.3" @@ -8378,6 +8420,13 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -8430,6 +8479,16 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2" From c799d507d2533701aac17146c8f7d4c99da09bf3 Mon Sep 17 00:00:00 2001 From: ajnart Date: Tue, 21 Mar 2023 11:11:50 +0800 Subject: [PATCH 37/98] =?UTF-8?q?=F0=9F=8E=A8=20Wrap=20shortcut=20with=20t?= =?UTF-8?q?ext=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dashboard/Modals/AboutModal/AboutModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx index 952018c0f..1914c59f9 100644 --- a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx +++ b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx @@ -63,7 +63,7 @@ export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutMod {element.key} - {element.shortcut} + {element.shortcut} )); From ed159ea3c3af0776971e85280d5295ae07c6275b Mon Sep 17 00:00:00 2001 From: ajnart Date: Tue, 21 Mar 2023 11:18:19 +0800 Subject: [PATCH 38/98] =?UTF-8?q?=F0=9F=8C=90=20Add=20translations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/locales/en/layout/modals/about.json | 3 +++ src/components/Dashboard/Modals/AboutModal/AboutModal.tsx | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/public/locales/en/layout/modals/about.json b/public/locales/en/layout/modals/about.json index aa99318db..d85feef8b 100644 --- a/public/locales/en/layout/modals/about.json +++ b/public/locales/en/layout/modals/about.json @@ -2,6 +2,9 @@ "description": "Homarr is a sleek, modern dashboard that puts all of your apps and services at your fingertips. With Homarr, you can access and control everything in one convenient location. Homarr seamlessly integrates with the apps you've added, providing you with valuable information and giving you complete control. Installation is a breeze, and Homarr supports a wide range of deployment methods.", "contact": "Having trouble or questions? Connect with us!", "addToDashboard": "Add to Dashboard", + "tip": "Mod refers to your modifier key, it is Ctrl and Command/Super/Windows key", + "key": "Shortcut key", + "action": "Action", "metrics": { "configurationSchemaVersion": "Configuration schema version", "configurationsCount": "Available configurations", diff --git a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx index 1914c59f9..0dffd9487 100644 --- a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx +++ b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx @@ -124,13 +124,13 @@ export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutMod - - + + {rows}
KeyShortcutt{'layout/modals/about:key'}t{'layout/modals/about:action'}
- Mod refers to your modifier key, it is Ctrl and Command/Super/Windows key + {t('layout/modals/about:tip')} From 850375767e745340be010939425d8e9949c79343 Mon Sep 17 00:00:00 2001 From: ajnart Date: Tue, 21 Mar 2023 11:20:15 +0800 Subject: [PATCH 39/98] =?UTF-8?q?=F0=9F=8C=90=20Add=20translations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/locales/en/layout/modals/about.json | 1 + src/components/Dashboard/Modals/AboutModal/AboutModal.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/public/locales/en/layout/modals/about.json b/public/locales/en/layout/modals/about.json index d85feef8b..83109b624 100644 --- a/public/locales/en/layout/modals/about.json +++ b/public/locales/en/layout/modals/about.json @@ -5,6 +5,7 @@ "tip": "Mod refers to your modifier key, it is Ctrl and Command/Super/Windows key", "key": "Shortcut key", "action": "Action", + "keybinds": "Keybinds", "metrics": { "configurationSchemaVersion": "Configuration schema version", "configurationsCount": "Available configurations", diff --git a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx index 0dffd9487..89d796001 100644 --- a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx +++ b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx @@ -119,7 +119,7 @@ export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutMod - }>Keybinds + }>t{'layout/modals/about:keybinds'} From 3bb0f2006687a6cc28aa18917f22d60901c13a4c Mon Sep 17 00:00:00 2001 From: ajnart Date: Tue, 21 Mar 2023 11:26:19 +0800 Subject: [PATCH 40/98] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Addre?= =?UTF-8?q?ss=20PR=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dashboard/Wrappers/gridstack/store.tsx | 1 - src/hooks/useScreenLargerThan.ts | 3 ++- src/widgets/calendar/CalendarDay.tsx | 11 +++++------ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/components/Dashboard/Wrappers/gridstack/store.tsx b/src/components/Dashboard/Wrappers/gridstack/store.tsx index 483d8abb7..3cf104d56 100644 --- a/src/components/Dashboard/Wrappers/gridstack/store.tsx +++ b/src/components/Dashboard/Wrappers/gridstack/store.tsx @@ -20,7 +20,6 @@ export const useNamedWrapperColumnCount = (): 'small' | 'medium' | 'large' | nul const mainAreaWidth = useGridstackStore((x) => x.mainAreaWidth); if (!mainAreaWidth) return null; - // TODO: Calculate rem to pixels using Calc function if (mainAreaWidth >= 1400) return 'large'; if (mainAreaWidth >= 800) return 'medium'; diff --git a/src/hooks/useScreenLargerThan.ts b/src/hooks/useScreenLargerThan.ts index 1b64ef336..2b1b3abd3 100644 --- a/src/hooks/useScreenLargerThan.ts +++ b/src/hooks/useScreenLargerThan.ts @@ -1,8 +1,9 @@ import { MantineSize, useMantineTheme } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; +import { MIN_WIDTH_MOBILE } from '../constants/constants'; export const useScreenLargerThan = (size: MantineSize | number) => { const { breakpoints } = useMantineTheme(); const pixelCount = typeof size === 'string' ? breakpoints[size] : size; - return useMediaQuery('(min-width: 500px)'); + return useMediaQuery(`(min-width: ${MIN_WIDTH_MOBILE})`); }; diff --git a/src/widgets/calendar/CalendarDay.tsx b/src/widgets/calendar/CalendarDay.tsx index f41789a67..ffee6c9cf 100644 --- a/src/widgets/calendar/CalendarDay.tsx +++ b/src/widgets/calendar/CalendarDay.tsx @@ -11,7 +11,6 @@ interface CalendarDayProps { export const CalendarDay = ({ date, medias }: CalendarDayProps) => { const [opened, { close, open }] = useDisclosure(false); - const { colorScheme, colors } = useMantineTheme(); if (medias.totalCount === 0) { return
{date.getDate()}
; @@ -33,14 +32,14 @@ export const CalendarDay = ({ date, medias }: CalendarDayProps) => { ({ margin: 5, backgroundColor: isToday(date) - ? colorScheme === 'dark' - ? colors.dark[5] - : colors.gray[0] + ? theme.colorScheme === 'dark' + ? theme.colors.dark[5] + : theme.colors.gray[0] : undefined, - }} + })} > From 13670c56267599ecb0e798bc62f03a8fdf733a9d Mon Sep 17 00:00:00 2001 From: ajnart Date: Tue, 21 Mar 2023 11:35:07 +0800 Subject: [PATCH 41/98] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Addre?= =?UTF-8?q?ss=20PR=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/api/configs/tryPassword.tsx | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/pages/api/configs/tryPassword.tsx b/src/pages/api/configs/tryPassword.tsx index 381845abf..1632985ab 100644 --- a/src/pages/api/configs/tryPassword.tsx +++ b/src/pages/api/configs/tryPassword.tsx @@ -2,26 +2,31 @@ import Consola from 'consola'; import { NextApiRequest, NextApiResponse } from 'next'; function Post(req: NextApiRequest, res: NextApiResponse) { - const { tried } = req.body; - // Try to match the password with the PASSWORD env variable - if (tried === process.env.PASSWORD) { + const { tried, type = 'password' } = req.body; + // If the type of password is "edit", we run this branch to check the edit password + if (type === 'edit') { + if (tried === process.env.EDIT_MODE_PASSWORD) { + process.env.DISABLE_EDIT_MODE = process.env.DISABLE_EDIT_MODE === 'true' ? 'false' : 'true'; + return res.status(200).json({ + success: true, + }); + } + } else if (tried === process.env.PASSWORD) { return res.status(200).json({ success: true, }); } - // Warn that there was a wrong password attempt (date : wrong password, person's IP) Consola.warn( `${new Date().toLocaleString()} : Wrong password attempt, from ${ req.headers['x-forwarded-for'] }` ); - return res.status(200).json({ + return res.status(401).json({ success: false, }); } export default async (req: NextApiRequest, res: NextApiResponse) => { - // Filter out if the request is a POST or a GET if (req.method === 'POST') { return Post(req, res); } From b923f8261bed913645219a1da11dc72522efc02e Mon Sep 17 00:00:00 2001 From: ajnart Date: Tue, 21 Mar 2023 11:36:34 +0800 Subject: [PATCH 42/98] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Addre?= =?UTF-8?q?ss=20PR=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../header/SettingsMenu/EditModeToggle.tsx | 38 ++++++++++--------- src/pages/api/configs/tryToggleEdit.tsx | 33 ---------------- 2 files changed, 20 insertions(+), 51 deletions(-) delete mode 100644 src/pages/api/configs/tryToggleEdit.tsx diff --git a/src/components/layout/header/SettingsMenu/EditModeToggle.tsx b/src/components/layout/header/SettingsMenu/EditModeToggle.tsx index 5d4fda871..e27c48139 100644 --- a/src/components/layout/header/SettingsMenu/EditModeToggle.tsx +++ b/src/components/layout/header/SettingsMenu/EditModeToggle.tsx @@ -15,24 +15,26 @@ function ModalContent() { return (
{ - axios.post('/api/configs/tryToggleEdit', { tried: values.triedPassword }).then((res) => { - if (res.data.success) { - showNotification({ - title: 'Success', - message: 'Successfully toggled edit mode, reloading the page...', - color: 'green', - }); - setTimeout(() => { - window.location.reload(); - }, 500); - } else { - showNotification({ - title: 'Wrong password', - message: 'The password you entered is wrong.', - color: 'red', - }); - } - }); + axios + .post('/api/configs/tryPassword', { tried: values.triedPassword, type: 'edit' }) + .then((res) => { + if (res.data.success) { + showNotification({ + title: 'Success', + message: 'Successfully toggled edit mode, reloading the page...', + color: 'green', + }); + setTimeout(() => { + window.location.reload(); + }, 500); + } else { + showNotification({ + title: 'Wrong password', + message: 'The password you entered is wrong.', + color: 'red', + }); + } + }); })} > diff --git a/src/pages/api/configs/tryToggleEdit.tsx b/src/pages/api/configs/tryToggleEdit.tsx deleted file mode 100644 index 45f22e8f2..000000000 --- a/src/pages/api/configs/tryToggleEdit.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import Consola from 'consola'; -import { NextApiRequest, NextApiResponse } from 'next'; - -function Post(req: NextApiRequest, res: NextApiResponse) { - const { tried } = req.body; - // Try to match the password with the EDIT_PASSWORD env variable - if (tried === process.env.EDIT_MODE_PASSWORD) { - process.env.DISABLE_EDIT_MODE = process.env.DISABLE_EDIT_MODE === 'true' ? 'false' : 'true'; - return res.status(200).json({ - success: true, - }); - } - // Warn that there was a wrong password attempt (date : wrong password, person's IP) - Consola.warn( - `${new Date().toLocaleString()} : Wrong edit password attempt, from ${ - req.headers['x-forwarded-for'] - }` - ); - return res.status(200).json({ - success: false, - }); -} - -export default async (req: NextApiRequest, res: NextApiResponse) => { - // Filter out if the request is a POST or a GET - if (req.method === 'POST') { - return Post(req, res); - } - return res.status(405).json({ - statusCode: 405, - message: 'Method not allowed', - }); -}; From c507a8892ff66412f95ba3ceeafbea0b7c659e89 Mon Sep 17 00:00:00 2001 From: ajnart Date: Tue, 21 Mar 2023 11:39:34 +0800 Subject: [PATCH 43/98] =?UTF-8?q?=F0=9F=90=9B=20Fix=20bug=20with=20notific?= =?UTF-8?q?ation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../header/SettingsMenu/EditModeToggle.tsx | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/components/layout/header/SettingsMenu/EditModeToggle.tsx b/src/components/layout/header/SettingsMenu/EditModeToggle.tsx index e27c48139..fed323e8c 100644 --- a/src/components/layout/header/SettingsMenu/EditModeToggle.tsx +++ b/src/components/layout/header/SettingsMenu/EditModeToggle.tsx @@ -18,22 +18,21 @@ function ModalContent() { axios .post('/api/configs/tryPassword', { tried: values.triedPassword, type: 'edit' }) .then((res) => { - if (res.data.success) { - showNotification({ - title: 'Success', - message: 'Successfully toggled edit mode, reloading the page...', - color: 'green', - }); - setTimeout(() => { - window.location.reload(); - }, 500); - } else { - showNotification({ - title: 'Wrong password', - message: 'The password you entered is wrong.', - color: 'red', - }); - } + showNotification({ + title: 'Success', + message: 'Successfully toggled edit mode, reloading the page...', + color: 'green', + }); + setTimeout(() => { + window.location.reload(); + }, 500); + }) + .catch((_) => { + showNotification({ + title: 'Error', + message: 'Failed to toggle edit mode, please try again.', + color: 'red', + }); }); })} > From 94f13b805ce5b73a0fbc0dfbe5e458d11d4245f9 Mon Sep 17 00:00:00 2001 From: ajnart Date: Tue, 21 Mar 2023 11:40:33 +0800 Subject: [PATCH 44/98] =?UTF-8?q?=F0=9F=90=9B=20Hide=20docker=20when=20edi?= =?UTF-8?q?t=20mode=20is=20not=20enabled=20#745?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/layout/header/Header.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/layout/header/Header.tsx b/src/components/layout/header/Header.tsx index 44bb12b51..5eeadc149 100644 --- a/src/components/layout/header/Header.tsx +++ b/src/components/layout/header/Header.tsx @@ -42,7 +42,7 @@ export function Header(props: any) { > {!editModeEnabled && } - + {!editModeEnabled && } Date: Tue, 21 Mar 2023 11:43:10 +0800 Subject: [PATCH 45/98] =?UTF-8?q?=F0=9F=9A=A8=20Fix=20compilation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dashboard/Modals/AboutModal/AboutModal.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx index 89d796001..936779bff 100644 --- a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx +++ b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx @@ -63,7 +63,9 @@ export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutMod
- + )); @@ -119,13 +121,15 @@ export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutMod
{element.key} {element.shortcut} + {element.shortcut} +
- }>t{'layout/modals/about:keybinds'} + }> + {t('layout/modals/about:keybinds')} + - - + + {rows} From 0d6346c73a3fd91ac31294b48f3f7a94e9886fcd Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Wed, 22 Mar 2023 13:29:00 +0100 Subject: [PATCH 46/98] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Pull=20request=20com?= =?UTF-8?q?ments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.md | 3 +++ next-i18next.config.js | 1 + next.config.js | 2 +- src/modules/Docker/ContainerActionBar.tsx | 8 ++++++++ src/tools/types.ts | 7 +++++++ setupVitest.ts => tests/setupVitest.ts | 0 vitest.config.ts | 8 ++++---- 7 files changed, 24 insertions(+), 5 deletions(-) rename setupVitest.ts => tests/setupVitest.ts (100%) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 461f16f4a..b41812c26 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -105,6 +105,9 @@ Homarr uses [GitMoji](https://gitmoji.dev/). We would appreciate it if everyone keeps their commit messages withing these rulings. ### Tests + +> Components should be tested using unit tests. A unit is the smallest isolated part of the component. Unit tests must not have any dependencies and must be isolated. + - Place testfiles directly at the root of the unit - Only test a single unit of work inside a unit test - You may test multiple units inside one test file diff --git a/next-i18next.config.js b/next-i18next.config.js index 71af66b5d..d39ce661f 100644 --- a/next-i18next.config.js +++ b/next-i18next.config.js @@ -1,6 +1,7 @@ const path = require('path'); module.exports = { + // https://www.i18next.com/overview/configuration-options#logging i18n: { defaultLocale: 'en', locales: [ diff --git a/next.config.js b/next.config.js index 187db4b22..dde3ec977 100644 --- a/next.config.js +++ b/next.config.js @@ -10,5 +10,5 @@ module.exports = withBundleAnalyzer({ }, reactStrictMode: true, output: 'standalone', - i18n: i18n, + i18n, }); diff --git a/src/modules/Docker/ContainerActionBar.tsx b/src/modules/Docker/ContainerActionBar.tsx index 2c8a312ad..a3df3f6c1 100644 --- a/src/modules/Docker/ContainerActionBar.tsx +++ b/src/modules/Docker/ContainerActionBar.tsx @@ -207,6 +207,9 @@ export default function ContainerActionBar({ selected, reload }: ContainerAction ); } +/** + * @deprecated legacy code + */ function tryMatchType(imageName: string): ServiceType { const match = MatchingImages.find(({ image }) => imageName.includes(image)); if (match) { @@ -216,6 +219,11 @@ function tryMatchType(imageName: string): ServiceType { return 'Other'; } +/** + * @deprecated + * @param container the container to match + * @returns a new service + */ const tryMatchService = (container: Dockerode.ContainerInfo | undefined) => { if (container === undefined) return {}; const name = container.Names[0].substring(1); diff --git a/src/tools/types.ts b/src/tools/types.ts index cb59c6f3a..71046a433 100644 --- a/src/tools/types.ts +++ b/src/tools/types.ts @@ -1,4 +1,5 @@ import { MantineTheme } from '@mantine/core'; + import { OptionValues } from '../modules/ModuleTypes'; export interface Settings { @@ -74,6 +75,12 @@ export type ServiceType = | 'Sabnzbd' | 'NZBGet'; +/** + * @deprecated + * @param name the name to match + * @param form the form + * @returns the port from the map + */ export function tryMatchPort(name: string | undefined, form?: any) { if (!name) { return undefined; diff --git a/setupVitest.ts b/tests/setupVitest.ts similarity index 100% rename from setupVitest.ts rename to tests/setupVitest.ts diff --git a/vitest.config.ts b/vitest.config.ts index 84963283d..df9cb8561 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -6,15 +6,15 @@ import { defineConfig } from 'vitest/config'; export default defineConfig({ plugins: [react()], test: { - environment: 'jsdom', + environment: 'happy-dom', coverage: { provider: 'c8', reporter: ['html'], all: true, - exclude: ['.next/', '.yarn/', 'data/'] + exclude: ['.next/', '.yarn/', 'data/'], }, setupFiles: [ - "./setupVitest.ts" - ] + './tests/setupVitest.ts', + ], }, }); From fdeac8eb29bb1a3d47e5e9580a13fb83787a4976 Mon Sep 17 00:00:00 2001 From: ajnart Date: Sat, 18 Mar 2023 20:29:47 +0800 Subject: [PATCH 47/98] =?UTF-8?q?=E2=9C=A8=20Add=20TV=20show=20name=20in?= =?UTF-8?q?=20media=20info=20and=20style=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/api/modules/media-server/index.ts | 3 +- src/types/api/media-server/session-info.ts | 1 + src/widgets/media-server/MediaServerTile.tsx | 29 ++++++++++++++----- .../media-server/NowPlayingDisplay.tsx | 7 ++--- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/pages/api/modules/media-server/index.ts b/src/pages/api/modules/media-server/index.ts index 09430878d..9085c02bc 100644 --- a/src/pages/api/modules/media-server/index.ts +++ b/src/pages/api/modules/media-server/index.ts @@ -110,8 +110,9 @@ const handleServer = async (app: ConfigAppType): Promise x.enabled); - const { data, isError } = useGetMediaServers({ + const { data, isError, isFetching, isInitialLoading } = useGetMediaServers({ enabled: config !== undefined, }); @@ -57,16 +59,28 @@ function MediaServerTile({ widget }: MediaServerWidgetProps) { ); } - if (!data) { -
- -
; + if (isInitialLoading) { + return ( + + + + {t('descriptor.name')} + Homarr is loading streams... + + + ); } return ( -
t{'layout/modals/about:key'}t{'layout/modals/about:action'}{t('layout/modals/about:key')}{t('layout/modals/about:action')}
+
@@ -97,7 +111,8 @@ function MediaServerTile({ widget }: MediaServerWidgetProps) { return ( ); })} diff --git a/src/widgets/media-server/NowPlayingDisplay.tsx b/src/widgets/media-server/NowPlayingDisplay.tsx index 740de5507..98decb05c 100644 --- a/src/widgets/media-server/NowPlayingDisplay.tsx +++ b/src/widgets/media-server/NowPlayingDisplay.tsx @@ -30,11 +30,10 @@ export const NowPlayingDisplay = ({ session }: { session: GenericSessionInfo }) }; const Test = Icon(); - return ( - + {session.currentlyPlaying.name} {session.currentlyPlaying.albumName ? ( @@ -43,8 +42,8 @@ export const NowPlayingDisplay = ({ session }: { session: GenericSessionInfo }) ) : ( session.currentlyPlaying.seasonName && ( - - {session.currentlyPlaying.seasonName} + + {session.currentlyPlaying.seasonName} - {session.currentlyPlaying.episodeName} ) )} From 8d1ebba2e1e3aabec7b2fcaa9510646edb03c571 Mon Sep 17 00:00:00 2001 From: ajnart Date: Thu, 23 Mar 2023 01:28:17 +0800 Subject: [PATCH 48/98] =?UTF-8?q?=F0=9F=92=84=20Style=20and=20usability=20?= =?UTF-8?q?improvements=20to=20RSS=20widget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/widgets/rss/useGetRssFeed.tsx | 10 --- src/widgets/rss/RssWidgetTile.tsx | 115 ++++++++++++++---------- 2 files changed, 70 insertions(+), 55 deletions(-) delete mode 100644 src/hooks/widgets/rss/useGetRssFeed.tsx diff --git a/src/hooks/widgets/rss/useGetRssFeed.tsx b/src/hooks/widgets/rss/useGetRssFeed.tsx deleted file mode 100644 index 2fc9e07e3..000000000 --- a/src/hooks/widgets/rss/useGetRssFeed.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { useQuery } from '@tanstack/react-query'; - -export const useGetRssFeed = (feedUrl: string) => - useQuery({ - queryKey: ['rss-feed', feedUrl], - queryFn: async () => { - const response = await fetch('/api/modules/rss'); - return response.json(); - }, - }); diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index 6c6e53b4e..0b2156f0f 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -14,7 +14,6 @@ import { Stack, Text, Title, - UnstyledButton, } from '@mantine/core'; import { IconBulldozer, @@ -25,11 +24,11 @@ import { IconRss, IconSpeakerphone, } from '@tabler/icons'; +import { useQuery } from '@tanstack/react-query'; +import dayjs from 'dayjs'; import { useTranslation } from 'next-i18next'; import Link from 'next/link'; import { useState } from 'react'; -import { useGetRssFeed } from '../../hooks/widgets/rss/useGetRssFeed'; -import { sleep } from '../../tools/client/time'; import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; @@ -57,6 +56,15 @@ interface RssTileProps { widget: IRssWidget; } +const useGetRssFeed = (feedUrl: string) => + useQuery({ + queryKey: ['rss-feed', feedUrl], + queryFn: async () => { + const response = await fetch('/api/modules/rss'); + return response.json(); + }, + }); + function RssTile({ widget }: RssTileProps) { const { t } = useTranslation('modules/rss'); const { data, isLoading, isFetching, isError, refetch } = useGetRssFeed( @@ -65,9 +73,27 @@ function RssTile({ widget }: RssTileProps) { const { classes } = useStyles(); const [loadingOverlayVisible, setLoadingOverlayVisible] = useState(false); + function formatDate(input: string): string { + // Parse the input date as a local date + const inputDate = dayjs(new Date(input)); + const now = dayjs(); // Current date and time + + const diffInHours = now.diff(inputDate, 'hour'); + const diffInDays = now.diff(inputDate, 'day'); + + // If the input date is more than 2 weeks ago, return the formatted date + if (diffInDays > 14) { + return inputDate.format('DD MMM YYYY'); + } + if (diffInDays >= 1) { + return `${diffInDays} days ago`; + } + return `${diffInHours} hours ago`; + } + if (!data || isLoading) { return ( -
+
); @@ -87,32 +113,8 @@ function RssTile({ widget }: RssTileProps) { return ( - - - {data.feed.image ? ( - - ) : ( - {data.feed.title} - )} - { - setLoadingOverlayVisible(true); - await Promise.all([sleep(1500), refetch()]); - setLoadingOverlayVisible(false); - }} - disabled={isFetching || isLoading} - > - - - - - + + {data.feed.title && {data.feed.title}} {data.feed.items.map((item: any, index: number) => ( @@ -150,7 +152,7 @@ function RssTile({ widget }: RssTileProps) { {item.categories && ( {item.categories.map((category: any, categoryIndex: number) => ( - {category._} + {category} ))} )} @@ -160,7 +162,7 @@ function RssTile({ widget }: RssTileProps) { {item.content} - {item.pubDate && } + {item.pubDate && } @@ -169,23 +171,27 @@ function RssTile({ widget }: RssTileProps) { - - - - {data.feed.copyright} - - - - - - {data.feed.pubDate} - - + {data.feed.copyright && ( + + + + {data.feed.copyright} + + + )} + {data.feed.pubDate && ( + + + + {data.feed.pubDate} + + + )} {data.feed.lastBuildDate && ( - {data.feed.lastBuildDate} + {formatDate(data.feed.lastBuildDate)} )} @@ -204,6 +210,25 @@ function RssTile({ widget }: RssTileProps) { )} + refetch()} + bottom={10} + styles={{ + root: { + borderColor: 'red', + }, + }} + > + {data.feed.image ? ( + + ) : ( + + )} + ); From 577e467048d7cf8aecb0e4c42bbde5029448be04 Mon Sep 17 00:00:00 2001 From: Manuel Date: Wed, 22 Mar 2023 21:40:38 +0100 Subject: [PATCH 49/98] =?UTF-8?q?=E2=9E=95=20Add=20happy-dom=20dependency?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 +- yarn.lock | 339 ++++++++------------------------------------------- 2 files changed, 54 insertions(+), 289 deletions(-) diff --git a/package.json b/package.json index 88e93644f..b600395ca 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "dev": "next dev", "build": "vitest run && next build", "analyze": "vitest run && ANALYZE=true next build", - "turbo" : "turbo run build", + "turbo": "turbo run build", "start": "next start", "typecheck": "tsc --noEmit", "export": "vitest run && next build && next export", @@ -94,7 +94,7 @@ "eslint-plugin-testing-library": "^5.5.1", "eslint-plugin-unused-imports": "^2.0.0", "eslint-plugin-vitest": "^0.0.54", - "jsdom": "^21.1.1", + "happy-dom": "^8.9.0", "prettier": "^2.7.1", "sass": "^1.56.1", "turbo": "^1.8.3", diff --git a/yarn.lock b/yarn.lock index 21ca2518b..d96e28b27 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2279,13 +2279,6 @@ __metadata: languageName: node linkType: hard -"abab@npm:^2.0.6": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e - languageName: node - linkType: hard - "abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -2293,16 +2286,6 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^7.0.0": - version: 7.0.1 - resolution: "acorn-globals@npm:7.0.1" - dependencies: - acorn: ^8.1.0 - acorn-walk: ^8.0.2 - checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 - languageName: node - linkType: hard - "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -2312,14 +2295,14 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.2.0": +"acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.2.0": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 languageName: node linkType: hard -"acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.8.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2": +"acorn@npm:^8.0.4, acorn@npm:^8.8.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2": version: 8.8.2 resolution: "acorn@npm:8.8.2" bin: @@ -3172,12 +3155,10 @@ __metadata: languageName: node linkType: hard -"cssstyle@npm:^3.0.0": - version: 3.0.0 - resolution: "cssstyle@npm:3.0.0" - dependencies: - rrweb-cssom: ^0.6.0 - checksum: 31f694dfed9998ed93570fe539610837b878193dd8487c33cb12db8004333c53c2a3904166288bbec68388c72fb01014d46d3243ddfb02fe845989d852c06f27 +"css.escape@npm:^1.5.1": + version: 1.5.1 + resolution: "css.escape@npm:1.5.1" + checksum: f6d38088d870a961794a2580b2b2af1027731bb43261cfdce14f19238a88664b351cc8978abc20f06cc6bbde725699dec8deb6fe9816b139fc3f2af28719e774 languageName: node linkType: hard @@ -3314,17 +3295,6 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^4.0.0": - version: 4.0.0 - resolution: "data-urls@npm:4.0.0" - dependencies: - abab: ^2.0.6 - whatwg-mimetype: ^3.0.0 - whatwg-url: ^12.0.0 - checksum: 006e869b5bf079647949a3e9b1dd69d84b2d5d26e6b01c265485699bc96e83817d4b5aae758b2910a4c58c0601913f3a0034121c1ca2da268e9a244c57515b15 - languageName: node - linkType: hard - "dayjs@npm:^1.11.7": version: 1.11.7 resolution: "dayjs@npm:1.11.7" @@ -3353,13 +3323,6 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.4.3": - version: 10.4.3 - resolution: "decimal.js@npm:10.4.3" - checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae - languageName: node - linkType: hard - "decompress-response@npm:^6.0.0": version: 6.0.0 resolution: "decompress-response@npm:6.0.0" @@ -3403,7 +3366,7 @@ __metadata: languageName: node linkType: hard -"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": +"deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 @@ -3554,15 +3517,6 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^4.0.0": - version: 4.0.0 - resolution: "domexception@npm:4.0.0" - dependencies: - webidl-conversions: ^7.0.0 - checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 - languageName: node - linkType: hard - "domhandler@npm:4.3.1, domhandler@npm:^4.2.0, domhandler@npm:^4.2.2": version: 4.3.1 resolution: "domhandler@npm:4.3.1" @@ -3659,13 +3613,6 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.4.0": - version: 4.4.0 - resolution: "entities@npm:4.4.0" - checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 - languageName: node - linkType: hard - "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -3876,25 +3823,6 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^2.0.0": - version: 2.0.0 - resolution: "escodegen@npm:2.0.0" - dependencies: - esprima: ^4.0.1 - estraverse: ^5.2.0 - esutils: ^2.0.2 - optionator: ^0.8.1 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 5aa6b2966fafe0545e4e77936300cc94ad57cfe4dc4ebff9950492eaba83eef634503f12d7e3cbd644ecc1bab388ad0e92b06fd32222c9281a75d1cf02ec6cef - languageName: node - linkType: hard - "eslint-config-airbnb-base@npm:^15.0.0": version: 15.0.0 resolution: "eslint-config-airbnb-base@npm:15.0.0" @@ -4215,16 +4143,6 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.1": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 - languageName: node - linkType: hard - "esquery@npm:^1.4.0": version: 1.4.2 resolution: "esquery@npm:1.4.2" @@ -4291,7 +4209,7 @@ __metadata: languageName: node linkType: hard -"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": +"fast-levenshtein@npm:^2.0.6": version: 2.0.6 resolution: "fast-levenshtein@npm:2.0.6" checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c @@ -4780,6 +4698,21 @@ __metadata: languageName: node linkType: hard +"happy-dom@npm:^8.9.0": + version: 8.9.0 + resolution: "happy-dom@npm:8.9.0" + dependencies: + css.escape: ^1.5.1 + he: ^1.2.0 + iconv-lite: ^0.6.3 + node-fetch: ^2.x.x + webidl-conversions: ^7.0.0 + whatwg-encoding: ^2.0.0 + whatwg-mimetype: ^3.0.0 + checksum: 2a9d853199e924e4445c11844a3d0fdd75b9831edab4c5dda52c4725c4f7889cd919814333162b70b3ae43884ec70ed50fbc22564eb94ba09408218922870a34 + languageName: node + linkType: hard + "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -4849,6 +4782,15 @@ __metadata: languageName: node linkType: hard +"he@npm:^1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 + languageName: node + linkType: hard + "hey-listen@npm:^1.0.8": version: 1.0.8 resolution: "hey-listen@npm:1.0.8" @@ -4921,10 +4863,10 @@ __metadata: eslint-plugin-vitest: ^0.0.54 fily-publish-gridstack: ^0.0.13 framer-motion: ^9.0.2 + happy-dom: ^8.9.0 html-entities: ^2.3.3 i18next: ^21.9.1 js-file-download: ^0.4.12 - jsdom: ^21.1.1 next: ^13.2.1 next-i18next: ^11.3.0 nzbget-api: ^0.0.3 @@ -4958,15 +4900,6 @@ __metadata: languageName: node linkType: hard -"html-encoding-sniffer@npm:^3.0.0": - version: 3.0.0 - resolution: "html-encoding-sniffer@npm:3.0.0" - dependencies: - whatwg-encoding: ^2.0.0 - checksum: 8d806aa00487e279e5ccb573366a951a9f68f65c90298eac9c3a2b440a7ffe46615aff2995a2f61c6746c639234e6179a97e18ca5ccbbf93d3725ef2099a4502 - languageName: node - linkType: hard - "html-entities@npm:^2.3.3": version: 2.3.3 resolution: "html-entities@npm:2.3.3" @@ -5069,7 +5002,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^5.0.0, https-proxy-agent@npm:^5.0.1": +"https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" dependencies: @@ -5104,7 +5037,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: @@ -5383,13 +5316,6 @@ __metadata: languageName: node linkType: hard -"is-potential-custom-element-name@npm:^1.0.1": - version: 1.0.1 - resolution: "is-potential-custom-element-name@npm:1.0.1" - checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab - languageName: node - linkType: hard - "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -5568,45 +5494,6 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^21.1.1": - version: 21.1.1 - resolution: "jsdom@npm:21.1.1" - dependencies: - abab: ^2.0.6 - acorn: ^8.8.2 - acorn-globals: ^7.0.0 - cssstyle: ^3.0.0 - data-urls: ^4.0.0 - decimal.js: ^10.4.3 - domexception: ^4.0.0 - escodegen: ^2.0.0 - form-data: ^4.0.0 - html-encoding-sniffer: ^3.0.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.1 - is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.2 - parse5: ^7.1.2 - rrweb-cssom: ^0.6.0 - saxes: ^6.0.0 - symbol-tree: ^3.2.4 - tough-cookie: ^4.1.2 - w3c-xmlserializer: ^4.0.0 - webidl-conversions: ^7.0.0 - whatwg-encoding: ^2.0.0 - whatwg-mimetype: ^3.0.0 - whatwg-url: ^12.0.1 - ws: ^8.13.0 - xml-name-validator: ^4.0.0 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: ea33c3f3f084b48685e3838baa1112f0cbffc2949b0249f90ee19152b66dbafc6ae7dd8573ee66933697f881e3bc04c0efc2b56cd26f64fd3e6321a64164e2d1 - languageName: node - linkType: hard - "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -5730,16 +5617,6 @@ __metadata: languageName: node linkType: hard -"levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" - dependencies: - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e - languageName: node - linkType: hard - "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -6297,6 +6174,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.x.x": + version: 2.6.9 + resolution: "node-fetch@npm:2.6.9" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: acb04f9ce7224965b2b59e71b33c639794d8991efd73855b0b250921382b38331ffc9d61bce502571f6cc6e11a8905ca9b1b6d4aeb586ab093e2756a1fd190d0 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 9.3.1 resolution: "node-gyp@npm:9.3.1" @@ -6375,13 +6266,6 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.2": - version: 2.2.2 - resolution: "nwsapi@npm:2.2.2" - checksum: 43769106292bc95f776756ca2f3513dab7b4d506a97c67baec32406447841a35f65f29c1f95ab5d42785210fd41668beed33ca16fa058780be43b101ad73e205 - languageName: node - linkType: hard - "nzbget-api@npm:^0.0.3": version: 0.0.3 resolution: "nzbget-api@npm:0.0.3" @@ -6504,20 +6388,6 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.8.1": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" - dependencies: - deep-is: ~0.1.3 - fast-levenshtein: ~2.0.6 - levn: ~0.3.0 - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - word-wrap: ~1.2.3 - checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 - languageName: node - linkType: hard - "optionator@npm:^0.9.1": version: 0.9.1 resolution: "optionator@npm:0.9.1" @@ -6603,15 +6473,6 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^7.1.2": - version: 7.1.2 - resolution: "parse5@npm:7.1.2" - dependencies: - entities: ^4.4.0 - checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 - languageName: node - linkType: hard - "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -6726,13 +6587,6 @@ __metadata: languageName: node linkType: hard -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 - languageName: node - linkType: hard - "prettier@npm:^2.7.1": version: 2.8.4 resolution: "prettier@npm:2.8.4" @@ -6819,7 +6673,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.0": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": version: 2.3.0 resolution: "punycode@npm:2.3.0" checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 @@ -7195,13 +7049,6 @@ __metadata: languageName: node linkType: hard -"rrweb-cssom@npm:^0.6.0": - version: 0.6.0 - resolution: "rrweb-cssom@npm:0.6.0" - checksum: 182312f6e4f41d18230ccc34f14263bc8e8a6b9d30ee3ec0d2d8e643c6f27964cd7a8d638d4a00e988d93e8dc55369f4ab5a473ccfeff7a8bab95b36d2b5499c - languageName: node - linkType: hard - "rss-parser@npm:^3.12.0": version: 3.12.0 resolution: "rss-parser@npm:3.12.0" @@ -7301,15 +7148,6 @@ __metadata: languageName: node linkType: hard -"saxes@npm:^6.0.0": - version: 6.0.0 - resolution: "saxes@npm:6.0.0" - dependencies: - xmlchars: ^2.2.0 - checksum: d3fa3e2aaf6c65ed52ee993aff1891fc47d5e47d515164b5449cbf5da2cbdc396137e55590472e64c5c436c14ae64a8a03c29b9e7389fc6f14035cf4e982ef3b - languageName: node - linkType: hard - "scheduler@npm:^0.23.0": version: 0.23.0 resolution: "scheduler@npm:0.23.0" @@ -7468,7 +7306,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.1, source-map@npm:~0.6.1": +"source-map@npm:^0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 @@ -7732,13 +7570,6 @@ __metadata: languageName: node linkType: hard -"symbol-tree@npm:^3.2.4": - version: 3.2.4 - resolution: "symbol-tree@npm:3.2.4" - checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d - languageName: node - linkType: hard - "tabbable@npm:^6.0.1": version: 6.1.1 resolution: "tabbable@npm:6.1.1" @@ -7883,15 +7714,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:^4.1.1": - version: 4.1.1 - resolution: "tr46@npm:4.1.1" - dependencies: - punycode: ^2.3.0 - checksum: aeeb821ac2cd792e63ec84888b4fd6598ac6ed75d861579e21a5cf9d4ee78b2c6b94e7d45036f2ca2088bc85b9b46560ad23c4482979421063b24137349dbd96 - languageName: node - linkType: hard - "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -8023,15 +7845,6 @@ __metadata: languageName: node linkType: hard -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" - dependencies: - prelude-ls: ~1.1.2 - checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 - languageName: node - linkType: hard - "type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": version: 4.0.8 resolution: "type-detect@npm:4.0.8" @@ -8404,15 +8217,6 @@ __metadata: languageName: node linkType: hard -"w3c-xmlserializer@npm:^4.0.0": - version: 4.0.0 - resolution: "w3c-xmlserializer@npm:4.0.0" - dependencies: - xml-name-validator: ^4.0.0 - checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 - languageName: node - linkType: hard - "web-streams-polyfill@npm:4.0.0-beta.3": version: 4.0.0-beta.3 resolution: "web-streams-polyfill@npm:4.0.0-beta.3" @@ -8469,16 +8273,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^12.0.0, whatwg-url@npm:^12.0.1": - version: 12.0.1 - resolution: "whatwg-url@npm:12.0.1" - dependencies: - tr46: ^4.1.1 - webidl-conversions: ^7.0.0 - checksum: 8698993b763c1e7eda5ed16c31dab24bca6489626aca7caf8b5a2b64684dda6578194786f10ec42ceb1c175feea16d0a915096e6419e08d154ce551c43176972 - languageName: node - linkType: hard - "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" @@ -8560,7 +8354,7 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": +"word-wrap@npm:^1.2.3": version: 1.2.3 resolution: "word-wrap@npm:1.2.3" checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f @@ -8600,21 +8394,6 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.13.0": - version: 8.13.0 - resolution: "ws@npm:8.13.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c - languageName: node - linkType: hard - "xml-js@npm:^1.6.11": version: 1.6.11 resolution: "xml-js@npm:1.6.11" @@ -8626,13 +8405,6 @@ __metadata: languageName: node linkType: hard -"xml-name-validator@npm:^4.0.0": - version: 4.0.0 - resolution: "xml-name-validator@npm:4.0.0" - checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad - languageName: node - linkType: hard - "xml2js@npm:^0.4.19": version: 0.4.23 resolution: "xml2js@npm:0.4.23" @@ -8650,13 +8422,6 @@ __metadata: languageName: node linkType: hard -"xmlchars@npm:^2.2.0": - version: 2.2.0 - resolution: "xmlchars@npm:2.2.0" - checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 - languageName: node - linkType: hard - "xtend@npm:^4.0.0": version: 4.0.2 resolution: "xtend@npm:4.0.2" From c7317c7278a982fcdb32ed31e57eded9bdbe7036 Mon Sep 17 00:00:00 2001 From: ajnart Date: Mon, 27 Mar 2023 11:42:17 +0900 Subject: [PATCH 50/98] Address PR comments --- src/widgets/rss/RssWidgetTile.tsx | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index 0b2156f0f..b594803e6 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -78,17 +78,11 @@ function RssTile({ widget }: RssTileProps) { const inputDate = dayjs(new Date(input)); const now = dayjs(); // Current date and time - const diffInHours = now.diff(inputDate, 'hour'); - const diffInDays = now.diff(inputDate, 'day'); - - // If the input date is more than 2 weeks ago, return the formatted date - if (diffInDays > 14) { - return inputDate.format('DD MMM YYYY'); - } - if (diffInDays >= 1) { - return `${diffInDays} days ago`; - } - return `${diffInHours} hours ago`; + // The difference between the input date and now + const difference = now.diff(inputDate, 'ms'); + const duration = dayjs.duration(difference, 'ms'); + const humanizedDuration = duration.humanize(); + return `${humanizedDuration} ago`; } if (!data || isLoading) { From 39a4e89d66fca39594cd08c2dfe690fc55127a16 Mon Sep 17 00:00:00 2001 From: "deepsource-io[bot]" <42547082+deepsource-io[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 02:49:53 +0000 Subject: [PATCH 51/98] ci: Add .deepsource.toml --- .deepsource.toml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .deepsource.toml diff --git a/.deepsource.toml b/.deepsource.toml new file mode 100644 index 000000000..a26941c1c --- /dev/null +++ b/.deepsource.toml @@ -0,0 +1,7 @@ +version = 1 + +[[analyzers]] +name = "javascript" + + [analyzers.meta] + plugins = ["react"] \ No newline at end of file From 964b65477c87c57b6d857b22b85a4d4bacc0e211 Mon Sep 17 00:00:00 2001 From: "deepsource-io[bot]" <42547082+deepsource-io[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 06:02:42 +0000 Subject: [PATCH 52/98] ci: Update .deepsource.toml --- .deepsource.toml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.deepsource.toml b/.deepsource.toml index a26941c1c..3b8658213 100644 --- a/.deepsource.toml +++ b/.deepsource.toml @@ -4,4 +4,7 @@ version = 1 name = "javascript" [analyzers.meta] - plugins = ["react"] \ No newline at end of file + plugins = ["react"] + +[[transformers]] +name = "prettier" \ No newline at end of file From 64e8e85aacb49d93da3d8ad368c6aad0c71e3143 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Mon, 27 Mar 2023 06:10:26 +0000 Subject: [PATCH 53/98] refactor: Replace short hand type conversions with function calls Prefer using explicit casts by calling `Number`, `Boolean`, or `String` over using operators like `+`, `!!` or `"" +`. This is considered best practice as it improves readability. --- src/components/Dashboard/Views/DashboardView.tsx | 2 +- src/hooks/widgets/dashDot/api.ts | 2 +- src/widgets/weather/useWeatherForCity.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Dashboard/Views/DashboardView.tsx b/src/components/Dashboard/Views/DashboardView.tsx index 194098857..202232e45 100644 --- a/src/components/Dashboard/Views/DashboardView.tsx +++ b/src/components/Dashboard/Views/DashboardView.tsx @@ -60,7 +60,7 @@ const usePrepareGridstack = () => { }, [width]); return { - isReady: !!mainAreaWidth, + isReady: Boolean(mainAreaWidth), mainAreaRef, }; }; diff --git a/src/hooks/widgets/dashDot/api.ts b/src/hooks/widgets/dashDot/api.ts index 34a290475..fd9af4209 100644 --- a/src/hooks/widgets/dashDot/api.ts +++ b/src/hooks/widgets/dashDot/api.ts @@ -29,7 +29,7 @@ export const useGetUsenetInfo = (params: UsenetInfoRequestParams) => refetchInterval: POLLING_INTERVAL, keepPreviousData: true, retry: 2, - enabled: !!params.appId, + enabled: Boolean(params.appId), } ); diff --git a/src/widgets/weather/useWeatherForCity.ts b/src/widgets/weather/useWeatherForCity.ts index 3f21ebad6..be7a28ac0 100644 --- a/src/widgets/weather/useWeatherForCity.ts +++ b/src/widgets/weather/useWeatherForCity.ts @@ -20,7 +20,7 @@ export const useWeatherForCity = (cityName: string) => { const weatherQuery = useQuery({ queryKey: ['weather', { cityName }], queryFn: () => fetchWeather(city?.results[0]), - enabled: !!city, + enabled: Boolean(city), cacheTime: 1000 * 60 * 60 * 6, // the weather is cached for 6 hours staleTime: 1000 * 60 * 5, // the weather is considered stale after 5 minutes }); From 497e22830eadb1d6bd2c1c6e6d1af8df8488b3a6 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 07:05:26 +0000 Subject: [PATCH 54/98] style: Format code with prettier Format code with prettier This commit fixes the style issues introduced in e966fda according to the output from prettier. Details: https://deepsource.io/gh/ajnart/homarr/transform/d081bf6a-f351-4ebd-a249-c708aaec7e67/ --- src/pages/_app.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 5d40d1b49..f9616862b 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -149,7 +149,7 @@ App.getInitialProps = ({ ctx }: { ctx: GetServerSidePropsContext }) => { Consola.debug(`Overriding the default color scheme with ${process.env.DEFAULT_COLOR_SCHEME}`); } - const colorScheme: ColorScheme = process.env.DEFAULT_COLOR_SCHEME as ColorScheme ?? 'light'; + const colorScheme: ColorScheme = (process.env.DEFAULT_COLOR_SCHEME as ColorScheme) ?? 'light'; return { colorScheme: getCookie('color-scheme', ctx) || 'light', From 0506cd542c8db51617557686e3d1e1a1bdeaf2aa Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Wed, 29 Mar 2023 10:20:01 +0000 Subject: [PATCH 55/98] style: Format code with prettier --- src/tools/server/getServerSideTranslations.ts | 12 +++--------- vitest.config.ts | 4 +--- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/tools/server/getServerSideTranslations.ts b/src/tools/server/getServerSideTranslations.ts index 88fa1b6e3..5bf9388e8 100644 --- a/src/tools/server/getServerSideTranslations.ts +++ b/src/tools/server/getServerSideTranslations.ts @@ -6,19 +6,13 @@ export const getServerSideTranslations = async ( namespaces: string[], requestLocale?: string, req?: IncomingMessage, - res?: ServerResponse, + res?: ServerResponse ) => { if (!req || !res) { - return serverSideTranslations( - requestLocale ?? 'en', - namespaces - ); + return serverSideTranslations(requestLocale ?? 'en', namespaces); } const configLocale = getCookie('config-locale', { req, res }); - return serverSideTranslations( - (configLocale ?? requestLocale ?? 'en') as string, - namespaces - ); + return serverSideTranslations((configLocale ?? requestLocale ?? 'en') as string, namespaces); }; diff --git a/vitest.config.ts b/vitest.config.ts index df9cb8561..cd0baf83a 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -13,8 +13,6 @@ export default defineConfig({ all: true, exclude: ['.next/', '.yarn/', 'data/'], }, - setupFiles: [ - './tests/setupVitest.ts', - ], + setupFiles: ['./tests/setupVitest.ts'], }, }); From ca47f2d2406429a39edfbc9c2505ec027ea97295 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Wed, 29 Mar 2023 12:42:47 +0200 Subject: [PATCH 56/98] =?UTF-8?q?=F0=9F=92=9A=20Fix=20tests=20and=20build?= =?UTF-8?q?=20system?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/components/AppAvatar.test.tsx | 51 +---- src/components/AppAvatar.tsx | 1 + yarn.lock | 297 +++++++++++++++++++++++++++++- 4 files changed, 298 insertions(+), 52 deletions(-) diff --git a/package.json b/package.json index dbb087388..621a93e7e 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "devDependencies": { "@next/bundle-analyzer": "^12.1.4", "@next/eslint-plugin-next": "^12.1.4", + "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", "@types/dockerode": "^3.3.9", "@types/node": "17.0.1", diff --git a/src/components/AppAvatar.test.tsx b/src/components/AppAvatar.test.tsx index 014043d6f..6fe1947b0 100644 --- a/src/components/AppAvatar.test.tsx +++ b/src/components/AppAvatar.test.tsx @@ -1,52 +1,13 @@ -import { render } from '@testing-library/react'; -import { describe, expect, it } from 'vitest'; +import { render, screen, cleanup } from '@testing-library/react'; +import { describe, expect, it, afterEach } from 'vitest'; import { AppAvatar } from './AppAvatar'; describe('AppAvatar', () => { + afterEach(cleanup); + it('display placeholder when no url', () => { - const { container } = render(); + render(); - expect(container.firstChild).toMatchInlineSnapshot(` -
-
- - - -
-
- `); - }); - - it('display placeholder when valid url', () => { - const { container } = render( - - ); - - expect(container.firstChild).toMatchInlineSnapshot(` -
- -
- `); + expect(screen.getByTestId('app-avatar')).toBeDefined(); }); }); diff --git a/src/components/AppAvatar.tsx b/src/components/AppAvatar.tsx index 08ca5c7b4..e5fcbfa25 100644 --- a/src/components/AppAvatar.tsx +++ b/src/components/AppAvatar.tsx @@ -11,6 +11,7 @@ export const AppAvatar = ({ return ( Date: Wed, 29 Mar 2023 12:55:03 +0200 Subject: [PATCH 57/98] =?UTF-8?q?=F0=9F=9A=A8=20Fix=20build=20warnings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dashboard/Wrappers/gridstack/store.tsx | 1 - src/modules/Docker/DockerTable.tsx | 9 ++++----- src/widgets/calendar/CalendarDay.tsx | 4 ++-- src/widgets/calendar/CalendarTile.tsx | 1 - src/widgets/torrent/TorrentTile.tsx | 1 - src/widgets/useNet/UseNetTile.tsx | 14 ++------------ 6 files changed, 8 insertions(+), 22 deletions(-) diff --git a/src/components/Dashboard/Wrappers/gridstack/store.tsx b/src/components/Dashboard/Wrappers/gridstack/store.tsx index 3cf104d56..b362c0f73 100644 --- a/src/components/Dashboard/Wrappers/gridstack/store.tsx +++ b/src/components/Dashboard/Wrappers/gridstack/store.tsx @@ -1,4 +1,3 @@ -import { useMantineTheme } from '@mantine/core'; import { create } from 'zustand'; import { useConfigContext } from '../../../../config/provider'; import { GridstackBreakpoints } from '../../../../constants/gridstack-breakpoints'; diff --git a/src/modules/Docker/DockerTable.tsx b/src/modules/Docker/DockerTable.tsx index a0fa32f73..9ab7ff49b 100644 --- a/src/modules/Docker/DockerTable.tsx +++ b/src/modules/Docker/DockerTable.tsx @@ -1,13 +1,12 @@ import { - Table, - Checkbox, - Group, Badge, + Checkbox, createStyles, + Group, ScrollArea, - TextInput, - useMantineTheme, + Table, Text, + TextInput, } from '@mantine/core'; import { useElementSize } from '@mantine/hooks'; import { IconSearch } from '@tabler/icons'; diff --git a/src/widgets/calendar/CalendarDay.tsx b/src/widgets/calendar/CalendarDay.tsx index ffee6c9cf..86887e03a 100644 --- a/src/widgets/calendar/CalendarDay.tsx +++ b/src/widgets/calendar/CalendarDay.tsx @@ -1,6 +1,6 @@ -import { Box, Indicator, IndicatorProps, Popover, useMantineTheme } from '@mantine/core'; +import { Box, Indicator, IndicatorProps, Popover } from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; -import { isToday } from '../../tools/isToday'; +import { isToday } from '../../tools/shared/time/date.tool'; import { MediaList } from './MediaList'; import { MediasType } from './type'; diff --git a/src/widgets/calendar/CalendarTile.tsx b/src/widgets/calendar/CalendarTile.tsx index 78ba68008..3c812599b 100644 --- a/src/widgets/calendar/CalendarTile.tsx +++ b/src/widgets/calendar/CalendarTile.tsx @@ -6,7 +6,6 @@ import { i18n } from 'next-i18next'; import { useState } from 'react'; import { useConfigContext } from '../../config/provider'; import { useColorTheme } from '../../tools/color'; -import { isToday } from '../../tools/shared/time/date.tool'; import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; import { CalendarDay } from './CalendarDay'; diff --git a/src/widgets/torrent/TorrentTile.tsx b/src/widgets/torrent/TorrentTile.tsx index 40c4db175..2a6c6f70d 100644 --- a/src/widgets/torrent/TorrentTile.tsx +++ b/src/widgets/torrent/TorrentTile.tsx @@ -9,7 +9,6 @@ import { Table, Text, Title, - useMantineTheme, } from '@mantine/core'; import { useElementSize } from '@mantine/hooks'; import { IconFileDownload } from '@tabler/icons'; diff --git a/src/widgets/useNet/UseNetTile.tsx b/src/widgets/useNet/UseNetTile.tsx index 96ebb915a..97139d899 100644 --- a/src/widgets/useNet/UseNetTile.tsx +++ b/src/widgets/useNet/UseNetTile.tsx @@ -1,14 +1,4 @@ -import { - Badge, - Button, - Group, - Select, - Stack, - Tabs, - Text, - Title, - useMantineTheme, -} from '@mantine/core'; +import { Badge, Button, Group, Select, Stack, Tabs, Text, Title } from '@mantine/core'; import { IconFileDownload, IconPlayerPause, IconPlayerPlay } from '@tabler/icons'; import { useEffect, useState } from 'react'; @@ -17,6 +7,7 @@ import dayjs from 'dayjs'; import duration from 'dayjs/plugin/duration'; import { useTranslation } from 'next-i18next'; import { useConfigContext } from '../../config/provider'; +import { MIN_WIDTH_MOBILE } from '../../constants/constants'; import { useGetUsenetInfo, usePauseUsenetQueue, @@ -28,7 +19,6 @@ import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; import { UsenetHistoryList } from './UsenetHistoryList'; import { UsenetQueueList } from './UsenetQueueList'; -import { MIN_WIDTH_MOBILE } from '../../constants/constants'; dayjs.extend(duration); From 51a1156e68cc14a51ff437ce11d9e43b5f352e8b Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Wed, 29 Mar 2023 13:00:36 +0200 Subject: [PATCH 58/98] =?UTF-8?q?=F0=9F=92=9A=20Remove=20tests=20from=20CI?= =?UTF-8?q?=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 621a93e7e..133f1e81d 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,12 @@ }, "scripts": { "dev": "next dev", - "build": "vitest run && next build", - "analyze": "vitest run && ANALYZE=true next build", + "build": "next build", + "analyze": "ANALYZE=true next build", "turbo": "turbo run build", "start": "next start", "typecheck": "tsc --noEmit", - "export": "vitest run && next build && next export", + "export": "next build && next export", "lint": "next lint", "prettier:check": "prettier --check \"**/*.{ts,tsx}\"", "prettier:write": "prettier --write \"**/*.{ts,tsx}\"", From 4c13e8c2f0de4ce5390f92e61d416fd6c274366e Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Wed, 29 Mar 2023 13:02:33 +0200 Subject: [PATCH 59/98] =?UTF-8?q?=E2=9C=85=20Update=20mock=20plex=20url=20?= =?UTF-8?q?in=20plex=20sdk=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tools/server/sdk/plex/plexClient.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/tools/server/sdk/plex/plexClient.test.ts b/src/tools/server/sdk/plex/plexClient.test.ts index 557767022..e46ecfe40 100644 --- a/src/tools/server/sdk/plex/plexClient.test.ts +++ b/src/tools/server/sdk/plex/plexClient.test.ts @@ -1,5 +1,7 @@ import { describe, expect, it } from 'vitest'; + import 'vitest-fetch-mock'; + import { PlexClient } from './plexClient'; const mockResponse = ` @@ -22,7 +24,7 @@ const mockResponse = ` describe('Plex SDK', () => { it('abc', async () => { // arrange - const client = new PlexClient('https://plex', 'MY_TOKEN'); + const client = new PlexClient('https://plex.local', 'MY_TOKEN'); fetchMock.mockResponseOnce(mockResponse); @@ -31,7 +33,7 @@ describe('Plex SDK', () => { // assert expect(fetchMock.requests().length).toBe(1); - expect(fetchMock.requests()[0].url).toBe('https://plex/status/sessions?X-Plex-Token=MY_TOKEN'); + expect(fetchMock.requests()[0].url).toBe('https://plex.local/status/sessions?X-Plex-Token=MY_TOKEN'); expect(response).not.toBeNull(); expect(response.length).toBe(1); expect(response[0].id).toBe('2894294r2jf2038fj3098jgf3gt'); From e8d82c866efffa03cf58eeb2ecfb3bd52ae522d0 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Wed, 29 Mar 2023 11:02:54 +0000 Subject: [PATCH 60/98] style: Format code with prettier --- src/tools/server/sdk/plex/plexClient.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tools/server/sdk/plex/plexClient.test.ts b/src/tools/server/sdk/plex/plexClient.test.ts index e46ecfe40..48c8af49c 100644 --- a/src/tools/server/sdk/plex/plexClient.test.ts +++ b/src/tools/server/sdk/plex/plexClient.test.ts @@ -33,7 +33,9 @@ describe('Plex SDK', () => { // assert expect(fetchMock.requests().length).toBe(1); - expect(fetchMock.requests()[0].url).toBe('https://plex.local/status/sessions?X-Plex-Token=MY_TOKEN'); + expect(fetchMock.requests()[0].url).toBe( + 'https://plex.local/status/sessions?X-Plex-Token=MY_TOKEN' + ); expect(response).not.toBeNull(); expect(response.length).toBe(1); expect(response[0].id).toBe('2894294r2jf2038fj3098jgf3gt'); From 66f9dd51dd9637e55ee9589e3112799e92f5e308 Mon Sep 17 00:00:00 2001 From: Meier Lukas Date: Thu, 30 Mar 2023 21:46:59 +0200 Subject: [PATCH 61/98] =?UTF-8?q?=E2=9C=A8=20Add=20migration=20for=20multi?= =?UTF-8?q?ple=20widgets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tools/config/getConfig.ts | 28 ++++++++++++++++++++++++++-- src/tools/config/writeConfig.ts | 10 ++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/tools/config/writeConfig.ts diff --git a/src/tools/config/getConfig.ts b/src/tools/config/getConfig.ts index c17ee3881..3d6139a9f 100644 --- a/src/tools/config/getConfig.ts +++ b/src/tools/config/getConfig.ts @@ -1,9 +1,13 @@ import Consola from 'consola'; +import { v4 as uuidv4 } from 'uuid'; import { BackendConfigType, ConfigType } from '../../types/config'; import { backendMigrateConfig } from './backendMigrateConfig'; import { configExists } from './configExists'; import { getFallbackConfig } from './getFallbackConfig'; import { readConfig } from './readConfig'; +import { writeConfig } from './writeConfig'; + +const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/; export const getConfig = (name: string): BackendConfigType => { if (!configExists(name)) return getFallbackConfig() as unknown as ConfigType; @@ -12,9 +16,29 @@ export const getConfig = (name: string): BackendConfigType => { // to the new format. const config = readConfig(name); if (config.schemaVersion === undefined) { - Consola.log('Migrating config file...', config); + Consola.log('Migrating config file...', config.name); return backendMigrateConfig(config, name); } - return config; + let backendConfig = config as BackendConfigType; + + if (backendConfig.widgets.some((widget) => !uuidRegex.test(widget.id))) { + backendConfig = { + ...backendConfig, + widgets: backendConfig.widgets.map((widget) => ({ + ...widget, + id: uuidv4(), + type: widget.id, + })), + }; + + Consola.log( + 'Migrating config file to multiple widgets...', + backendConfig.configProperties.name + ); + + writeConfig(backendConfig); + } + + return backendConfig; }; diff --git a/src/tools/config/writeConfig.ts b/src/tools/config/writeConfig.ts new file mode 100644 index 000000000..5d57d9d03 --- /dev/null +++ b/src/tools/config/writeConfig.ts @@ -0,0 +1,10 @@ +import fs from 'fs'; +import { BackendConfigType } from '../../types/config'; +import { generateConfigPath } from './generateConfigPath'; + +export function writeConfig(config: BackendConfigType) { + const path = generateConfigPath(config.configProperties.name); + return fs.writeFileSync(path, JSON.stringify(config, null, 4), { + encoding: 'utf8', + }); +} From 43dc1cd70c2fcf3d47539f7315290f3e49acb78d Mon Sep 17 00:00:00 2001 From: Meier Lukas Date: Thu, 30 Mar 2023 21:54:44 +0200 Subject: [PATCH 62/98] =?UTF-8?q?=E2=9C=A8=20Change=20rendering=20from=20i?= =?UTF-8?q?d=20to=20type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dashboard/Wrappers/WrapperContent.tsx | 7 ++++--- src/widgets/WidgetWrapper.tsx | 6 +++--- src/widgets/widgets.ts | 3 ++- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/components/Dashboard/Wrappers/WrapperContent.tsx b/src/components/Dashboard/Wrappers/WrapperContent.tsx index 1d1d3ad87..6eff1f62c 100644 --- a/src/components/Dashboard/Wrappers/WrapperContent.tsx +++ b/src/components/Dashboard/Wrappers/WrapperContent.tsx @@ -42,17 +42,18 @@ export function WrapperContent({ apps, refs, widgets }: WrapperContentProps) { ); })} {widgets.map((widget) => { - const definition = Widgets[widget.id as keyof typeof Widgets] as + const definition = Widgets[widget.type as keyof typeof Widgets] as | IWidgetDefinition | undefined; if (!definition) return null; + console.log(definition); return ( diff --git a/src/widgets/WidgetWrapper.tsx b/src/widgets/WidgetWrapper.tsx index 457890537..b8fa03ced 100644 --- a/src/widgets/WidgetWrapper.tsx +++ b/src/widgets/WidgetWrapper.tsx @@ -6,7 +6,7 @@ import ErrorBoundary from './boundary'; import { IWidget } from './widgets'; interface WidgetWrapperProps { - widgetId: string; + widgetType: string; widget: IWidget; className: string; WidgetComponent: ComponentType<{ widget: IWidget }>; @@ -14,7 +14,7 @@ interface WidgetWrapperProps { // If a property has no value, set it to the default value const useWidget = >(widget: T): T => { - const definition = Widgets[widget.id as keyof typeof Widgets]; + const definition = Widgets[widget.type as keyof typeof Widgets]; return useMemo(() => { const newProps = { ...widget.properties }; @@ -33,7 +33,7 @@ const useWidget = >(widget: T): T => { }; export const WidgetWrapper = ({ - widgetId, + widgetType: widgetId, widget, className, WidgetComponent, diff --git a/src/widgets/widgets.ts b/src/widgets/widgets.ts index d6559ed25..998413fea 100644 --- a/src/widgets/widgets.ts +++ b/src/widgets/widgets.ts @@ -13,7 +13,8 @@ import { ShapeType } from '../types/shape'; // Type of widgets which are saved to config export type IWidget = { - id: TKey; + id: string; + type: TKey; properties: { [key in keyof TDefinition['options']]: MakeLessSpecific< TDefinition['options'][key]['defaultValue'] From 525985b1dcbdc94f162b8447e9f4985700b10c1b Mon Sep 17 00:00:00 2001 From: Meier Lukas Date: Thu, 30 Mar 2023 22:20:56 +0200 Subject: [PATCH 63/98] =?UTF-8?q?=E2=9C=A8=20Migrate=20tiles=20from=20id?= =?UTF-8?q?=20to=20type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChangeWidgetPositionModal.tsx | 11 +++++--- .../WidgetsTab/AvailableWidgetsTab.tsx | 10 +++---- .../WidgetsTab/WidgetElementType.tsx | 6 +++-- .../Tiles/Widgets/WidgetsEditModal.tsx | 18 ++++++++----- .../Dashboard/Tiles/Widgets/WidgetsMenu.tsx | 27 +++++-------------- .../Tiles/Widgets/WidgetsRemoveModal.tsx | 8 +++--- src/modules/common/MediaDisplay.tsx | 2 +- src/pages/api/modules/calendar.ts | 2 +- src/pages/api/modules/dashdot/info.ts | 2 +- src/pages/api/modules/dashdot/storage.ts | 2 +- src/pages/api/modules/rss/index.ts | 2 +- src/tools/config/migrateConfig.ts | 21 ++++++++++----- src/widgets/WidgetWrapper.tsx | 4 +-- src/widgets/dashDot/DashDotCompactStorage.tsx | 2 +- 14 files changed, 59 insertions(+), 58 deletions(-) diff --git a/src/components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal.tsx b/src/components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal.tsx index 241503adb..439460cfa 100644 --- a/src/components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal.tsx +++ b/src/components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal.tsx @@ -28,7 +28,7 @@ export const ChangeWidgetPositionModal = ({ updateConfig( configName, (prev) => { - const currentWidget = prev.widgets.find((x) => x.id === innerProps.widgetId); + const currentWidget = prev.widgets.find((x) => x.type === innerProps.widgetType); currentWidget!.shape[shapeSize] = { location: { x, @@ -42,7 +42,10 @@ export const ChangeWidgetPositionModal = ({ return { ...prev, - widgets: [...prev.widgets.filter((x) => x.id !== innerProps.widgetId), currentWidget!], + widgets: [ + ...prev.widgets.filter((x) => x.type !== innerProps.widgetType), + currentWidget!, + ], }; }, true @@ -54,8 +57,8 @@ export const ChangeWidgetPositionModal = ({ closeModal(id); }; - const widthData = useWidthData(innerProps.widgetId); - const heightData = useHeightData(innerProps.widgetId); + const widthData = useWidthData(innerProps.widgetType); + const heightData = useHeightData(innerProps.widgetType); return ( { const { t } = useTranslation('layout/element-selector/selector'); - const activeWidgets = useConfigContext().config?.widgets ?? []; return ( <> @@ -23,11 +21,9 @@ export const AvailableIntegrationElements = ({ - {Object.entries(widgets) - .filter(([widgetId]) => !activeWidgets.some((aw) => aw.id === widgetId)) - .map(([k, v]) => ( - - ))} + {Object.entries(widgets).map(([k, v]) => ( + + ))} ); diff --git a/src/components/Dashboard/Modals/SelectElement/Components/WidgetsTab/WidgetElementType.tsx b/src/components/Dashboard/Modals/SelectElement/Components/WidgetsTab/WidgetElementType.tsx index ce3a2b708..8ff521b09 100644 --- a/src/components/Dashboard/Modals/SelectElement/Components/WidgetsTab/WidgetElementType.tsx +++ b/src/components/Dashboard/Modals/SelectElement/Components/WidgetsTab/WidgetElementType.tsx @@ -2,6 +2,7 @@ import { useModals } from '@mantine/modals'; import { showNotification } from '@mantine/notifications'; import { IconChecks, TablerIcon } from '@tabler/icons'; import { useTranslation } from 'next-i18next'; +import { v4 as uuidv4 } from 'uuid'; import { useConfigContext } from '../../../../../../config/provider'; import { useConfigStore } from '../../../../../../config/store'; import { IWidget, IWidgetDefinition } from '../../../../../../widgets/widgets'; @@ -32,9 +33,10 @@ export const WidgetElementType = ({ id, image, disabled, widget }: WidgetElement (prev) => ({ ...prev, widgets: [ - ...prev.widgets.filter((w) => w.id !== widget.id), + ...prev.widgets, { - id: widget.id, + id: uuidv4(), + type: widget.id, properties: Object.entries(widget.options).reduce((prev, [k, v]) => { const newPrev = prev; newPrev[k] = v.defaultValue; diff --git a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx index f58f30750..f92409919 100644 --- a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx +++ b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx @@ -25,7 +25,7 @@ import { IWidget } from '../../../../widgets/widgets'; import { DraggableList } from './DraggableList'; export type WidgetEditModalInnerProps = { - widgetId: string; + widgetType: string; options: IWidget['properties']; widgetOptions: IWidget['properties']; }; @@ -37,7 +37,8 @@ export const WidgetsEditModal = ({ id, innerProps, }: ContextModalProps) => { - const { t } = useTranslation([`modules/${innerProps.widgetId}`, 'common']); + console.log('?'); + const { t } = useTranslation([`modules/${innerProps.widgetType}`, 'common']); const [moduleProperties, setModuleProperties] = useState(innerProps.options); const items = Object.entries(innerProps.widgetOptions ?? {}) as [ string, @@ -45,7 +46,7 @@ export const WidgetsEditModal = ({ ][]; // Find the Key in the "Widgets" Object that matches the widgetId - const currentWidgetDefinition = Widgets[innerProps.widgetId as keyof typeof Widgets]; + const currentWidgetDefinition = Widgets[innerProps.widgetType as keyof typeof Widgets]; const { name: configName } = useConfigContext(); const updateConfig = useConfigStore((x) => x.updateConfig); @@ -63,12 +64,15 @@ export const WidgetsEditModal = ({ updateConfig( configName, (prev) => { - const currentWidget = prev.widgets.find((x) => x.id === innerProps.widgetId); + const currentWidget = prev.widgets.find((x) => x.type === innerProps.widgetType); currentWidget!.properties = moduleProperties; return { ...prev, - widgets: [...prev.widgets.filter((x) => x.id !== innerProps.widgetId), currentWidget!], + widgets: [ + ...prev.widgets.filter((x) => x.type !== innerProps.widgetType), + currentWidget!, + ], }; }, true @@ -76,6 +80,8 @@ export const WidgetsEditModal = ({ context.closeModal(id); }; + console.log('??'); + return ( {items.map(([key, _], index) => { @@ -100,7 +106,7 @@ export const WidgetsEditModal = ({ ; wrapperColumnCount: number; }; @@ -27,8 +27,8 @@ export const WidgetsMenu = ({ integration, widget }: WidgetsMenuProps) => { // Match widget.id with WidgetsDefinitions // First get the keys const keys = Object.keys(WidgetsDefinitions); - // Then find the key that matches the widget.id - const widgetDefinition = keys.find((key) => key === widget.id); + // Then find the key that matches the widget.type + const widgetDefinition = keys.find((key) => key === widget.type); // Then get the widget definition const widgetDefinitionObject = WidgetsDefinitions[widgetDefinition as keyof typeof WidgetsDefinitions]; @@ -38,7 +38,7 @@ export const WidgetsMenu = ({ integration, widget }: WidgetsMenuProps) => { modal: 'integrationRemove', title: {t('common:remove')}, innerProps: { - widgetId: integration, + widgetType: integration, }, styles: { inner: { @@ -55,37 +55,24 @@ export const WidgetsMenu = ({ integration, widget }: WidgetsMenuProps) => { size: 'xl', title: null, innerProps: { - widgetId: integration, + widgetType: integration, widget, wrapperColumnCount, }, - styles: { - inner: { - position: 'sticky', - top: 30, - }, - }, }); }; const handleEditClick = () => { openContextModalGeneric({ modal: 'integrationOptions', - title: {t('descriptor.settings.title')}, + title: t('descriptor.settings.title'), innerProps: { - widgetId: integration, + widgetType: integration, options: widget.properties, // Cast as the right type for the correct widget widgetOptions: widgetDefinitionObject.options as any, }, zIndex: 5, - styles: { - inner: { - position: 'sticky', - top: 30, - maxHeight: '100%', - }, - }, }); }; diff --git a/src/components/Dashboard/Tiles/Widgets/WidgetsRemoveModal.tsx b/src/components/Dashboard/Tiles/Widgets/WidgetsRemoveModal.tsx index f92e34380..336bb1034 100644 --- a/src/components/Dashboard/Tiles/Widgets/WidgetsRemoveModal.tsx +++ b/src/components/Dashboard/Tiles/Widgets/WidgetsRemoveModal.tsx @@ -6,7 +6,7 @@ import { useConfigContext } from '../../../../config/provider'; import { useConfigStore } from '../../../../config/store'; export type WidgetsRemoveModalInnerProps = { - widgetId: string; + widgetType: string; }; export const WidgetsRemoveModal = ({ @@ -14,7 +14,7 @@ export const WidgetsRemoveModal = ({ id, innerProps, }: ContextModalProps) => { - const { t } = useTranslation([`modules/${innerProps.widgetId}`, 'common']); + const { t } = useTranslation([`modules/${innerProps.widgetType}`, 'common']); const { name: configName } = useConfigContext(); if (!configName) return null; const updateConfig = useConfigStore((x) => x.updateConfig); @@ -23,7 +23,7 @@ export const WidgetsRemoveModal = ({ configName, (prev) => ({ ...prev, - widgets: prev.widgets.filter((w) => w.id !== innerProps.widgetId), + widgets: prev.widgets.filter((w) => w.type !== innerProps.widgetType), }), true ); @@ -35,7 +35,7 @@ export const WidgetsRemoveModal = ({ ]} - values={{ item: innerProps.widgetId }} + values={{ item: innerProps.widgetType }} /> ), diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index fb25026d0..b1eab57cd 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -1,5 +1,3 @@ -import { defineWidget } from '../helper'; -import { IWidget } from '../widgets'; import { ActionIcon, Badge, @@ -31,6 +29,8 @@ import dayjs from 'dayjs'; import { useTranslation } from 'next-i18next'; import Link from 'next/link'; import { useState } from 'react'; +import { IWidget } from '../widgets'; +import { defineWidget } from '../helper'; const definition = defineWidget({ id: 'rss', From f1e39ba91159af20c753396381bd66f6ff65b98e Mon Sep 17 00:00:00 2001 From: ajnart Date: Mon, 3 Apr 2023 15:57:11 +0900 Subject: [PATCH 71/98] =?UTF-8?q?=F0=9F=92=A1=20Address=20PR=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tools/config/getFrontendConfig.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/tools/config/getFrontendConfig.ts b/src/tools/config/getFrontendConfig.ts index c208e81e7..1a910c065 100644 --- a/src/tools/config/getFrontendConfig.ts +++ b/src/tools/config/getFrontendConfig.ts @@ -7,18 +7,16 @@ export const getFrontendConfig = (name: string): ConfigType => { const config = getConfig(name); Consola.info(`Requested frontend content of configuration '${name}'`); - // Find out if config as apps with integrations that have a property with no value or undefined - // If so, remove print an error using consola // If not, return the config - const appsWithIntegrationsWithUndefinedProperties = config.apps.filter( + const someAppsWithoutProps = config.apps.filter( (app) => app.integration?.properties.some( (property) => property.value === null || property.value === undefined ) ?? false ); - if (appsWithIntegrationsWithUndefinedProperties.length > 0) { + if (someAppsWithoutProps.length > 0) { Consola.warn( - `The following apps have integrations with errored properties: [${appsWithIntegrationsWithUndefinedProperties + `There are apps that have missing configuration options: [${someAppsWithoutProps .map((app) => app.name) .join(', ')}] please input the correct secrets once again for the concerned app(s), save them, exit edit mode and reload the page.` ); From 217e5b861f2f8265437f223bc4efc74aaf0b0872 Mon Sep 17 00:00:00 2001 From: "deepsource-autofix[bot]" <62050782+deepsource-autofix[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 06:57:28 +0000 Subject: [PATCH 72/98] style: Format code with prettier --- src/tools/config/getFrontendConfig.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tools/config/getFrontendConfig.ts b/src/tools/config/getFrontendConfig.ts index 1a910c065..376522d4c 100644 --- a/src/tools/config/getFrontendConfig.ts +++ b/src/tools/config/getFrontendConfig.ts @@ -18,7 +18,9 @@ export const getFrontendConfig = (name: string): ConfigType => { Consola.warn( `There are apps that have missing configuration options: [${someAppsWithoutProps .map((app) => app.name) - .join(', ')}] please input the correct secrets once again for the concerned app(s), save them, exit edit mode and reload the page.` + .join( + ', ' + )}] please input the correct secrets once again for the concerned app(s), save them, exit edit mode and reload the page.` ); } From 681138899121a97925a4552f5c647527ddde11de Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 5 Apr 2023 14:16:28 +0900 Subject: [PATCH 73/98] =?UTF-8?q?=E2=9C=A8=20Add=20support=20for=20multipl?= =?UTF-8?q?e=20RSS=20feeds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tiles/Widgets/WidgetsEditModal.tsx | 19 ++ src/widgets/rss/RssWidgetTile.tsx | 226 +++++++----------- src/widgets/widgets.ts | 13 +- 3 files changed, 123 insertions(+), 135 deletions(-) diff --git a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx index e89d32176..643a8b64b 100644 --- a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx +++ b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx @@ -243,6 +243,25 @@ const WidgetOptionTypeSwitch: FC<{ ); + case 'multiple-text': + return ( + ({ value: v, label: v }))} + label={t(`descriptor.settings.${key}.label`)} + description={t(`descriptor.settings.${key}.description`)} + defaultValue={value as string[]} + withinPortal + searchable + creatable + getCreateLabel={(query) => `+ Add ${query}`} + onChange={(values) => + handleChange( + key, + values.map((item: string) => item) + ) + } + /> + ); /* eslint-enable no-case-declarations */ default: return null; diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index b1eab57cd..d2b8907ff 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -1,9 +1,9 @@ +import Link from 'next/link'; import { ActionIcon, Badge, Card, Center, - createStyles, Flex, Group, Image, @@ -14,31 +14,27 @@ import { Stack, Text, Title, + createStyles, } from '@mantine/core'; import { - IconBulldozer, - IconCalendarTime, IconClock, - IconCopyright, IconRefresh, IconRss, - IconSpeakerphone, } from '@tabler/icons'; import { useQuery } from '@tanstack/react-query'; import dayjs from 'dayjs'; import { useTranslation } from 'next-i18next'; -import Link from 'next/link'; -import { useState } from 'react'; -import { IWidget } from '../widgets'; + import { defineWidget } from '../helper'; +import { IWidget } from '../widgets'; const definition = defineWidget({ id: 'rss', icon: IconRss, options: { rssFeedUrl: { - type: 'text', - defaultValue: '', + type: 'multiple-text', + defaultValue: ['https://japantimes.co.jp/feed'], }, }, gridstack: { @@ -56,34 +52,42 @@ interface RssTileProps { widget: IRssWidget; } -export const useGetRssFeed = (feedUrl: string, widgetId: string) => +export const useGetRssFeeds = (feedUrls: string[], widgetId: string) => useQuery({ - queryKey: ['rss-feed', feedUrl], + queryKey: ['rss-feeds', feedUrls], queryFn: async () => { - const response = await fetch(`/api/modules/rss?widgetId=${widgetId}`); - return response.json(); + const responses = await Promise.all( + feedUrls.map((feedUrl) => + fetch( + `/api/modules/rss?widgetId=${widgetId}&feedUrl=${encodeURIComponent(feedUrl)}` + ).then((response) => response.json()) + ) + ); + return responses; }, }); function RssTile({ widget }: RssTileProps) { const { t } = useTranslation('modules/rss'); - const { data, isLoading, isFetching, isError, refetch } = useGetRssFeed( + const { data, isLoading, isFetching, isError, refetch } = useGetRssFeeds( widget.properties.rssFeedUrl, widget.id ); const { classes } = useStyles(); - const [loadingOverlayVisible, setLoadingOverlayVisible] = useState(false); function formatDate(input: string): string { // Parse the input date as a local date - const inputDate = dayjs(new Date(input)); - const now = dayjs(); // Current date and time - - // The difference between the input date and now - const difference = now.diff(inputDate, 'ms'); - const duration = dayjs.duration(difference, 'ms'); - const humanizedDuration = duration.humanize(); - return `${humanizedDuration} ago`; + try { + const inputDate = dayjs(new Date(input)); + const now = dayjs(); // Current date and time + // The difference between the input date and now + const difference = now.diff(inputDate, 'ms'); + const duration = dayjs.duration(difference, 'ms'); + const humanizedDuration = duration.humanize(); + return `${humanizedDuration} ago`; + } catch (e) { + return 'Error'; + } } if (!data || isLoading) { @@ -94,7 +98,7 @@ function RssTile({ widget }: RssTileProps) { ); } - if (!data.success || isError) { + if (data.length < 1 || isError) { return (
@@ -109,122 +113,78 @@ function RssTile({ widget }: RssTileProps) { return ( - {data.feed.title && {data.feed.title}} - - - {data.feed.items.map((item: any, index: number) => ( - - {item.enclosure && ( - // eslint-disable-next-line @next/next/no-img-element - backdrop - )} - - + + {data.map((item, index) => ( + + {item.feed.items.map((item: any, index: number) => ( + {item.enclosure && ( - - - + // eslint-disable-next-line @next/next/no-img-element + backdrop )} - - {item.categories && ( - - {item.categories.map((category: any, categoryIndex: number) => ( - {category} - ))} - + + + {item.enclosure && ( + + + )} + + {item.categories && ( + + {item.categories.map((category: any, categoryIndex: number) => ( + {category} + ))} + + )} - {item.title} - - {item.content} - + {item.title} + + {item.content} + - {item.pubDate && } + {item.pubDate && } + - - - ))} - + + ))} + + ))} - - {data.feed.copyright && ( - - - - {data.feed.copyright} - - - )} - {data.feed.pubDate && ( - - - - {data.feed.pubDate} - - - )} - {data.feed.lastBuildDate && ( - - - - {formatDate(data.feed.lastBuildDate)} - - - )} - {data.feed.feedUrl && ( - - - - Feed URL - - - )} - refetch()} - bottom={10} - styles={{ - root: { - borderColor: 'red', - }, - }} - > - {data.feed.image ? ( - - ) : ( - - )} - - + refetch()} + bottom={10} + styles={{ + root: { + borderColor: 'red', + }, + }} + > + + ); } diff --git a/src/widgets/widgets.ts b/src/widgets/widgets.ts index 998413fea..a5b6b9729 100644 --- a/src/widgets/widgets.ts +++ b/src/widgets/widgets.ts @@ -1,3 +1,4 @@ +import React from 'react'; import { MultiSelectProps, NumberInputProps, @@ -7,7 +8,7 @@ import { TextInputProps, } from '@mantine/core'; import { TablerIcon } from '@tabler/icons'; -import React from 'react'; + import { AreaType } from '../types/area'; import { ShapeType } from '../types/shape'; @@ -37,7 +38,8 @@ export type IWidgetOptionValue = | ISliderInputOptionValue | ISelectOptionValue | INumberInputOptionValue - | IDraggableListInputValue; + | IDraggableListInputValue + | IMultipleTextInputOptionValue; // Interface for data type interface DataType { @@ -105,6 +107,13 @@ export type IDraggableListInputValue = { >; }; +// will show a text-input with a button to add a new line +export type IMultipleTextInputOptionValue = { + type: 'multiple-text'; + defaultValue: string[]; + inputProps?: Partial; +}; + // is used to type the widget definitions which will be used to display all widgets export type IWidgetDefinition = { id: TKey; From 54aa5f7f4da0f13cccb8c41554a6118a59afcfe8 Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 5 Apr 2023 14:18:54 +0900 Subject: [PATCH 74/98] Update RSS widget locale --- public/locales/en/modules/rss.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/locales/en/modules/rss.json b/public/locales/en/modules/rss.json index df52af4af..47d6e405d 100644 --- a/public/locales/en/modules/rss.json +++ b/public/locales/en/modules/rss.json @@ -5,7 +5,8 @@ "settings": { "title": "Settings for RSS widget", "rssFeedUrl": { - "label": "RSS feed url" + "label": "RSS feeds urls", + "description": "The urls of the RSS feeds you want to display from." } } }, From 405219c081860ae2019f07b0a53e2ea9f7878912 Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 5 Apr 2023 14:23:52 +0900 Subject: [PATCH 75/98] Change default value, fix API --- src/pages/api/modules/rss/index.ts | 18 +++++++----------- src/widgets/rss/RssWidgetTile.tsx | 2 +- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/pages/api/modules/rss/index.ts b/src/pages/api/modules/rss/index.ts index 7ea57572b..211e5bc37 100644 --- a/src/pages/api/modules/rss/index.ts +++ b/src/pages/api/modules/rss/index.ts @@ -1,17 +1,13 @@ -import Consola from 'consola'; - -import { getCookie } from 'cookies-next'; - -import { decode } from 'html-entities'; - import { NextApiRequest, NextApiResponse } from 'next'; - +import Consola from 'consola'; +import { getCookie } from 'cookies-next'; +import { decode } from 'html-entities'; import Parser from 'rss-parser'; - import { z } from 'zod'; + import { getConfig } from '../../../../tools/config/getConfig'; -import { IRssWidget } from '../../../../widgets/rss/RssWidgetTile'; import { Stopwatch } from '../../../../tools/shared/time/stopwatch.tool'; +import { IRssWidget } from '../../../../widgets/rss/RssWidgetTile'; type CustomItem = { 'media:content': string; @@ -28,6 +24,7 @@ const parser: Parser = new Parser({ const getQuerySchema = z.object({ widgetId: z.string().uuid(), + feedUrl: z.string(), }); export const Get = async (request: NextApiRequest, response: NextApiResponse) => { @@ -44,7 +41,6 @@ export const Get = async (request: NextApiRequest, response: NextApiResponse) => const rssWidget = config.widgets.find( (x) => x.type === 'rss' && x.id === parseResult.data.widgetId ) as IRssWidget | undefined; - if ( !rssWidget || !rssWidget.properties.rssFeedUrl || @@ -56,7 +52,7 @@ export const Get = async (request: NextApiRequest, response: NextApiResponse) => Consola.info('Requesting RSS feed...'); const stopWatch = new Stopwatch(); - const feed = await parser.parseURL(rssWidget.properties.rssFeedUrl); + const feed = await parser.parseURL(parseResult.data.feedUrl); Consola.info(`Retrieved RSS feed after ${stopWatch.getEllapsedMilliseconds()} milliseconds`); const orderedFeed = { diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index d2b8907ff..57a60773c 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -34,7 +34,7 @@ const definition = defineWidget({ options: { rssFeedUrl: { type: 'multiple-text', - defaultValue: ['https://japantimes.co.jp/feed'], + defaultValue: [], }, }, gridstack: { From 0c99b77843b4f55285bff6c4f90be010e9de291c Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 5 Apr 2023 14:25:32 +0900 Subject: [PATCH 76/98] Update default rss feed value with homarr releases --- src/widgets/rss/RssWidgetTile.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index 57a60773c..c8103056f 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -16,11 +16,7 @@ import { Title, createStyles, } from '@mantine/core'; -import { - IconClock, - IconRefresh, - IconRss, -} from '@tabler/icons'; +import { IconClock, IconRefresh, IconRss } from '@tabler/icons'; import { useQuery } from '@tanstack/react-query'; import dayjs from 'dayjs'; import { useTranslation } from 'next-i18next'; @@ -34,7 +30,7 @@ const definition = defineWidget({ options: { rssFeedUrl: { type: 'multiple-text', - defaultValue: [], + defaultValue: ['https://github.com/ajnart/homarr/tags.atom'], }, }, gridstack: { From 1930a4c1f683c7905f753a186c5a54f7b5df6991 Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 5 Apr 2023 14:38:38 +0900 Subject: [PATCH 77/98] Add title display if availalbe --- src/widgets/rss/RssWidgetTile.tsx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index c8103056f..5f1ee2c57 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -110,9 +110,9 @@ function RssTile({ widget }: RssTileProps) { - {data.map((item, index) => ( + {data.map((feed, index) => ( - {item.feed.items.map((item: any, index: number) => ( + {feed.feed.items.map((item: any, index: number) => ( - {item.pubDate && } + {item.pubDate && ( + + )} @@ -185,12 +187,17 @@ function RssTile({ widget }: RssTileProps) { ); } -const TimeDisplay = ({ date }: { date: string }) => ( +const InfoDisplay = ({ date, title }: { date: string; title: string | undefined }) => ( {date} + {title && ( + + {title} + + )} ); From 1a7ae434b71d656dc89fbbd6c8c64b6959390869 Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 5 Apr 2023 14:42:22 +0900 Subject: [PATCH 78/98] Raise cache time for ReactQuery --- src/widgets/rss/RssWidgetTile.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index 5f1ee2c57..fa2ed14ff 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -51,6 +51,8 @@ interface RssTileProps { export const useGetRssFeeds = (feedUrls: string[], widgetId: string) => useQuery({ queryKey: ['rss-feeds', feedUrls], + // Cache the results for 24 hours + cacheTime: 1000 * 60 * 60 * 24, queryFn: async () => { const responses = await Promise.all( feedUrls.map((feedUrl) => From 9d51e2ce52211feeb687ee15efb7b15145a48f52 Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 5 Apr 2023 14:46:03 +0900 Subject: [PATCH 79/98] Change the loading overloay to the refresh button --- src/widgets/rss/RssWidgetTile.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index fa2ed14ff..8290c3306 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -110,7 +110,6 @@ function RssTile({ widget }: RssTileProps) { return ( - {data.map((feed, index) => ( @@ -183,7 +182,7 @@ function RssTile({ widget }: RssTileProps) { }, }} > - + {isFetching ? : } ); From 31a80f5588869f61730964ed33e5673f102c3d0a Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 5 Apr 2023 14:53:18 +0900 Subject: [PATCH 80/98] Add option to manually edit the refresh interval --- public/locales/en/modules/rss.json | 17 ++++++++++------- .../Tiles/Widgets/WidgetsEditModal.tsx | 1 + src/widgets/rss/RssWidgetTile.tsx | 11 ++++++++++- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/public/locales/en/modules/rss.json b/public/locales/en/modules/rss.json index 47d6e405d..56a751750 100644 --- a/public/locales/en/modules/rss.json +++ b/public/locales/en/modules/rss.json @@ -7,14 +7,17 @@ "rssFeedUrl": { "label": "RSS feeds urls", "description": "The urls of the RSS feeds you want to display from." + }, + "refreshInterval": { + "label": "Refresh interval (in seconds)" } - } - }, - "card": { - "errors": { - "general": { - "title": "Unable to retrieve RSS feed", - "text": "There was a problem reaching out the RSS feed. Make sure that you have correctly configured the RSS feed using a valid URL. URLs should match the official specification. After updating the feed, you may need to refresh the dashboard." + }, + "card": { + "errors": { + "general": { + "title": "Unable to retrieve RSS feed", + "text": "There was a problem reaching out the RSS feed. Make sure that you have correctly configured the RSS feed using a valid URL. URLs should match the official specification. After updating the feed, you may need to refresh the dashboard." + } } } } diff --git a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx index 643a8b64b..805b7f805 100644 --- a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx +++ b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx @@ -184,6 +184,7 @@ const WidgetOptionTypeSwitch: FC<{ case 'slider': return ( + {t(`descriptor.settings.${key}.label`)} +export const useGetRssFeeds = (feedUrls: string[], refreshInterval: number, widgetId: string) => useQuery({ queryKey: ['rss-feeds', feedUrls], // Cache the results for 24 hours cacheTime: 1000 * 60 * 60 * 24, + staleTime: 1000 * refreshInterval, queryFn: async () => { const responses = await Promise.all( feedUrls.map((feedUrl) => @@ -69,6 +77,7 @@ function RssTile({ widget }: RssTileProps) { const { t } = useTranslation('modules/rss'); const { data, isLoading, isFetching, isError, refetch } = useGetRssFeeds( widget.properties.rssFeedUrl, + widget.properties.refreshInterval, widget.id ); const { classes } = useStyles(); From 18c84e7e1e97afaeeeb7ee6f88dd7a971c43e4b5 Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 5 Apr 2023 15:25:20 +0900 Subject: [PATCH 81/98] =?UTF-8?q?=F0=9F=94=A5=20Remove=20unused=20dependen?= =?UTF-8?q?cies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widgets/rss/RssWidgetTile.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index 50be54627..d9dd597a9 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -8,7 +8,6 @@ import { Group, Image, Loader, - LoadingOverlay, MediaQuery, ScrollArea, Stack, From 42ce62119757d3139af03faa7c4436396970c074 Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 5 Apr 2023 15:23:37 +0900 Subject: [PATCH 82/98] =?UTF-8?q?=E2=9C=A8=20Add=20localstorage=20caching?= =?UTF-8?q?=20with=20React=20Query?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 ++ .../Dashboard/Views/DashboardView.tsx | 41 +++++------ src/pages/_app.tsx | 15 +++- yarn.lock | 69 +++++++++++++++++++ 4 files changed, 101 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index 58ee7ec5a..f1d0f5961 100644 --- a/package.json +++ b/package.json @@ -41,9 +41,13 @@ "@mantine/notifications": "^6.0.0", "@nivo/core": "^0.80.0", "@nivo/line": "^0.80.0", + "@react-native-async-storage/async-storage": "^1.18.1", "@tabler/icons": "^1.106.0", + "@tanstack/query-async-storage-persister": "^4.27.1", + "@tanstack/query-sync-storage-persister": "^4.27.1", "@tanstack/react-query": "^4.2.1", "@tanstack/react-query-devtools": "^4.24.4", + "@tanstack/react-query-persist-client": "^4.28.0", "@vitejs/plugin-react": "^3.1.0", "axios": "^0.27.2", "consola": "^2.15.3", diff --git a/src/components/Dashboard/Views/DashboardView.tsx b/src/components/Dashboard/Views/DashboardView.tsx index 202232e45..b16c86385 100644 --- a/src/components/Dashboard/Views/DashboardView.tsx +++ b/src/components/Dashboard/Views/DashboardView.tsx @@ -17,33 +17,24 @@ export const DashboardView = () => { return ( - {sidebarsVisible.isLoading ? ( -
- -
- ) : ( - <> - {sidebarsVisible.left ? ( - - ) : null} + {sidebarsVisible.left ? ( + + ) : null} - - {!isReady - ? null - : wrappers.map((item) => - item.type === 'category' ? ( - - ) : ( - - ) - )} - + + {isReady && + wrappers.map((item) => + item.type === 'category' ? ( + + ) : ( + + ) + )} + - {sidebarsVisible.right ? ( - - ) : null} - - )} + {sidebarsVisible.right ? ( + + ) : null}
); }; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index e3b96fb7a..36862b5ea 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -2,7 +2,6 @@ import { ColorScheme, ColorSchemeProvider, MantineProvider, MantineTheme } from import { useColorScheme, useHotkeys, useLocalStorage } from '@mantine/hooks'; import { ModalsProvider } from '@mantine/modals'; import Consola from 'consola'; -import { QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { getCookie } from 'cookies-next'; import { GetServerSidePropsContext } from 'next'; @@ -12,6 +11,9 @@ import Head from 'next/head'; import { useEffect, useState } from 'react'; import { Notifications } from '@mantine/notifications'; import 'video.js/dist/video-js.css'; +import AsyncStorage from '@react-native-async-storage/async-storage'; +import { PersistQueryClientProvider } from '@tanstack/react-query-persist-client'; +import { createAsyncStoragePersister } from '@tanstack/query-async-storage-persister'; import { ChangeAppPositionModal } from '../components/Dashboard/Modals/ChangePosition/ChangeAppPositionModal'; import { ChangeWidgetPositionModal } from '../components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal'; import { EditAppModal } from '../components/Dashboard/Modals/EditAppModal/EditAppModal'; @@ -77,6 +79,10 @@ function App( const toggleColorScheme = (value?: ColorScheme) => setColorScheme(value || (colorScheme === 'dark' ? 'light' : 'dark')); + const asyncStoragePersister = createAsyncStoragePersister({ + storage: AsyncStorage, + }); + useHotkeys([['mod+J', () => toggleColorScheme()]]); return ( @@ -84,7 +90,10 @@ function App( - + - + ); } diff --git a/yarn.lock b/yarn.lock index 53d9a46ef..41070bd38 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1503,6 +1503,17 @@ __metadata: languageName: node linkType: hard +"@react-native-async-storage/async-storage@npm:^1.18.1": + version: 1.18.1 + resolution: "@react-native-async-storage/async-storage@npm:1.18.1" + dependencies: + merge-options: ^3.0.4 + peerDependencies: + react-native: ^0.0.0-0 || 0.60 - 0.72 || 1000.0.0 + checksum: 58c8497fafdd4d112c4a70b0976783abdc6fa487f0cffca196901efd146fc838dee0cf498fdc4ef67a4634ba4ca97d60fec5a24720aea1d46f1999b0ba8b249b + languageName: node + linkType: hard + "@react-spring/animated@npm:~9.4.5": version: 9.4.5 resolution: "@react-spring/animated@npm:9.4.5" @@ -1642,6 +1653,15 @@ __metadata: languageName: node linkType: hard +"@tanstack/query-async-storage-persister@npm:^4.27.1": + version: 4.27.1 + resolution: "@tanstack/query-async-storage-persister@npm:4.27.1" + dependencies: + "@tanstack/query-persist-client-core": 4.27.0 + checksum: f98da672c6a61c65a58dc3d1b6e4416800bbd61747f806cc8cfceecb9f8bf4fa6be4133036f0b2efd5177e6f93031bb84e2ee53d888e9d6c34cc11f8aede97f4 + languageName: node + linkType: hard + "@tanstack/query-core@npm:4.27.0": version: 4.27.0 resolution: "@tanstack/query-core@npm:4.27.0" @@ -1649,6 +1669,24 @@ __metadata: languageName: node linkType: hard +"@tanstack/query-persist-client-core@npm:4.27.0": + version: 4.27.0 + resolution: "@tanstack/query-persist-client-core@npm:4.27.0" + dependencies: + "@tanstack/query-core": 4.27.0 + checksum: 9a2df41744269d666bc0c1a5684a1d9d327e7994b57f9c1a71ea86d169dbde94f9d4af4b4ebe258d0085e0aa2cd563460b06513eccc4b016c0c5d416122d0275 + languageName: node + linkType: hard + +"@tanstack/query-sync-storage-persister@npm:^4.27.1": + version: 4.27.1 + resolution: "@tanstack/query-sync-storage-persister@npm:4.27.1" + dependencies: + "@tanstack/query-persist-client-core": 4.27.0 + checksum: 16cdef50af43cf854ec1244f43609c04f9a9fcb7bbb36c763ce3146aeb85095c62da098fb4c4876d76496fa5830d54c6e79691d2b353919b1e5f274a3c34a97e + languageName: node + linkType: hard + "@tanstack/react-query-devtools@npm:^4.24.4": version: 4.28.0 resolution: "@tanstack/react-query-devtools@npm:4.28.0" @@ -1664,6 +1702,17 @@ __metadata: languageName: node linkType: hard +"@tanstack/react-query-persist-client@npm:^4.28.0": + version: 4.28.0 + resolution: "@tanstack/react-query-persist-client@npm:4.28.0" + dependencies: + "@tanstack/query-persist-client-core": 4.27.0 + peerDependencies: + "@tanstack/react-query": 4.28.0 + checksum: 8177b41ae644774f380154ec09588cce21b6bf75f45d58691cc86fd58002927989f47e278170a1ae9c3c02638a7e26d67a29106c768d325a54cef9219115839d + languageName: node + linkType: hard + "@tanstack/react-query@npm:^4.2.1": version: 4.28.0 resolution: "@tanstack/react-query@npm:4.28.0" @@ -4857,9 +4906,13 @@ __metadata: "@next/eslint-plugin-next": ^12.1.4 "@nivo/core": ^0.80.0 "@nivo/line": ^0.80.0 + "@react-native-async-storage/async-storage": ^1.18.1 "@tabler/icons": ^1.106.0 + "@tanstack/query-async-storage-persister": ^4.27.1 + "@tanstack/query-sync-storage-persister": ^4.27.1 "@tanstack/react-query": ^4.2.1 "@tanstack/react-query-devtools": ^4.24.4 + "@tanstack/react-query-persist-client": ^4.28.0 "@testing-library/jest-dom": ^5.16.5 "@testing-library/react": ^14.0.0 "@types/dockerode": ^3.3.9 @@ -5354,6 +5407,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^2.1.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa + languageName: node + linkType: hard + "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -5875,6 +5935,15 @@ __metadata: languageName: node linkType: hard +"merge-options@npm:^3.0.4": + version: 3.0.4 + resolution: "merge-options@npm:3.0.4" + dependencies: + is-plain-obj: ^2.1.0 + checksum: d86ddb3dd6e85d558dbf25dc944f3527b6bacb944db3fdda6e84a3f59c4e4b85231095f58b835758b9a57708342dee0f8de0dffa352974a48221487fe9f4584f + languageName: node + linkType: hard + "merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" From c1463b3aa68754fa54ff944e9f108200c52c42cd Mon Sep 17 00:00:00 2001 From: Manuel Date: Tue, 4 Apr 2023 22:32:08 +0200 Subject: [PATCH 83/98] =?UTF-8?q?=E2=9C=A8=20Add=20overseerr=20widget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../en/modules/media-requests-list.json | 9 ++ .../en/modules/media-requests-stats.json | 9 ++ src/pages/api/modules/media-requests/index.ts | 151 ++++++++++++++++++ src/tools/server/translation-namespaces.ts | 2 + src/widgets/index.ts | 4 + src/widgets/loading.tsx | 7 + .../media-requests/MediaRequestListTile.tsx | 123 ++++++++++++++ .../media-requests/MediaRequestStatsTile.tsx | 73 +++++++++ .../media-requests/media-request-query.tsx | 10 ++ .../media-requests/media-request-types.tsx | 22 +++ 10 files changed, 410 insertions(+) create mode 100644 public/locales/en/modules/media-requests-list.json create mode 100644 public/locales/en/modules/media-requests-stats.json create mode 100644 src/pages/api/modules/media-requests/index.ts create mode 100644 src/widgets/loading.tsx create mode 100644 src/widgets/media-requests/MediaRequestListTile.tsx create mode 100644 src/widgets/media-requests/MediaRequestStatsTile.tsx create mode 100644 src/widgets/media-requests/media-request-query.tsx create mode 100644 src/widgets/media-requests/media-request-types.tsx diff --git a/public/locales/en/modules/media-requests-list.json b/public/locales/en/modules/media-requests-list.json new file mode 100644 index 000000000..948d28730 --- /dev/null +++ b/public/locales/en/modules/media-requests-list.json @@ -0,0 +1,9 @@ +{ + "descriptor": { + "name": "Media Requests", + "description": "See a list of all media requests from your Overseerr and Jellyseerr", + "settings": { + "title": "Media requests list" + } + } +} diff --git a/public/locales/en/modules/media-requests-stats.json b/public/locales/en/modules/media-requests-stats.json new file mode 100644 index 000000000..4fbadfeb2 --- /dev/null +++ b/public/locales/en/modules/media-requests-stats.json @@ -0,0 +1,9 @@ +{ + "descriptor": { + "name": "Media request stats", + "description": "Statistics about your media requests", + "settings": { + "title": "Media requests stats" + } + } +} diff --git a/src/pages/api/modules/media-requests/index.ts b/src/pages/api/modules/media-requests/index.ts new file mode 100644 index 000000000..c5d3a33d9 --- /dev/null +++ b/src/pages/api/modules/media-requests/index.ts @@ -0,0 +1,151 @@ +import { getCookie } from 'cookies-next'; +import Consola from 'consola'; +import { NextApiRequest, NextApiResponse } from 'next'; +import { getConfig } from '../../../../tools/config/getConfig'; + +import { MediaRequest } from '../../../../widgets/media-requests/media-request-types'; + +const Get = async (request: NextApiRequest, response: NextApiResponse) => { + const configName = getCookie('config-name', { req: request }); + const config = getConfig(configName?.toString() ?? 'default'); + + const apps = config.apps.filter((app) => + ['overseerr', 'jellyseerr'].includes(app.integration?.type ?? '') + ); + + const promises = apps.map((app): Promise => { + const apiKey = app.integration?.properties.find((prop) => prop.field === 'apiKey')?.value ?? ''; + const headers: HeadersInit = { 'X-Api-Key': apiKey }; + return fetch(`${app.url}/api/v1/request?take=25&skip=0&sort=added`, { + headers, + }) + .then(async (response) => { + const body = (await response.json()) as OverseerrResponse; + + const requests = await Promise.all( + body.results.map(async (item): Promise => { + const genericItem = await retrieveDetailsForItem( + app.url, + item.type, + headers, + item.media.tmdbId + ); + return { + appId: app.id, + createdAt: item.createdAt, + id: item.id, + rootFolder: item.rootFolder, + type: item.type, + name: genericItem.name, + userName: item.requestedBy.displayName, + userLink: `${app.url}/users/${item.requestedBy.id}`, + userProfilePicture: `${app.url}${item.requestedBy.avatar}`, + airDate: genericItem.airDate, + status: item.status, + backdropPath: `https://image.tmdb.org/t/p/original/${genericItem.backdropPath}`, + posterPath: `https://image.tmdb.org/t/p/w600_and_h900_bestv2/${genericItem.posterPath}`, + href: `${app.url}/movie/${item.media.tmdbId}`, + }; + }) + ); + + return Promise.resolve(requests); + }) + .catch((err) => { + Consola.error(`Failed to request data from Overseerr: ${err}`); + return Promise.resolve([]); + }); + }); + + const mediaRequests = (await Promise.all(promises)).reduce((prev, cur) => prev.concat(cur)); + + return response.status(200).json(mediaRequests); +}; + +const retrieveDetailsForItem = async ( + baseUrl: string, + type: OverseerrResponseItem['type'], + headers: HeadersInit, + id: number +): Promise => { + if (type === 'tv') { + const tvResponse = await fetch(`${baseUrl}/api/v1/tv/${id}`, { + headers, + }); + + const series = (await tvResponse.json()) as OverseerrSeries; + + return { + name: series.name, + airDate: series.firstAirDate, + backdropPath: series.backdropPath, + posterPath: series.backdropPath, + }; + } + + const movieResponse = await fetch(`${baseUrl}/api/v1/movie/${id}`, { + headers, + }); + + const movie = (await movieResponse.json()) as OverseerrMovie; + + return { + name: movie.originalTitle, + airDate: movie.releaseDate, + backdropPath: movie.backdropPath, + posterPath: movie.posterPath, + }; +}; + +type GenericOverseerrItem = { + name: string; + airDate: string; + backdropPath: string; + posterPath: string; +}; + +type OverseerrMovie = { + originalTitle: string; + releaseDate: string; + backdropPath: string; + posterPath: string; +}; + +type OverseerrSeries = { + name: string; + firstAirDate: string; + backdropPath: string; + posterPath: string; +}; + +type OverseerrResponse = { + results: OverseerrResponseItem[]; +}; + +type OverseerrResponseItem = { + id: number; + status: number; + createdAt: string; + type: 'movie' | 'tv'; + rootFolder: string; + requestedBy: OverseerrResponseItemUser; + media: OverseerrResponseItemMedia; +}; + +type OverseerrResponseItemMedia = { + tmdbId: number; +}; + +type OverseerrResponseItemUser = { + id: number; + displayName: string; + avatar: string; +}; + +export default async (request: NextApiRequest, response: NextApiResponse) => { + if (request.method === 'GET') { + return Get(request, response); + } + + return response.status(405); +}; diff --git a/src/tools/server/translation-namespaces.ts b/src/tools/server/translation-namespaces.ts index 90aedada9..8a2d3ad13 100644 --- a/src/tools/server/translation-namespaces.ts +++ b/src/tools/server/translation-namespaces.ts @@ -36,6 +36,8 @@ export const dashboardNamespaces = [ 'modules/media-server', 'modules/common-media-cards', 'modules/video-stream', + 'modules/media-requests-list', + 'modules/media-requests-stats', 'widgets/error-boundary', ]; diff --git a/src/widgets/index.ts b/src/widgets/index.ts index 820795f24..4250bfd07 100644 --- a/src/widgets/index.ts +++ b/src/widgets/index.ts @@ -9,6 +9,8 @@ import torrent from './torrent/TorrentTile'; import usenet from './useNet/UseNetTile'; import videoStream from './video/VideoStreamTile'; import weather from './weather/WeatherTile'; +import mediaRequestsList from './media-requests/MediaRequestListTile'; +import mediaRequestsStats from './media-requests/MediaRequestStatsTile'; export default { calendar, @@ -22,4 +24,6 @@ export default { 'video-stream': videoStream, iframe, 'media-server': mediaServer, + 'media-requests-list': mediaRequestsList, + 'media-requests-stats': mediaRequestsStats, }; diff --git a/src/widgets/loading.tsx b/src/widgets/loading.tsx new file mode 100644 index 000000000..61386165e --- /dev/null +++ b/src/widgets/loading.tsx @@ -0,0 +1,7 @@ +import { Center, Loader } from '@mantine/core'; + +export const WidgetLoading = () => ( +
+ +
+ ); diff --git a/src/widgets/media-requests/MediaRequestListTile.tsx b/src/widgets/media-requests/MediaRequestListTile.tsx new file mode 100644 index 000000000..de2ad4f52 --- /dev/null +++ b/src/widgets/media-requests/MediaRequestListTile.tsx @@ -0,0 +1,123 @@ +import { Badge, Card, Center, Flex, Group, Image, Stack, Text } from '@mantine/core'; +import { IconGitPullRequest } from '@tabler/icons'; +import { defineWidget } from '../helper'; +import { WidgetLoading } from '../loading'; +import { IWidget } from '../widgets'; +import { useMediaRequestQuery } from './media-request-query'; +import { MediaRequestStatus } from './media-request-types'; + +const definition = defineWidget({ + id: 'media-requests-list', + icon: IconGitPullRequest, + options: {}, + component: MediaRequestListTile, + gridstack: { + minWidth: 3, + minHeight: 2, + maxWidth: 12, + maxHeight: 12, + }, +}); + +export type MediaRequestListWidget = IWidget<(typeof definition)['id'], typeof definition>; + +interface MediaRequestListWidgetProps { + widget: MediaRequestListWidget; +} + +function MediaRequestListTile({ widget }: MediaRequestListWidgetProps) { + const { data, isFetching } = useMediaRequestQuery(); + + if (!data || isFetching) { + return ; + } + + if (data.length === 0) { + return ( +
+ There are no requests. Ensure that you've configured your apps correctly. +
+ ); + } + + const countPendingApproval = data.filter( + (x) => x.status === MediaRequestStatus.PendingApproval + ).length; + + return ( + + {countPendingApproval > 0 ? ( + There are {countPendingApproval} requests waiting for an approval. + ) : ( + There are currently no pending approvals. You're good to go! + )} + {data.map((item) => ( + + + + + + + {item.airDate.split('-')[0]} + + + + {item.name} + + + + + + + {item.userName} + + + + + + + ))} + + ); +} + +const MediaRequestStatusBadge = ({ status }: { status: MediaRequestStatus }) => { + switch (status) { + case MediaRequestStatus.Approved: + return Approved; + case MediaRequestStatus.Declined: + return Declined; + case MediaRequestStatus.PendingApproval: + return Pending approval; + default: + return <>; + } +}; + +export default definition; diff --git a/src/widgets/media-requests/MediaRequestStatsTile.tsx b/src/widgets/media-requests/MediaRequestStatsTile.tsx new file mode 100644 index 000000000..2b82f9bf0 --- /dev/null +++ b/src/widgets/media-requests/MediaRequestStatsTile.tsx @@ -0,0 +1,73 @@ +import { Card, Center, Flex, Stack, Text } from '@mantine/core'; +import { IconChartBar } from '@tabler/icons'; +import { defineWidget } from '../helper'; +import { WidgetLoading } from '../loading'; +import { IWidget } from '../widgets'; +import { useMediaRequestQuery } from './media-request-query'; +import { MediaRequestStatus } from './media-request-types'; + +const definition = defineWidget({ + id: 'media-requests-stats', + icon: IconChartBar, + options: {}, + component: MediaRequestStatsTile, + gridstack: { + minWidth: 1, + minHeight: 2, + maxWidth: 12, + maxHeight: 12, + }, +}); + +export type MediaRequestStatsWidget = IWidget<(typeof definition)['id'], typeof definition>; + +interface MediaRequestStatsWidgetProps { + widget: MediaRequestStatsWidget; +} + +function MediaRequestStatsTile({ widget }: MediaRequestStatsWidgetProps) { + const { data, isFetching } = useMediaRequestQuery(); + + if (!data || isFetching) { + return ; + } + + return ( + + +
+ + + {data.filter((x) => x.status === MediaRequestStatus.PendingApproval).length} + + + Pending approvals + + +
+
+ +
+ + {data.filter((x) => x.type === 'tv').length} + + TV requests + + +
+
+ +
+ + {data.filter((x) => x.type === 'movie').length} + + Movie requests + + +
+
+
+ ); +} + +export default definition; diff --git a/src/widgets/media-requests/media-request-query.tsx b/src/widgets/media-requests/media-request-query.tsx new file mode 100644 index 000000000..03a5874d1 --- /dev/null +++ b/src/widgets/media-requests/media-request-query.tsx @@ -0,0 +1,10 @@ +import { useQuery } from '@tanstack/react-query'; +import { MediaRequest } from './media-request-types'; + +export const useMediaRequestQuery = () => useQuery({ + queryKey: ['media-requests'], + queryFn: async () => { + const response = await fetch('/api/modules/media-requests'); + return (await response.json()) as MediaRequest[]; + }, +}); diff --git a/src/widgets/media-requests/media-request-types.tsx b/src/widgets/media-requests/media-request-types.tsx new file mode 100644 index 000000000..7ad40007a --- /dev/null +++ b/src/widgets/media-requests/media-request-types.tsx @@ -0,0 +1,22 @@ +export type MediaRequest = { + appId: string; + id: number; + createdAt: string; + rootFolder: string; + type: 'movie' | 'tv'; + name: string; + userName: string; + userProfilePicture: string; + userLink: string; + airDate: string; + status: MediaRequestStatus; + backdropPath: string; + posterPath: string; + href: string; +}; + +export enum MediaRequestStatus { + PendingApproval = 1, + Approved = 2, + Declined = 3 +} From 984292482a67b901484f0cd61bf20afe22dd1c54 Mon Sep 17 00:00:00 2001 From: Manuel Date: Thu, 6 Apr 2023 22:53:44 +0200 Subject: [PATCH 84/98] =?UTF-8?q?=F0=9F=9A=91=20Fix=20sidebar=20ribbons=20?= =?UTF-8?q?breakpoint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useScreenLargerThan.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/hooks/useScreenLargerThan.ts b/src/hooks/useScreenLargerThan.ts index 2b1b3abd3..b499917c5 100644 --- a/src/hooks/useScreenLargerThan.ts +++ b/src/hooks/useScreenLargerThan.ts @@ -1,9 +1,8 @@ import { MantineSize, useMantineTheme } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; -import { MIN_WIDTH_MOBILE } from '../constants/constants'; export const useScreenLargerThan = (size: MantineSize | number) => { const { breakpoints } = useMantineTheme(); const pixelCount = typeof size === 'string' ? breakpoints[size] : size; - return useMediaQuery(`(min-width: ${MIN_WIDTH_MOBILE})`); + return useMediaQuery(`(min-width: ${pixelCount})`); }; From 6b3fe8951a9169df80e81fb74a0c0a7941fae972 Mon Sep 17 00:00:00 2001 From: Manuel Date: Fri, 7 Apr 2023 20:06:27 +0200 Subject: [PATCH 85/98] =?UTF-8?q?=F0=9F=9A=A8=20Fix=20warnings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dashboard/Views/DashboardView.tsx | 4 ++-- src/pages/api/modules/media-requests/index.ts | 13 +++++++++---- src/widgets/media-requests/MediaRequestListTile.tsx | 9 ++++++++- .../media-requests/MediaRequestStatsTile.tsx | 2 +- src/widgets/media-requests/media-request-query.tsx | 1 + 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/components/Dashboard/Views/DashboardView.tsx b/src/components/Dashboard/Views/DashboardView.tsx index b16c86385..c87c17050 100644 --- a/src/components/Dashboard/Views/DashboardView.tsx +++ b/src/components/Dashboard/Views/DashboardView.tsx @@ -1,4 +1,4 @@ -import { Center, Group, Loader, Stack } from '@mantine/core'; +import { Group, Stack } from '@mantine/core'; import { useEffect, useMemo, useRef } from 'react'; import { useConfigContext } from '../../../config/provider'; import { useResize } from '../../../hooks/use-resize'; @@ -6,9 +6,9 @@ import { useScreenLargerThan } from '../../../hooks/useScreenLargerThan'; import { CategoryType } from '../../../types/category'; import { WrapperType } from '../../../types/wrapper'; import { DashboardCategory } from '../Wrappers/Category/Category'; -import { useGridstackStore } from '../Wrappers/gridstack/store'; import { DashboardSidebar } from '../Wrappers/Sidebar/Sidebar'; import { DashboardWrapper } from '../Wrappers/Wrapper/Wrapper'; +import { useGridstackStore } from '../Wrappers/gridstack/store'; export const DashboardView = () => { const wrappers = useWrapperItems(); diff --git a/src/pages/api/modules/media-requests/index.ts b/src/pages/api/modules/media-requests/index.ts index fc141d6a7..0edf6e342 100644 --- a/src/pages/api/modules/media-requests/index.ts +++ b/src/pages/api/modules/media-requests/index.ts @@ -14,6 +14,8 @@ const Get = async (request: NextApiRequest, response: NextApiResponse) => { ['overseerr', 'jellyseerr'].includes(app.integration?.type ?? '') ); + Consola.log(`Retrieving media requests from ${apps.length} apps`); + const promises = apps.map((app): Promise => { const apiKey = app.integration?.properties.find((prop) => prop.field === 'apiKey')?.value ?? ''; const headers: HeadersInit = { 'X-Api-Key': apiKey }; @@ -39,8 +41,8 @@ const Get = async (request: NextApiRequest, response: NextApiResponse) => { type: item.type, name: genericItem.name, userName: item.requestedBy.displayName, - userLink: constructAvatarUrl(app, item), - userProfilePicture: `${app.url}${item.requestedBy.avatar}`, + userProfilePicture: constructAvatarUrl(app, item), + userLink: `${app.url}/users/${item.requestedBy.id}`, airDate: genericItem.airDate, status: item.status, backdropPath: `https://image.tmdb.org/t/p/original/${genericItem.backdropPath}`, @@ -64,11 +66,14 @@ const Get = async (request: NextApiRequest, response: NextApiResponse) => { }; const constructAvatarUrl = (app: ConfigAppType, item: OverseerrResponseItem) => { - if (item.requestedBy.avatar.startsWith('http://') || item.requestedBy.avatar.startsWith('https://')) { + const isAbsolute = + item.requestedBy.avatar.startsWith('http://') || item.requestedBy.avatar.startsWith('https://'); + + if (isAbsolute) { return item.requestedBy.avatar; } - return `${app.url}/users/${item.requestedBy.id}`; + return `${app.url}/${item.requestedBy.avatar}`; }; const retrieveDetailsForItem = async ( diff --git a/src/widgets/media-requests/MediaRequestListTile.tsx b/src/widgets/media-requests/MediaRequestListTile.tsx index 6c8a7278d..4cbdd47be 100644 --- a/src/widgets/media-requests/MediaRequestListTile.tsx +++ b/src/widgets/media-requests/MediaRequestListTile.tsx @@ -82,7 +82,14 @@ function MediaRequestListTile({ widget }: MediaRequestListWidgetProps) {
- + useQuery({ const response = await fetch('/api/modules/media-requests'); return (await response.json()) as MediaRequest[]; }, + refetchInterval: 3 * 60 * 1000, }); From afbb0e6944ba0bb21537b82c68a0e329a5580221 Mon Sep 17 00:00:00 2001 From: ajnart Date: Mon, 10 Apr 2023 23:05:06 +0900 Subject: [PATCH 86/98] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20version=20to?= =?UTF-8?q?=20v0.12.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f1d0f5961..ed2cf82e0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homarr", - "version": "0.11.5", + "version": "0.12.0", "description": "Homarr - A homepage for your server.", "license": "MIT", "repository": { From 3850bc2dbe0b65f4ebbb2820686e29bc40d5c04e Mon Sep 17 00:00:00 2001 From: Thomas Camlong <49837342+ajnart@users.noreply.github.com> Date: Mon, 10 Apr 2023 23:13:01 +0900 Subject: [PATCH 87/98] Apply suggestions from code review --- public/locales/en/modules/media-requests-list.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/locales/en/modules/media-requests-list.json b/public/locales/en/modules/media-requests-list.json index 4e578586b..bf56d4e06 100644 --- a/public/locales/en/modules/media-requests-list.json +++ b/public/locales/en/modules/media-requests-list.json @@ -1,12 +1,12 @@ { "descriptor": { "name": "Media Requests", - "description": "See a list of all media requests from your Overseerr and Jellyseerr", + "description": "See a list of all media requests from your Overseerr or Jellyseerr instance", "settings": { "title": "Media requests list" } }, - "noRequests": "There are no requests. Ensure that you've configured your apps correctly.", + "noRequests": "No requests found. Please ensure that you've configured your apps correctly.", "pending": "There are {countPendingApproval} requests waiting for an approval.", "nonePending": "There are currently no pending approvals. You're good to go!", "state": { From b45a614cd80cbc10f3b2fa016221430d5f8043ba Mon Sep 17 00:00:00 2001 From: ajnart Date: Mon, 10 Apr 2023 23:29:00 +0900 Subject: [PATCH 88/98] =?UTF-8?q?=F0=9F=92=A1=20Address=20PR=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/locales/en/common.json | 1 + public/locales/en/modules/rss.json | 2 +- .../Dashboard/Tiles/Widgets/WidgetsEditModal.tsx | 4 ++-- src/pages/api/modules/rss/index.ts | 2 +- src/widgets/rss/RssWidgetTile.tsx | 9 ++++----- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 4f2e4f0ff..c62f22acf 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -10,6 +10,7 @@ "changePosition": "Change position", "remove": "Remove", "removeConfirm": "Are you sure that you want to remove {{item}}?", + "createItem": "+ create {{item}}", "sections": { "settings": "Settings", "dangerZone": "Danger zone" diff --git a/public/locales/en/modules/rss.json b/public/locales/en/modules/rss.json index 56a751750..3c50414d2 100644 --- a/public/locales/en/modules/rss.json +++ b/public/locales/en/modules/rss.json @@ -9,7 +9,7 @@ "description": "The urls of the RSS feeds you want to display from." }, "refreshInterval": { - "label": "Refresh interval (in seconds)" + "label": "Refresh interval (in minutes)" } }, "card": { diff --git a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx index 805b7f805..03c2d6b34 100644 --- a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx +++ b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx @@ -247,14 +247,14 @@ const WidgetOptionTypeSwitch: FC<{ case 'multiple-text': return ( ({ value: v, label: v }))} + data={value.map((name: any) => ({ value: name, label: name }))} label={t(`descriptor.settings.${key}.label`)} description={t(`descriptor.settings.${key}.description`)} defaultValue={value as string[]} withinPortal searchable creatable - getCreateLabel={(query) => `+ Add ${query}`} + getCreateLabel={(query) => t('common:createItem', query)} onChange={(values) => handleChange( key, diff --git a/src/pages/api/modules/rss/index.ts b/src/pages/api/modules/rss/index.ts index 211e5bc37..9c4284356 100644 --- a/src/pages/api/modules/rss/index.ts +++ b/src/pages/api/modules/rss/index.ts @@ -50,7 +50,7 @@ export const Get = async (request: NextApiRequest, response: NextApiResponse) => return; } - Consola.info('Requesting RSS feed...'); + Consola.info(`Requesting RSS feed at url ${parseResult.data.feedUrl}`); const stopWatch = new Stopwatch(); const feed = await parser.parseURL(parseResult.data.feedUrl); Consola.info(`Retrieved RSS feed after ${stopWatch.getEllapsedMilliseconds()} milliseconds`); diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index d9dd597a9..132c07b81 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -33,10 +33,10 @@ const definition = defineWidget({ }, refreshInterval: { type: 'slider', - defaultValue: 60, - min: 30, + defaultValue: 30, + min: 15, max: 300, - step: 30, + step: 15, }, }, gridstack: { @@ -59,7 +59,7 @@ export const useGetRssFeeds = (feedUrls: string[], refreshInterval: number, widg queryKey: ['rss-feeds', feedUrls], // Cache the results for 24 hours cacheTime: 1000 * 60 * 60 * 24, - staleTime: 1000 * refreshInterval, + staleTime: 1000 * 60 * refreshInterval, queryFn: async () => { const responses = await Promise.all( feedUrls.map((feedUrl) => @@ -86,7 +86,6 @@ function RssTile({ widget }: RssTileProps) { try { const inputDate = dayjs(new Date(input)); const now = dayjs(); // Current date and time - // The difference between the input date and now const difference = now.diff(inputDate, 'ms'); const duration = dayjs.duration(difference, 'ms'); const humanizedDuration = duration.humanize(); From e8179d01af3a5a751e4e561f2639d0a084f97e0e Mon Sep 17 00:00:00 2001 From: Manuel Date: Tue, 11 Apr 2023 17:38:10 +0200 Subject: [PATCH 89/98] =?UTF-8?q?=E2=9C=85=20Add=20tests=20for=20media=20r?= =?UTF-8?q?equest=20widget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + .../api/modules/media-requests/index.spec.ts | 292 ++++++++++++++++++ src/pages/api/modules/media-requests/index.ts | 2 +- yarn.lock | 124 +++++++- 4 files changed, 409 insertions(+), 10 deletions(-) create mode 100644 src/pages/api/modules/media-requests/index.spec.ts diff --git a/package.json b/package.json index ed2cf82e0..d84a5b0fe 100644 --- a/package.json +++ b/package.json @@ -101,6 +101,7 @@ "eslint-plugin-unused-imports": "^2.0.0", "eslint-plugin-vitest": "^0.0.54", "happy-dom": "^8.9.0", + "node-mocks-http": "^1.12.2", "prettier": "^2.7.1", "sass": "^1.56.1", "turbo": "^1.8.3", diff --git a/src/pages/api/modules/media-requests/index.spec.ts b/src/pages/api/modules/media-requests/index.spec.ts new file mode 100644 index 000000000..69a6460a1 --- /dev/null +++ b/src/pages/api/modules/media-requests/index.spec.ts @@ -0,0 +1,292 @@ +import Consola from 'consola'; +import { createMocks } from 'node-mocks-http'; +import { describe, expect, it, vi } from 'vitest'; +import 'vitest-fetch-mock'; +import { ConfigType } from '../../../../types/config'; +import MediaRequestsRoute from './index'; + +const mockedGetConfig = vi.fn(); + +describe('media-requests api', () => { + it('reduce when empty list of requests', async () => { + // Arrange + const { req, res } = createMocks(); + + vi.mock('./../../../../tools/config/getConfig.ts', () => ({ + get getConfig() { + return mockedGetConfig; + }, + })); + mockedGetConfig.mockReturnValue({ + apps: [], + }); + + // Act + await MediaRequestsRoute(req, res); + + // Assert + expect(res._getStatusCode()).toBe(200); + expect(res.finished).toBe(true); + expect(JSON.parse(res._getData())).toEqual([]); + }); + + it('log error when fetch was not successful', async () => { + // Arrange + const { req, res } = createMocks(); + + vi.mock('./../../../../tools/config/getConfig.ts', () => ({ + get getConfig() { + return mockedGetConfig; + }, + })); + mockedGetConfig.mockReturnValue({ + apps: [ + { + integration: { + type: 'overseerr', + properties: [ + { + field: 'apiKey', + type: 'private', + value: 'abc', + }, + ], + }, + }, + ], + } as ConfigType); + const logSpy = vi.spyOn(Consola, 'error'); + + // Act + await MediaRequestsRoute(req, res); + + // Assert + expect(res._getStatusCode()).toBe(200); + expect(res.finished).toBe(true); + expect(JSON.parse(res._getData())).toEqual([]); + + expect(logSpy).toHaveBeenCalledOnce(); + expect(logSpy.mock.lastCall).toEqual([ + 'Failed to request data from Overseerr: FetchError: invalid json response body at reason: Unexpected end of JSON input', + ]); + + logSpy.mockRestore(); + }); + + it('fetch and return requests in response', async () => { + // Arrange + const { req, res } = createMocks({ + method: 'GET', + }); + + vi.mock('./../../../../tools/config/getConfig.ts', () => ({ + get getConfig() { + return mockedGetConfig; + }, + })); + mockedGetConfig.mockReturnValue({ + apps: [ + { + url: 'http://my-overseerr.local', + integration: { + type: 'overseerr', + properties: [ + { + field: 'apiKey', + type: 'private', + value: 'abc', + }, + ], + }, + }, + ], + } as ConfigType); + const logSpy = vi.spyOn(Consola, 'error'); + + fetchMock.mockResponse((request) => { + if (request.url === 'http://my-overseerr.local/api/v1/request?take=25&skip=0&sort=added') { + return JSON.stringify({ + pageInfo: { pages: 3, pageSize: 20, results: 42, page: 1 }, + results: [ + { + id: 44, + status: 2, + createdAt: '2023-04-06T19:38:45.000Z', + updatedAt: '2023-04-06T19:38:45.000Z', + type: 'movie', + is4k: false, + serverId: 0, + profileId: 4, + tags: [], + isAutoRequest: false, + media: { + downloadStatus: [], + downloadStatus4k: [], + id: 999, + mediaType: 'movie', + tmdbId: 99999999, + tvdbId: null, + imdbId: null, + status: 5, + status4k: 1, + createdAt: '2023-02-06T19:38:45.000Z', + updatedAt: '2023-02-06T20:00:04.000Z', + lastSeasonChange: '2023-08-06T19:38:45.000Z', + mediaAddedAt: '2023-05-14T06:30:34.000Z', + serviceId: 0, + serviceId4k: null, + externalServiceId: 32, + externalServiceId4k: null, + externalServiceSlug: '000000000000', + externalServiceSlug4k: null, + ratingKey: null, + ratingKey4k: null, + jellyfinMediaId: '0000', + jellyfinMediaId4k: null, + mediaUrl: + 'http://your-jellyfin.local/web/index.html#!/details?id=mn8q2j4gq038g&context=home&serverId=jf83fj34gm340g', + serviceUrl: 'http://your-jellyfin.local/movie/0000', + }, + seasons: [], + modifiedBy: { + permissions: 2, + warnings: [], + id: 1, + email: 'example-user@homarr.dev', + plexUsername: null, + jellyfinUsername: 'example-user', + username: null, + recoveryLinkExpirationDate: null, + userType: 3, + plexId: null, + jellyfinUserId: '00000000000000000', + jellyfinDeviceId: '111111111111111111', + jellyfinAuthToken: '2222222222222222222', + plexToken: null, + avatar: '/os_logo_square.png', + movieQuotaLimit: null, + movieQuotaDays: null, + tvQuotaLimit: null, + tvQuotaDays: null, + createdAt: '2022-07-03T19:53:08.000Z', + updatedAt: '2022-07-03T19:53:08.000Z', + requestCount: 34, + displayName: 'Example User', + }, + requestedBy: { + permissions: 2, + warnings: [], + id: 1, + email: 'example-user@homarr.dev', + plexUsername: null, + jellyfinUsername: 'example-user', + username: null, + recoveryLinkExpirationDate: null, + userType: 3, + plexId: null, + jellyfinUserId: '00000000000000000', + jellyfinDeviceId: '111111111111111111', + jellyfinAuthToken: '2222222222222222222', + plexToken: null, + avatar: '/os_logo_square.png', + movieQuotaLimit: null, + movieQuotaDays: null, + tvQuotaLimit: null, + tvQuotaDays: null, + createdAt: '2022-07-03T19:53:08.000Z', + updatedAt: '2022-07-03T19:53:08.000Z', + requestCount: 34, + displayName: 'Example User', + }, + seasonCount: 0, + }, + ], + }); + } + + if (request.url === 'http://my-overseerr.local/api/v1/movie/99999999') { + return JSON.stringify({ + id: 0, + adult: false, + budget: 0, + genres: [ + { + id: 18, + name: 'Dashboards', + }, + ], + relatedVideos: [], + originalLanguage: 'jp', + originalTitle: 'Homarrrr Movie', + popularity: 9.352, + productionCompanies: [], + productionCountries: [], + releaseDate: '2023-12-08', + releases: { + results: [], + }, + revenue: 0, + spokenLanguages: [ + { + english_name: 'Japanese', + iso_639_1: 'jp', + name: '日本語', + }, + ], + status: 'Released', + title: 'Homarr Movie', + video: false, + voteAverage: 9.999, + voteCount: 0, + backdropPath: '/mhjq8jr0qgrjnghnh.jpg', + homepage: '', + imdbId: 'tt0000000', + overview: 'A very cool movie', + posterPath: '/hf4j0928gq543njgh8935nqh8.jpg', + runtime: 97, + tagline: '', + credits: {}, + collection: null, + externalIds: { + facebookId: null, + imdbId: null, + instagramId: null, + twitterId: null, + }, + watchProviders: [], + keywords: [], + }); + } + + return Promise.reject(new Error(`Bad url: ${request.url}`)); + }); + + // Act + await MediaRequestsRoute(req, res); + + // Assert + expect(res._getStatusCode()).toBe(200); + expect(res.finished).toBe(true); + expect(JSON.parse(res._getData())).toEqual([ + { + airDate: '2023-12-08', + backdropPath: 'https://image.tmdb.org/t/p/original//mhjq8jr0qgrjnghnh.jpg', + createdAt: '2023-04-06T19:38:45.000Z', + href: 'http://my-overseerr.local/movie/99999999', + id: 44, + name: 'Homarrrr Movie', + posterPath: + 'https://image.tmdb.org/t/p/w600_and_h900_bestv2//hf4j0928gq543njgh8935nqh8.jpg', + status: 2, + type: 'movie', + userLink: 'http://my-overseerr.local/users/1', + userName: 'Example User', + userProfilePicture: 'http://my-overseerr.local//os_logo_square.png', + }, + ]); + + expect(logSpy).not.toHaveBeenCalled(); + + logSpy.mockRestore(); + }); +}); diff --git a/src/pages/api/modules/media-requests/index.ts b/src/pages/api/modules/media-requests/index.ts index 0edf6e342..bbe9f0ef2 100644 --- a/src/pages/api/modules/media-requests/index.ts +++ b/src/pages/api/modules/media-requests/index.ts @@ -60,7 +60,7 @@ const Get = async (request: NextApiRequest, response: NextApiResponse) => { }); }); - const mediaRequests = (await Promise.all(promises)).reduce((prev, cur) => prev.concat(cur)); + const mediaRequests = (await Promise.all(promises)).reduce((prev, cur) => prev.concat(cur), []); return response.status(200).json(mediaRequests); }; diff --git a/yarn.lock b/yarn.lock index 41070bd38..d0ee2773a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2325,6 +2325,16 @@ __metadata: languageName: node linkType: hard +"accepts@npm:^1.3.7": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: ~2.1.34 + negotiator: 0.6.3 + checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -3116,6 +3126,15 @@ __metadata: languageName: node linkType: hard +"content-disposition@npm:^0.5.3": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: 5.2.1 + checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 + languageName: node + linkType: hard + "convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" @@ -3471,6 +3490,13 @@ __metadata: languageName: node linkType: hard +"depd@npm:^1.1.0": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 + languageName: node + linkType: hard + "depd@npm:^2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -4454,6 +4480,13 @@ __metadata: languageName: node linkType: hard +"fresh@npm:^0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 + languageName: node + linkType: hard + "fs-constants@npm:^1.0.0": version: 1.0.0 resolution: "fs-constants@npm:1.0.0" @@ -4950,6 +4983,7 @@ __metadata: js-file-download: ^0.4.12 next: ^13.2.1 next-i18next: ^11.3.0 + node-mocks-http: ^1.12.2 nzbget-api: ^0.0.3 prettier: ^2.7.1 prismjs: ^1.29.0 @@ -5935,6 +5969,20 @@ __metadata: languageName: node linkType: hard +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 + languageName: node + linkType: hard + +"merge-descriptors@npm:^1.0.1": + version: 1.0.1 + resolution: "merge-descriptors@npm:1.0.1" + checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 + languageName: node + linkType: hard + "merge-options@npm:^3.0.4": version: 3.0.4 resolution: "merge-options@npm:3.0.4" @@ -5951,6 +5999,13 @@ __metadata: languageName: node linkType: hard +"methods@npm:^1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a + languageName: node + linkType: hard + "micromatch@npm:^4.0.4": version: 4.0.5 resolution: "micromatch@npm:4.0.5" @@ -5968,7 +6023,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12": +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -5977,6 +6032,15 @@ __metadata: languageName: node linkType: hard +"mime@npm:^1.3.4": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 + languageName: node + linkType: hard + "mimic-response@npm:^1.0.0": version: 1.0.1 resolution: "mimic-response@npm:1.0.1" @@ -6233,7 +6297,7 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:^0.6.3": +"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 @@ -6391,6 +6455,24 @@ __metadata: languageName: node linkType: hard +"node-mocks-http@npm:^1.12.2": + version: 1.12.2 + resolution: "node-mocks-http@npm:1.12.2" + dependencies: + accepts: ^1.3.7 + content-disposition: ^0.5.3 + depd: ^1.1.0 + fresh: ^0.5.2 + merge-descriptors: ^1.0.1 + methods: ^1.1.2 + mime: ^1.3.4 + parseurl: ^1.3.3 + range-parser: ^1.2.0 + type-is: ^1.6.18 + checksum: 39e50b7146bd37fd56a0588ee3df46fd310f76395d52e9b8889545910aca6cc8e8a41de3cdd3e103903d4bbfc556e67624fcbe934c0bd3b0cca6ee1358a0f440 + languageName: node + linkType: hard + "node-releases@npm:^2.0.8": version: 2.0.10 resolution: "node-releases@npm:2.0.10" @@ -6649,6 +6731,13 @@ __metadata: languageName: node linkType: hard +"parseurl@npm:^1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -6895,6 +6984,13 @@ __metadata: languageName: node linkType: hard +"range-parser@npm:^1.2.0": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 + languageName: node + linkType: hard + "react-dom@npm:^18.2.0": version: 18.2.0 resolution: "react-dom@npm:18.2.0" @@ -7336,6 +7432,13 @@ __metadata: languageName: node linkType: hard +"safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + "safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" @@ -7343,13 +7446,6 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 - languageName: node - linkType: hard - "safe-json-parse@npm:4.0.0": version: 4.0.0 resolution: "safe-json-parse@npm:4.0.0" @@ -8137,6 +8233,16 @@ __metadata: languageName: node linkType: hard +"type-is@npm:^1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: 0.3.0 + mime-types: ~2.1.24 + checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 + languageName: node + linkType: hard + "typed-array-length@npm:^1.0.4": version: 1.0.4 resolution: "typed-array-length@npm:1.0.4" From 76479503ad24713d2e2bf339656fb128e092c5c3 Mon Sep 17 00:00:00 2001 From: walkxcode Date: Mon, 10 Apr 2023 23:05:01 +0200 Subject: [PATCH 90/98] =?UTF-8?q?=F0=9F=93=9D=20Fix=20images=20in=20Docume?= =?UTF-8?q?ntation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 67 +++++++++++++++++++++++-------------------------------- 1 file changed, 28 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index cb902754f..e0310f032 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,21 @@ - +![Banner](docs/banner.png)

- Latest Release (Semver)Latest Release (Semver) - CI StatusCI Status -

@@ -38,43 +36,38 @@

- Simplify the management of your server with Homarr - a sleek, modern dashboard that puts all of your apps and services at your fingertips. With Homarr, you can access and control everything in one convenient location. Homarr seamlessly integrates with the apps you've added, providing you with valuable information and giving you complete control. Installation is a breeze, and Homarr supports a wide range of deployment methods.

- - - +![Features Section](docs/section-features.png) -- 🖌️ Highly customizeable with extensive drag and drop grid system +- 🖌️ Highly customizable with an extensive drag and drop grid system - ✨ Integrates seamlessly with your favorite self-hosted applications -- 📌 Easy and fast app management - no yaml involved -- 🙊 Advanced secrets management system for enhanced security +- 📌 Easy and fast app management - no YAML involved +- 🙊 Advanced secrets' management system for enhanced security - 📄 Detailed documentation and active community -- 🔍 Search though the web or supported integrations in an instant -- 🏴󠁧󠁢󠁮󠁩󠁲󠁿 Monitor your application with a built in status system +- 🔍 Search through the web or supported integrations in an instant +- 🏴󠁧󠁢󠁮󠁩󠁲󠁿 Monitor your application with a built-in status system - 🦞 Comprehensive built-in icon picker with over 1000 icons -- 🐳 Easy deployment with Docker, Unraid, Synology -- 🚀 Comatible with any major consumer hardware (x86, Rasperry Pi, ...) +- 🐳 Easy deployment with Docker, unRAID, Synology +- 🚀 Compatible with any major consumer hardware (x86, Raspberry Pi, ...) - 💵 Free and Open-Source - your data stays on your device

- - - +![Widgets & Integrations Section](docs/section-widgets-and-integrations.png) -Homarr has a [built in collection of widgets and integrations](https://homarr.dev/docs/integrations/) , that connect to your applications and enable you to control them directly from the dashboard. -Each widget and integration has a comprehensive documentation for your confort. +Homarr has a [built-in collection of widgets and integrations](https://homarr.dev/docs/integrations/), that connect to your applications and enable you to control them directly from the dashboard. +Each widget and integration has a comprehensive documentation for your comfort. Homarr will integrate with the following applications of yours: - 📥 Torrent clients - - [Delguge](https://homarr.dev/docs/integrations/#deluge) + - [Deluge](https://homarr.dev/docs/integrations/#deluge) - [Transmission](https://homarr.dev/docs/integrations/#transmission) - - [qBittorrent](https://homarr.dev/docs/integrations/#qbittorrent-integration) + - [qBittorent](https://homarr.dev/docs/integrations/#qbittorrent-integration) - 📥 Usenet clients - [SABnzbd](https://homarr.dev/docs/integrations/#sabnzbd) - [NZBGet](https://homarr.dev/docs/integrations/#nzbget) @@ -94,21 +87,17 @@ We're constantly adding new integrations and widgets, which will enhance your ex

- - - +![Preview Section](docs/section-preview.png) https://user-images.githubusercontent.com/30572287/217098893-5880e7de-13d0-42c5-b505-f7921593396f.mp4

- - - +![Installation Section](docs/section-installation.png) There are many different ways, how Homarr can be installed. -Since we are developing Homarr very frequently, we recommend to read our official installation guides: +Since we are developing Homarr very frequently, we recommend reading our official installation guides: @@ -117,19 +106,19 @@ Since we are developing Homarr very frequently, we recommend to read our officia

- - - +![Contribute Section](docs/section-contribute.png) Homarr is maintained by motivated developers in their free-time. We work for fun and learning on this project. -Hence, we're glad for all help and support we can get. -Altough a donation is apprechiated, there are also other ways you can support us. +Hence, we're glad for all the help and support we can get. +Although a donation is appreciated, there are other ways you can support us. -[_![](https://cdn.ko-fi.com/cdn/kofi3.png?v=3)_](https://ko-fi.com/ajnart) +
+ + -You can also support us [translating the entire project in as many languages as possible](https://homarr.dev/docs/community/translations) or contribute directly to the code or documentation. +You can also support us [translating the entire project in as many languages as possible,](https://homarr.dev/docs/community/translations) or contribute directly to the code or documentation. **Please read our [Contribution Guidelines](/CONTRIBUTING.md)** -All contributions, regardless of their size or scope, are welcome and highly apprechiated! Thank you ❤️ +All contributions, regardless of their size or scope, are welcome and highly appreciated! Thank you ❤️ From 530b158f4e321296f06a521a5409330d294c383e Mon Sep 17 00:00:00 2001 From: Manuel Date: Tue, 11 Apr 2023 18:59:56 +0200 Subject: [PATCH 91/98] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Fix=20default=20img?= =?UTF-8?q?=20paths?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/configs/default.json | 2 +- .../Settings/Customization/Meta/BackgroundChanger.tsx | 2 +- src/components/Settings/Customization/Meta/FaviconChanger.tsx | 2 +- src/components/layout/header/Meta/Head.tsx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/configs/default.json b/data/configs/default.json index 7eebc4a93..456206c17 100644 --- a/data/configs/default.json +++ b/data/configs/default.json @@ -375,7 +375,7 @@ }, "pageTitle": "Homarr v0.11 ⭐️", "logoImageUrl": "/imgs/logo/logo.png", - "faviconUrl": "/imgs/favicon/favicon-squared", + "faviconUrl": "/imgs/favicon/favicon-squared.png", "backgroundImageUrl": "", "customCss": "", "colors": { diff --git a/src/components/Settings/Customization/Meta/BackgroundChanger.tsx b/src/components/Settings/Customization/Meta/BackgroundChanger.tsx index 3bbad0908..1b26c6de8 100644 --- a/src/components/Settings/Customization/Meta/BackgroundChanger.tsx +++ b/src/components/Settings/Customization/Meta/BackgroundChanger.tsx @@ -33,7 +33,7 @@ export const BackgroundChanger = () => { return ( diff --git a/src/components/Settings/Customization/Meta/FaviconChanger.tsx b/src/components/Settings/Customization/Meta/FaviconChanger.tsx index f92252244..0358ec34c 100644 --- a/src/components/Settings/Customization/Meta/FaviconChanger.tsx +++ b/src/components/Settings/Customization/Meta/FaviconChanger.tsx @@ -9,7 +9,7 @@ export const FaviconChanger = () => { const updateConfig = useConfigStore((x) => x.updateConfig); const { config, name: configName } = useConfigContext(); const [faviconUrl, setFaviconUrl] = useState( - config?.settings.customization.faviconUrl ?? '/imgs/favicon/favicon-squared.png' + config?.settings.customization.faviconUrl ?? '/imgs/favicon/favicon.svg' ); if (!configName) return null; diff --git a/src/components/layout/header/Meta/Head.tsx b/src/components/layout/header/Meta/Head.tsx index a0cb45691..d63a61c10 100644 --- a/src/components/layout/header/Meta/Head.tsx +++ b/src/components/layout/header/Meta/Head.tsx @@ -20,7 +20,7 @@ export function Head() { {/* configure apple splash screen & touch icon */} Date: Tue, 11 Apr 2023 22:07:17 +0200 Subject: [PATCH 92/98] =?UTF-8?q?=F0=9F=92=84=20Dynamic=20calender=20dimen?= =?UTF-8?q?sions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widgets/calendar/CalendarTile.tsx | 32 ++++++++++++++++++--------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/widgets/calendar/CalendarTile.tsx b/src/widgets/calendar/CalendarTile.tsx index b5cf83531..1d0008f04 100644 --- a/src/widgets/calendar/CalendarTile.tsx +++ b/src/widgets/calendar/CalendarTile.tsx @@ -1,11 +1,10 @@ -import { createStyles, Group, MantineThemeColors, useMantineTheme } from '@mantine/core'; +import { Group } from '@mantine/core'; import { Calendar } from '@mantine/dates'; import { IconCalendarTime } from '@tabler/icons'; import { useQuery } from '@tanstack/react-query'; import { i18n } from 'next-i18next'; import { useState } from 'react'; import { useConfigContext } from '../../config/provider'; -import { useColorTheme } from '../../tools/color'; import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; import { CalendarDay } from './CalendarDay'; @@ -49,10 +48,7 @@ interface CalendarTileProps { } function CalendarTile({ widget }: CalendarTileProps) { - const { secondaryColor } = useColorTheme(); const { name: configName } = useConfigContext(); - const { classes, cx } = useStyles(secondaryColor); - const { colorScheme, colors } = useMantineTheme(); const [month, setMonth] = useState(new Date()); const { data: medias } = useQuery({ @@ -80,6 +76,26 @@ function CalendarTile({ widget }: CalendarTileProps) { hideWeekdays date={month} hasNextLevel={false} + styles={{ + calendar: { + height: '100%', + }, + monthLevelGroup: { + height: '100%', + }, + monthLevel: { + height: '100%', + display: 'flex', + flexDirection: 'column', + width: '100%', + }, + month: { + flex: 1, + }, + calendarHeader: { + maxWidth: 'inherit', + }, + }} renderDay={(date) => ( )} @@ -88,12 +104,6 @@ function CalendarTile({ widget }: CalendarTileProps) { ); } -const useStyles = createStyles((theme, secondaryColor: keyof MantineThemeColors) => ({ - weekend: { - color: `${secondaryColor} !important`, - }, -})); - const getReleasedMediasForDate = ( medias: MediasType | undefined, date: Date, From fb9a8ed094150b9c9775bd8498df5a43de705544 Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 12 Apr 2023 23:57:05 +0900 Subject: [PATCH 93/98] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Upgrade=20turbo=20ve?= =?UTF-8?q?rsion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- yarn.lock | 58 ++++++++++++++++++++++++++-------------------------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index d84a5b0fe..7cca6a3d2 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "node-mocks-http": "^1.12.2", "prettier": "^2.7.1", "sass": "^1.56.1", - "turbo": "^1.8.3", + "turbo": "latest", "typescript": "^4.7.4", "video.js": "^8.0.3", "vitest": "^0.29.3", diff --git a/yarn.lock b/yarn.lock index d0ee2773a..40f71e19b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4993,7 +4993,7 @@ __metadata: rss-parser: ^3.12.0 sabnzbd-api: ^1.5.0 sass: ^1.56.1 - turbo: ^1.8.3 + turbo: latest typescript: ^4.7.4 uuid: ^8.3.2 video.js: ^8.0.3 @@ -8132,58 +8132,58 @@ __metadata: languageName: node linkType: hard -"turbo-darwin-64@npm:1.8.6": - version: 1.8.6 - resolution: "turbo-darwin-64@npm:1.8.6" +"turbo-darwin-64@npm:1.9.0": + version: 1.9.0 + resolution: "turbo-darwin-64@npm:1.9.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"turbo-darwin-arm64@npm:1.8.6": - version: 1.8.6 - resolution: "turbo-darwin-arm64@npm:1.8.6" +"turbo-darwin-arm64@npm:1.9.0": + version: 1.9.0 + resolution: "turbo-darwin-arm64@npm:1.9.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"turbo-linux-64@npm:1.8.6": - version: 1.8.6 - resolution: "turbo-linux-64@npm:1.8.6" +"turbo-linux-64@npm:1.9.0": + version: 1.9.0 + resolution: "turbo-linux-64@npm:1.9.0" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"turbo-linux-arm64@npm:1.8.6": - version: 1.8.6 - resolution: "turbo-linux-arm64@npm:1.8.6" +"turbo-linux-arm64@npm:1.9.0": + version: 1.9.0 + resolution: "turbo-linux-arm64@npm:1.9.0" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"turbo-windows-64@npm:1.8.6": - version: 1.8.6 - resolution: "turbo-windows-64@npm:1.8.6" +"turbo-windows-64@npm:1.9.0": + version: 1.9.0 + resolution: "turbo-windows-64@npm:1.9.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"turbo-windows-arm64@npm:1.8.6": - version: 1.8.6 - resolution: "turbo-windows-arm64@npm:1.8.6" +"turbo-windows-arm64@npm:1.9.0": + version: 1.9.0 + resolution: "turbo-windows-arm64@npm:1.9.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"turbo@npm:^1.8.3": - version: 1.8.6 - resolution: "turbo@npm:1.8.6" +"turbo@npm:latest": + version: 1.9.0 + resolution: "turbo@npm:1.9.0" dependencies: - turbo-darwin-64: 1.8.6 - turbo-darwin-arm64: 1.8.6 - turbo-linux-64: 1.8.6 - turbo-linux-arm64: 1.8.6 - turbo-windows-64: 1.8.6 - turbo-windows-arm64: 1.8.6 + turbo-darwin-64: 1.9.0 + turbo-darwin-arm64: 1.9.0 + turbo-linux-64: 1.9.0 + turbo-linux-arm64: 1.9.0 + turbo-windows-64: 1.9.0 + turbo-windows-arm64: 1.9.0 dependenciesMeta: turbo-darwin-64: optional: true @@ -8199,7 +8199,7 @@ __metadata: optional: true bin: turbo: bin/turbo - checksum: f20983be69ac689eb8193adff5838fbc1248dc987fbecfa7433996ee50934dc5574c98f2b09e552bfae48386f2077ce810e203a8a9961819106098384bf4e806 + checksum: ca78c45fe09ce6985f37097bedd1ffd1785e5c21ea5b0c7eb3f67a6eb7170f45d5cdf159ed7164424efa1e6080e31c45aa179f4d79b81f55c72a1816b4ccb5a4 languageName: node linkType: hard From 632a9967fdbbbcf213e8416e54e3665f9a8cff66 Mon Sep 17 00:00:00 2001 From: Thomas Camlong <49837342+ajnart@users.noreply.github.com> Date: Thu, 13 Apr 2023 00:20:50 +0900 Subject: [PATCH 94/98] New Crowdin updates (#733) * New translations video-stream.json (Chinese Simplified) * New translations rss.json (Chinese Simplified) * New translations iframe.json (Chinese Simplified) * New translations error-boundary.json (French) * New translations error-boundary.json (Spanish) * New translations error-boundary.json (Danish) * New translations error-boundary.json (German) * New translations error-boundary.json (Greek) * New translations error-boundary.json (Hebrew) * New translations error-boundary.json (Italian) * New translations error-boundary.json (Japanese) * New translations error-boundary.json (Korean) * New translations error-boundary.json (Dutch) * New translations error-boundary.json (Norwegian) * New translations error-boundary.json (Polish) * New translations error-boundary.json (Russian) * New translations error-boundary.json (Slovak) * New translations error-boundary.json (Slovenian) * New translations error-boundary.json (Swedish) * New translations error-boundary.json (Ukrainian) * New translations error-boundary.json (Chinese Simplified) * New translations error-boundary.json (English) * New translations error-boundary.json (Vietnamese) * New translations error-boundary.json (Portuguese, Brazilian) * New translations error-boundary.json (LOLCAT) * New translations error-boundary.json (Danish) * New translations error-boundary.json (German) * New translations error-boundary.json (English) * New translations common.json (English) * New translations dashdot.json (English) * New translations ping.json (English) * New translations page-appearance.json (English) * New translations config-changer.json (English) * New translations search-engine.json (English) * New translations add-app.json (English) * New translations change-position.json (English) * New translations torrents-status.json (English) * New translations general.json (English) * New translations video-stream.json (English) * New translations rss.json (English) * New translations iframe.json (English) * New translations error-boundary.json (Hebrew) * New translations error-boundary.json (Italian) * New translations error-boundary.json (Slovak) * New translations about.json (Polish) * New translations about.json (English) * New translations about.json (French) * New translations about.json (Spanish) * New translations about.json (Danish) * New translations about.json (German) * New translations about.json (Greek) * New translations about.json (Hebrew) * New translations about.json (Italian) * New translations about.json (Japanese) * New translations about.json (Korean) * New translations about.json (Dutch) * New translations about.json (Norwegian) * New translations about.json (Russian) * New translations about.json (Slovak) * New translations about.json (Slovenian) * New translations about.json (Swedish) * New translations about.json (Ukrainian) * New translations about.json (Chinese Simplified) * New translations about.json (Vietnamese) * New translations about.json (Portuguese, Brazilian) * New translations about.json (LOLCAT) * New translations about.json (Spanish) * New translations about.json (Russian) * New translations about.json (Slovak) * New translations about.json (Ukrainian) * New translations about.json (Spanish) * New translations about.json (Russian) * New translations common.json (Russian) * New translations dashdot.json (Russian) * New translations config-changer.json (Russian) * New translations search-engine.json (Russian) * New translations change-position.json (Russian) * New translations torrents-status.json (Russian) * New translations general.json (Russian) * New translations error-boundary.json (Russian) * New translations about.json (Danish) * New translations dashdot.json (Russian) * New translations ping.json (Russian) * New translations about.json (German) * New translations dashdot.json (Russian) * New translations common.json (Russian) * New translations page-appearance.json (Russian) * New translations add-app.json (Russian) * New translations video-stream.json (Russian) * New translations rss.json (Russian) * New translations iframe.json (Russian) * New translations about.json (Swedish) * New translations about.json (Italian) * New translations about.json (Hebrew) * New translations about.json (Hebrew) * New translations common.json (Slovenian) * New translations common.json (Slovenian) * New translations dashdot.json (Slovenian) * New translations ping.json (Slovenian) * New translations page-appearance.json (Slovenian) * New translations config-changer.json (Slovenian) * New translations about.json (Slovenian) * New translations config-changer.json (Slovenian) * New translations search-engine.json (Slovenian) * New translations add-app.json (Slovenian) * New translations change-position.json (Slovenian) * New translations torrents-status.json (Slovenian) * New translations general.json (Slovenian) * New translations video-stream.json (Slovenian) * New translations rss.json (Slovenian) * New translations iframe.json (Slovenian) * New translations error-boundary.json (Slovenian) * New translations about.json (Vietnamese) * New translations error-boundary.json (Vietnamese) * New translations about.json (English) * New translations media-requests-list.json (French) * New translations media-requests-stats.json (French) * New translations media-requests-list.json (Spanish) * New translations media-requests-stats.json (Spanish) * New translations media-requests-list.json (Danish) * New translations media-requests-stats.json (Danish) * New translations media-requests-list.json (German) * New translations media-requests-stats.json (German) * New translations media-requests-list.json (Greek) * New translations media-requests-stats.json (Greek) * New translations media-requests-list.json (Hebrew) * New translations media-requests-stats.json (Hebrew) * New translations media-requests-list.json (Italian) * New translations media-requests-stats.json (Italian) * New translations media-requests-list.json (Japanese) * New translations media-requests-stats.json (Japanese) * New translations media-requests-list.json (Korean) * New translations media-requests-stats.json (Korean) * New translations media-requests-list.json (Dutch) * New translations media-requests-stats.json (Dutch) * New translations media-requests-list.json (Norwegian) * New translations media-requests-stats.json (Norwegian) * New translations media-requests-list.json (Polish) * New translations media-requests-stats.json (Polish) * New translations media-requests-list.json (Russian) * New translations media-requests-stats.json (Russian) * New translations media-requests-list.json (Slovak) * New translations media-requests-stats.json (Slovak) * New translations media-requests-list.json (Slovenian) * New translations media-requests-stats.json (Slovenian) * New translations media-requests-list.json (Swedish) * New translations media-requests-stats.json (Swedish) * New translations media-requests-list.json (Ukrainian) * New translations media-requests-stats.json (Ukrainian) * New translations media-requests-list.json (Chinese Simplified) * New translations media-requests-stats.json (Chinese Simplified) * New translations media-requests-list.json (English) * New translations media-requests-stats.json (English) * New translations media-requests-list.json (Vietnamese) * New translations media-requests-stats.json (Vietnamese) * New translations media-requests-list.json (Portuguese, Brazilian) * New translations media-requests-stats.json (Portuguese, Brazilian) * New translations media-requests-list.json (LOLCAT) * New translations media-requests-stats.json (LOLCAT) * New translations media-requests-list.json (Italian) * New translations media-requests-stats.json (Italian) * New translations common.json (Slovenian) * New translations rss.json (Slovenian) * New translations common.json (French) * New translations common.json (Spanish) * New translations common.json (Danish) * New translations common.json (German) * New translations common.json (Greek) * New translations common.json (Hebrew) * New translations common.json (Italian) * New translations common.json (Japanese) * New translations common.json (Korean) * New translations common.json (Dutch) * New translations common.json (Norwegian) * New translations common.json (Polish) * New translations common.json (Russian) * New translations common.json (Slovak) * New translations common.json (Swedish) * New translations common.json (Ukrainian) * New translations common.json (Chinese Simplified) * New translations common.json (English) * New translations common.json (Vietnamese) * New translations common.json (Portuguese, Brazilian) * New translations common.json (LOLCAT) * New translations common.json (Norwegian) * New translations dashdot.json (Norwegian) * New translations ping.json (Norwegian) * New translations page-appearance.json (Norwegian) * New translations config-changer.json (Norwegian) * New translations search-engine.json (Norwegian) * New translations add-app.json (Norwegian) * New translations about.json (Norwegian) * New translations change-position.json (Norwegian) * New translations torrents-status.json (Norwegian) * New translations general.json (Norwegian) * New translations video-stream.json (Norwegian) * New translations rss.json (French) * New translations rss.json (Spanish) * New translations rss.json (Danish) * New translations rss.json (German) * New translations rss.json (Greek) * New translations rss.json (Hebrew) * New translations rss.json (Italian) * New translations rss.json (Japanese) * New translations rss.json (Korean) * New translations rss.json (Dutch) * New translations rss.json (Norwegian) * New translations rss.json (Polish) * New translations rss.json (Russian) * New translations rss.json (Slovak) * New translations rss.json (Swedish) * New translations rss.json (Ukrainian) * New translations rss.json (Chinese Simplified) * New translations rss.json (English) * New translations rss.json (Vietnamese) * New translations rss.json (Portuguese, Brazilian) * New translations rss.json (LOLCAT) * New translations media-server.json (Norwegian) * New translations media-requests-list.json (Spanish) * New translations media-requests-stats.json (Spanish) * New translations media-requests-list.json (Danish) * New translations media-requests-stats.json (Danish) * New translations media-requests-list.json (German) * New translations media-requests-stats.json (German) * New translations media-requests-list.json (Norwegian) * New translations media-requests-stats.json (Norwegian) * New translations common.json (Spanish) * New translations common.json (Danish) * New translations common.json (Italian) * New translations common.json (Norwegian) * New translations rss.json (Spanish) * New translations rss.json (Danish) * New translations rss.json (Italian) * New translations media-server.json (Norwegian) * New translations iframe.json (Norwegian) * New translations error-boundary.json (Norwegian) * New translations media-requests-list.json (Hebrew) * New translations media-requests-stats.json (Hebrew) * New translations media-requests-list.json (Slovak) * New translations media-requests-stats.json (Slovak) * New translations common.json (Hebrew) * New translations common.json (Slovak) * New translations rss.json (Hebrew) * New translations rss.json (Slovak) * New translations about.json (English) * New translations media-requests-list.json (English) * New translations media-requests-stats.json (English) * New translations common.json (English) * New translations rss.json (English) --- public/locales/da/common.json | 3 +- public/locales/da/layout/modals/about.json | 4 + public/locales/da/modules/dashdot.json | 2 +- public/locales/da/modules/iframe.json | 4 +- .../da/modules/media-requests-list.json | 17 +++++ .../da/modules/media-requests-stats.json | 14 ++++ public/locales/da/modules/ping.json | 2 +- public/locales/da/modules/rss.json | 20 +++-- public/locales/da/modules/video-stream.json | 4 +- .../customization/page-appearance.json | 8 +- public/locales/da/widgets/error-boundary.json | 14 ++++ public/locales/de/common.json | 3 +- public/locales/de/layout/modals/about.json | 6 +- public/locales/de/modules/dashdot.json | 26 +++---- .../de/modules/media-requests-list.json | 17 +++++ .../de/modules/media-requests-stats.json | 14 ++++ public/locales/de/modules/rss.json | 20 +++-- public/locales/de/modules/video-stream.json | 4 +- .../de/settings/customization/general.json | 4 +- .../customization/page-appearance.json | 8 +- public/locales/de/widgets/error-boundary.json | 14 ++++ public/locales/el/common.json | 5 +- public/locales/el/layout/modals/about.json | 4 + public/locales/el/layout/modals/add-app.json | 2 +- .../el/layout/modals/change-position.json | 2 - public/locales/el/modules/common.json | 2 +- public/locales/el/modules/dashdot.json | 4 +- .../el/modules/media-requests-list.json | 17 +++++ .../el/modules/media-requests-stats.json | 14 ++++ public/locales/el/modules/ping.json | 2 +- public/locales/el/modules/rss.json | 18 +++-- .../locales/el/modules/torrents-status.json | 2 +- .../el/settings/customization/general.json | 2 +- .../el/settings/general/config-changer.json | 6 +- .../el/settings/general/search-engine.json | 2 +- public/locales/el/widgets/error-boundary.json | 14 ++++ public/locales/en/layout/modals/add-app.json | 2 +- public/locales/en/modules/common.json | 2 +- public/locales/en/modules/iframe.json | 2 +- public/locales/en/modules/rss.json | 2 +- public/locales/en/widgets/error-boundary.json | 2 +- public/locales/es/common.json | 3 +- public/locales/es/layout/modals/about.json | 4 + public/locales/es/modules/common.json | 2 +- public/locales/es/modules/dashdot.json | 4 +- public/locales/es/modules/iframe.json | 4 +- .../es/modules/media-requests-list.json | 17 +++++ .../es/modules/media-requests-stats.json | 14 ++++ public/locales/es/modules/ping.json | 2 +- public/locales/es/modules/rss.json | 20 +++-- .../locales/es/modules/torrents-status.json | 2 +- public/locales/es/modules/video-stream.json | 4 +- .../es/settings/customization/general.json | 2 +- .../customization/page-appearance.json | 8 +- .../es/settings/general/config-changer.json | 2 +- .../es/settings/general/search-engine.json | 2 +- public/locales/es/widgets/error-boundary.json | 14 ++++ public/locales/fr/common.json | 3 +- public/locales/fr/layout/modals/about.json | 4 + public/locales/fr/layout/modals/add-app.json | 10 +-- .../fr/layout/modals/change-position.json | 2 - public/locales/fr/modules/common.json | 2 +- public/locales/fr/modules/dashdot.json | 4 +- .../fr/modules/media-requests-list.json | 17 +++++ .../fr/modules/media-requests-stats.json | 14 ++++ public/locales/fr/modules/ping.json | 2 +- public/locales/fr/modules/rss.json | 20 +++-- .../locales/fr/modules/torrents-status.json | 2 +- .../fr/settings/customization/general.json | 2 +- .../customization/page-appearance.json | 8 +- .../fr/settings/general/search-engine.json | 2 +- public/locales/fr/widgets/error-boundary.json | 14 ++++ public/locales/he/common.json | 3 +- public/locales/he/layout/modals/about.json | 4 + public/locales/he/modules/dashdot.json | 2 +- public/locales/he/modules/iframe.json | 2 +- .../he/modules/media-requests-list.json | 17 +++++ .../he/modules/media-requests-stats.json | 14 ++++ public/locales/he/modules/rss.json | 20 +++-- public/locales/he/modules/video-stream.json | 2 +- .../he/settings/customization/general.json | 2 +- .../customization/page-appearance.json | 8 +- public/locales/he/widgets/error-boundary.json | 14 ++++ public/locales/it/common.json | 1 + public/locales/it/layout/modals/about.json | 6 +- public/locales/it/modules/dashdot.json | 2 +- public/locales/it/modules/iframe.json | 4 +- .../it/modules/media-requests-list.json | 17 +++++ .../it/modules/media-requests-stats.json | 14 ++++ public/locales/it/modules/rss.json | 20 +++-- .../locales/it/modules/torrents-status.json | 2 +- public/locales/it/modules/video-stream.json | 4 +- .../customization/page-appearance.json | 8 +- .../it/settings/general/config-changer.json | 2 +- public/locales/it/widgets/error-boundary.json | 14 ++++ public/locales/ja/common.json | 5 +- public/locales/ja/layout/modals/about.json | 4 + public/locales/ja/layout/modals/add-app.json | 2 +- .../ja/layout/modals/change-position.json | 2 - public/locales/ja/modules/common.json | 2 +- public/locales/ja/modules/dashdot.json | 4 +- .../ja/modules/media-requests-list.json | 17 +++++ .../ja/modules/media-requests-stats.json | 14 ++++ public/locales/ja/modules/ping.json | 2 +- public/locales/ja/modules/rss.json | 18 +++-- .../locales/ja/modules/torrents-status.json | 2 +- .../ja/settings/customization/general.json | 2 +- .../ja/settings/general/config-changer.json | 6 +- .../ja/settings/general/search-engine.json | 2 +- public/locales/ja/widgets/error-boundary.json | 14 ++++ public/locales/ko/common.json | 1 + public/locales/ko/layout/modals/about.json | 4 + public/locales/ko/modules/dashdot.json | 2 +- .../ko/modules/media-requests-list.json | 17 +++++ .../ko/modules/media-requests-stats.json | 14 ++++ public/locales/ko/modules/rss.json | 18 +++-- public/locales/ko/widgets/error-boundary.json | 14 ++++ public/locales/lol/common.json | 5 +- public/locales/lol/layout/modals/about.json | 4 + public/locales/lol/layout/modals/add-app.json | 2 +- .../lol/layout/modals/change-position.json | 2 - public/locales/lol/modules/common.json | 2 +- public/locales/lol/modules/dashdot.json | 4 +- .../lol/modules/media-requests-list.json | 17 +++++ .../lol/modules/media-requests-stats.json | 14 ++++ public/locales/lol/modules/rss.json | 18 +++-- .../locales/lol/modules/torrents-status.json | 2 +- .../lol/settings/customization/general.json | 2 +- .../lol/settings/general/search-engine.json | 2 +- .../locales/lol/widgets/error-boundary.json | 14 ++++ public/locales/nl/common.json | 5 +- public/locales/nl/layout/modals/about.json | 4 + public/locales/nl/layout/modals/add-app.json | 2 +- .../nl/layout/modals/change-position.json | 2 - public/locales/nl/modules/common.json | 2 +- public/locales/nl/modules/dashdot.json | 4 +- public/locales/nl/modules/iframe.json | 4 +- .../nl/modules/media-requests-list.json | 17 +++++ .../nl/modules/media-requests-stats.json | 14 ++++ public/locales/nl/modules/ping.json | 2 +- public/locales/nl/modules/rss.json | 20 +++-- .../locales/nl/modules/torrents-status.json | 2 +- public/locales/nl/modules/video-stream.json | 4 +- .../nl/settings/customization/general.json | 4 +- .../customization/page-appearance.json | 8 +- .../nl/settings/general/config-changer.json | 6 +- .../nl/settings/general/search-engine.json | 2 +- public/locales/nl/widgets/error-boundary.json | 14 ++++ public/locales/no/common.json | 1 + public/locales/no/layout/modals/about.json | 6 +- public/locales/no/layout/modals/add-app.json | 10 +-- public/locales/no/modules/dashdot.json | 40 +++++----- public/locales/no/modules/iframe.json | 14 ++-- .../no/modules/media-requests-list.json | 17 +++++ .../no/modules/media-requests-stats.json | 14 ++++ public/locales/no/modules/media-server.json | 16 ++-- public/locales/no/modules/rss.json | 26 ++++--- public/locales/no/modules/video-stream.json | 2 +- .../customization/page-appearance.json | 8 +- .../no/settings/general/config-changer.json | 2 +- public/locales/no/widgets/error-boundary.json | 14 ++++ public/locales/pl/common.json | 15 ++-- public/locales/pl/layout/modals/about.json | 16 ++-- public/locales/pl/layout/modals/add-app.json | 10 +-- public/locales/pl/modules/calendar.json | 2 +- public/locales/pl/modules/common.json | 2 +- public/locales/pl/modules/dashdot.json | 44 +++++------ public/locales/pl/modules/iframe.json | 14 ++-- .../pl/modules/media-requests-list.json | 17 +++++ .../pl/modules/media-requests-stats.json | 14 ++++ public/locales/pl/modules/media-server.json | 16 ++-- public/locales/pl/modules/ping.json | 2 +- public/locales/pl/modules/rss.json | 24 +++--- public/locales/pl/modules/video-stream.json | 16 ++-- public/locales/pl/settings/common.json | 10 +-- .../customization/color-selector.json | 1 + .../pl/settings/customization/general.json | 18 ++--- .../pl/settings/customization/gridstack.json | 12 +-- .../customization/page-appearance.json | 12 +-- .../pl/settings/general/config-changer.json | 6 +- public/locales/pl/widgets/error-boundary.json | 14 ++++ public/locales/pt/common.json | 5 +- public/locales/pt/layout/modals/about.json | 4 + public/locales/pt/layout/modals/add-app.json | 2 +- .../pt/layout/modals/change-position.json | 2 - public/locales/pt/modules/common.json | 2 +- public/locales/pt/modules/dashdot.json | 4 +- public/locales/pt/modules/iframe.json | 4 +- .../pt/modules/media-requests-list.json | 17 +++++ .../pt/modules/media-requests-stats.json | 14 ++++ public/locales/pt/modules/ping.json | 2 +- public/locales/pt/modules/rss.json | 20 +++-- .../locales/pt/modules/torrents-status.json | 2 +- public/locales/pt/modules/video-stream.json | 4 +- .../pt/settings/customization/general.json | 2 +- .../customization/page-appearance.json | 8 +- .../pt/settings/general/config-changer.json | 6 +- .../pt/settings/general/search-engine.json | 2 +- public/locales/pt/widgets/error-boundary.json | 14 ++++ public/locales/ru/common.json | 5 +- public/locales/ru/layout/modals/about.json | 4 + public/locales/ru/modules/dashdot.json | 16 ++-- public/locales/ru/modules/iframe.json | 4 +- .../ru/modules/media-requests-list.json | 17 +++++ .../ru/modules/media-requests-stats.json | 14 ++++ public/locales/ru/modules/rss.json | 20 +++-- public/locales/ru/modules/video-stream.json | 2 +- .../customization/page-appearance.json | 8 +- .../ru/settings/general/config-changer.json | 2 +- public/locales/ru/widgets/error-boundary.json | 14 ++++ public/locales/sk/common.json | 5 +- public/locales/sk/layout/modals/about.json | 4 + public/locales/sk/modules/common.json | 2 +- public/locales/sk/modules/dashdot.json | 4 +- public/locales/sk/modules/iframe.json | 4 +- .../sk/modules/media-requests-list.json | 17 +++++ .../sk/modules/media-requests-stats.json | 14 ++++ public/locales/sk/modules/rss.json | 20 +++-- public/locales/sk/modules/video-stream.json | 2 +- .../customization/page-appearance.json | 8 +- .../sk/settings/general/config-changer.json | 4 +- .../sk/settings/general/search-engine.json | 2 +- public/locales/sk/widgets/error-boundary.json | 14 ++++ public/locales/sl/common.json | 5 +- public/locales/sl/layout/modals/about.json | 4 + public/locales/sl/layout/modals/add-app.json | 2 +- public/locales/sl/modules/dashdot.json | 4 +- public/locales/sl/modules/iframe.json | 4 +- .../sl/modules/media-requests-list.json | 17 +++++ .../sl/modules/media-requests-stats.json | 14 ++++ public/locales/sl/modules/ping.json | 2 +- public/locales/sl/modules/rss.json | 20 +++-- .../locales/sl/modules/torrents-status.json | 2 +- public/locales/sl/modules/video-stream.json | 2 +- .../sl/settings/customization/general.json | 2 +- .../customization/page-appearance.json | 8 +- .../sl/settings/general/config-changer.json | 4 +- .../sl/settings/general/search-engine.json | 2 +- public/locales/sl/widgets/error-boundary.json | 14 ++++ public/locales/sv/common.json | 3 +- public/locales/sv/layout/modals/about.json | 4 + public/locales/sv/modules/dashdot.json | 2 +- public/locales/sv/modules/iframe.json | 4 +- .../sv/modules/media-requests-list.json | 17 +++++ .../sv/modules/media-requests-stats.json | 14 ++++ public/locales/sv/modules/rss.json | 18 +++-- public/locales/sv/modules/video-stream.json | 4 +- .../customization/page-appearance.json | 8 +- .../sv/settings/general/config-changer.json | 2 +- public/locales/sv/widgets/error-boundary.json | 14 ++++ public/locales/uk/common.json | 5 +- public/locales/uk/layout/modals/about.json | 14 ++-- public/locales/uk/layout/modals/add-app.json | 12 +-- .../uk/layout/modals/change-position.json | 4 +- public/locales/uk/modules/common.json | 2 +- public/locales/uk/modules/dashdot.json | 6 +- public/locales/uk/modules/iframe.json | 4 +- .../uk/modules/media-requests-list.json | 17 +++++ .../uk/modules/media-requests-stats.json | 14 ++++ public/locales/uk/modules/rss.json | 20 +++-- .../locales/uk/modules/torrents-status.json | 2 +- public/locales/uk/modules/video-stream.json | 2 +- public/locales/uk/settings/common.json | 10 +-- .../customization/color-selector.json | 1 + .../uk/settings/customization/general.json | 16 ++-- .../uk/settings/customization/gridstack.json | 10 +-- .../customization/page-appearance.json | 12 +-- .../uk/settings/general/config-changer.json | 2 +- .../uk/settings/general/search-engine.json | 2 +- public/locales/uk/widgets/error-boundary.json | 14 ++++ public/locales/vi/common.json | 5 +- public/locales/vi/layout/modals/about.json | 22 +++--- public/locales/vi/layout/modals/add-app.json | 74 +++++++++---------- public/locales/vi/modules/dashdot.json | 38 +++++----- public/locales/vi/modules/iframe.json | 14 ++-- .../vi/modules/media-requests-list.json | 17 +++++ .../vi/modules/media-requests-stats.json | 14 ++++ public/locales/vi/modules/media-server.json | 16 ++-- public/locales/vi/modules/rss.json | 24 +++--- public/locales/vi/modules/video-stream.json | 16 ++-- public/locales/vi/settings/common.json | 34 ++++----- .../vi/settings/customization/general.json | 12 +-- .../vi/settings/customization/gridstack.json | 8 +- .../customization/page-appearance.json | 10 +-- .../vi/settings/general/config-changer.json | 18 ++--- public/locales/vi/widgets/error-boundary.json | 14 ++++ public/locales/zh/common.json | 5 +- public/locales/zh/layout/modals/about.json | 14 ++-- public/locales/zh/layout/modals/add-app.json | 12 +-- public/locales/zh/modules/common.json | 2 +- public/locales/zh/modules/dashdot.json | 22 +++--- public/locales/zh/modules/iframe.json | 4 +- .../zh/modules/media-requests-list.json | 17 +++++ .../zh/modules/media-requests-stats.json | 14 ++++ public/locales/zh/modules/rss.json | 20 +++-- .../locales/zh/modules/torrents-status.json | 2 +- public/locales/zh/modules/video-stream.json | 2 +- .../zh/settings/customization/general.json | 2 +- .../customization/page-appearance.json | 8 +- .../zh/settings/general/config-changer.json | 6 +- .../zh/settings/general/search-engine.json | 2 +- public/locales/zh/widgets/error-boundary.json | 14 ++++ 302 files changed, 1901 insertions(+), 777 deletions(-) create mode 100644 public/locales/da/modules/media-requests-list.json create mode 100644 public/locales/da/modules/media-requests-stats.json create mode 100644 public/locales/da/widgets/error-boundary.json create mode 100644 public/locales/de/modules/media-requests-list.json create mode 100644 public/locales/de/modules/media-requests-stats.json create mode 100644 public/locales/de/widgets/error-boundary.json create mode 100644 public/locales/el/modules/media-requests-list.json create mode 100644 public/locales/el/modules/media-requests-stats.json create mode 100644 public/locales/el/widgets/error-boundary.json create mode 100644 public/locales/es/modules/media-requests-list.json create mode 100644 public/locales/es/modules/media-requests-stats.json create mode 100644 public/locales/es/widgets/error-boundary.json create mode 100644 public/locales/fr/modules/media-requests-list.json create mode 100644 public/locales/fr/modules/media-requests-stats.json create mode 100644 public/locales/fr/widgets/error-boundary.json create mode 100644 public/locales/he/modules/media-requests-list.json create mode 100644 public/locales/he/modules/media-requests-stats.json create mode 100644 public/locales/he/widgets/error-boundary.json create mode 100644 public/locales/it/modules/media-requests-list.json create mode 100644 public/locales/it/modules/media-requests-stats.json create mode 100644 public/locales/it/widgets/error-boundary.json create mode 100644 public/locales/ja/modules/media-requests-list.json create mode 100644 public/locales/ja/modules/media-requests-stats.json create mode 100644 public/locales/ja/widgets/error-boundary.json create mode 100644 public/locales/ko/modules/media-requests-list.json create mode 100644 public/locales/ko/modules/media-requests-stats.json create mode 100644 public/locales/ko/widgets/error-boundary.json create mode 100644 public/locales/lol/modules/media-requests-list.json create mode 100644 public/locales/lol/modules/media-requests-stats.json create mode 100644 public/locales/lol/widgets/error-boundary.json create mode 100644 public/locales/nl/modules/media-requests-list.json create mode 100644 public/locales/nl/modules/media-requests-stats.json create mode 100644 public/locales/nl/widgets/error-boundary.json create mode 100644 public/locales/no/modules/media-requests-list.json create mode 100644 public/locales/no/modules/media-requests-stats.json create mode 100644 public/locales/no/widgets/error-boundary.json create mode 100644 public/locales/pl/modules/media-requests-list.json create mode 100644 public/locales/pl/modules/media-requests-stats.json create mode 100644 public/locales/pl/widgets/error-boundary.json create mode 100644 public/locales/pt/modules/media-requests-list.json create mode 100644 public/locales/pt/modules/media-requests-stats.json create mode 100644 public/locales/pt/widgets/error-boundary.json create mode 100644 public/locales/ru/modules/media-requests-list.json create mode 100644 public/locales/ru/modules/media-requests-stats.json create mode 100644 public/locales/ru/widgets/error-boundary.json create mode 100644 public/locales/sk/modules/media-requests-list.json create mode 100644 public/locales/sk/modules/media-requests-stats.json create mode 100644 public/locales/sk/widgets/error-boundary.json create mode 100644 public/locales/sl/modules/media-requests-list.json create mode 100644 public/locales/sl/modules/media-requests-stats.json create mode 100644 public/locales/sl/widgets/error-boundary.json create mode 100644 public/locales/sv/modules/media-requests-list.json create mode 100644 public/locales/sv/modules/media-requests-stats.json create mode 100644 public/locales/sv/widgets/error-boundary.json create mode 100644 public/locales/uk/modules/media-requests-list.json create mode 100644 public/locales/uk/modules/media-requests-stats.json create mode 100644 public/locales/uk/widgets/error-boundary.json create mode 100644 public/locales/vi/modules/media-requests-list.json create mode 100644 public/locales/vi/modules/media-requests-stats.json create mode 100644 public/locales/vi/widgets/error-boundary.json create mode 100644 public/locales/zh/modules/media-requests-list.json create mode 100644 public/locales/zh/modules/media-requests-stats.json create mode 100644 public/locales/zh/widgets/error-boundary.json diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 1f3ca957f..d10ded8fb 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -9,7 +9,8 @@ "version": "Version", "changePosition": "Ændre placering", "remove": "Fjern", - "removeConfirm": "Er du sikker på, at du ønsker at fjerne {{item}} ?", + "removeConfirm": "Er du sikker på, at du ønsker at fjerne {{item}}?", + "createItem": "+ opret {{item}}", "sections": { "settings": "Indstillinger", "dangerZone": "Farezone" diff --git a/public/locales/da/layout/modals/about.json b/public/locales/da/layout/modals/about.json index e6023ce8e..903422b8c 100644 --- a/public/locales/da/layout/modals/about.json +++ b/public/locales/da/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr er et elegant, moderne dashboard, der giver dig alle dine apps og tjenester lige ved hånden. Med Homarr kan du få adgang til og styre alt på ét praktisk sted. Homarr integrerer problemfrit med de apps, du har tilføjet, og giver dig værdifulde oplysninger og fuld kontrol. Installationen er en leg, og Homarr understøtter en lang række implementeringsmetoder.", "contact": "Har du problemer eller spørgsmål? Kontakt os!", "addToDashboard": "Tilføj til dashboard", + "tip": "Mod henviser til din modificeringstast, det er Ctrl og Command/Super/Windows-tasten", + "key": "Genvejstast", + "action": "Handling", + "keybinds": "Genvejstaster", "metrics": { "configurationSchemaVersion": "Konfigurationsskema version", "configurationsCount": "Tilgængelige konfigurationer", diff --git a/public/locales/da/modules/dashdot.json b/public/locales/da/modules/dashdot.json index c57bf2a35..42b20b855 100644 --- a/public/locales/da/modules/dashdot.json +++ b/public/locales/da/modules/dashdot.json @@ -85,7 +85,7 @@ "noInformation": "Kan ikke hente information fra dash. - kører du den nyeste version?", "protocolDowngrade": { "title": "Registreret protokolnedgradering", - "text": "Protokollen til din Dash. instans bliver nedgraderet. Dette er sikkerhedsrisiko, da HTTP er ukrypteret og angribere kunne misbruge denne forbindelse. Sørg for, at Dash. kører på HTTPS også eller nedgraderer Homarr til HTTP (anbefales ikke)." + "text": "Forbindelsen til din Dash.-instans bruger HTTP. Dette er en sikkerhedsrisiko, fordi HTTP er ukrypteret, og angribere kan misbruge denne forbindelse. Sørg for, at Dash. bruger HTTPS, eller nedgrader Homarr til HTTP (anbefales ikke)." } }, "graphs": { diff --git a/public/locales/da/modules/iframe.json b/public/locales/da/modules/iframe.json index 986709f9d..826d57a4c 100644 --- a/public/locales/da/modules/iframe.json +++ b/public/locales/da/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "indlejret dokument (iframe)", "description": "Indlejr ethvert indhold fra internettet. Nogle websteder kan begrænse adgang.", "settings": { - "title": "IFrame indstillinger", + "title": "iFrame indstillinger", "embedUrl": { "label": "Indlejr URL" }, diff --git a/public/locales/da/modules/media-requests-list.json b/public/locales/da/modules/media-requests-list.json new file mode 100644 index 000000000..bb2e0ddff --- /dev/null +++ b/public/locales/da/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Medieforespørgsler", + "description": "Se en liste over alle medieforespørgsler fra din Overseerr eller Jellyseerr instans", + "settings": { + "title": "Liste over medieforespørgsler" + } + }, + "noRequests": "Ingen anmodninger fundet. Kontroller, at du har konfigureret dine apps korrekt.", + "pending": "Der er {countPendingApproval} anmodninger, der venter på godkendelse.", + "nonePending": "Der er i øjeblikket ingen godkendelser, der er under behandling. Du er i mål!", + "state": { + "approved": "Godkendt", + "pendingApproval": "Afventer godkendelse", + "declined": "Afvist" + } +} diff --git a/public/locales/da/modules/media-requests-stats.json b/public/locales/da/modules/media-requests-stats.json new file mode 100644 index 000000000..572bce8b7 --- /dev/null +++ b/public/locales/da/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Statistik for medieanmodning", + "description": "Statistik over dine medieanmodninger", + "settings": { + "title": "Statistikker over medieanmodninger" + } + }, + "stats": { + "pending": "Afventer godkendelse", + "tvRequests": "TV-anmodninger", + "movieRequests": "Film anmodninger" + } +} diff --git a/public/locales/da/modules/ping.json b/public/locales/da/modules/ping.json index c8ca496cd..96be60b4f 100644 --- a/public/locales/da/modules/ping.json +++ b/public/locales/da/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "Viser en statusindikator afhængig af HTTP-svarkoden for en given URL." + "description": "Viser en statusindikator afhængigt af HTTP-svarkoden for en given URL." }, "states": { "online": "Online {{response}}", diff --git a/public/locales/da/modules/rss.json b/public/locales/da/modules/rss.json index 010afb4c9..e80ae6b2a 100644 --- a/public/locales/da/modules/rss.json +++ b/public/locales/da/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "Indstillinger for RSS-widget", "rssFeedUrl": { - "label": "RSS-feed url" + "label": "RSS feeds URL'er", + "description": "URL'erne for de RSS-feeds, du vil vise fra." + }, + "refreshInterval": { + "label": "Opdateringsinterval (i minutter)" } - } - }, - "card": { - "errors": { - "general": { - "title": "Det er ikke muligt at hente RSS-feed", - "text": "Der var et problem med at nå ud til RSS-feedet. Sørg for, at du'har konfigureret feedet korrekt og bruger en gyldig RSS-url, der passer til den officielle standardspecifikation. Når du har opdateret feed'et, skal du muligvis gemme dit dashboard og opdatere siden." + }, + "card": { + "errors": { + "general": { + "title": "Det er ikke muligt at hente RSS-feed", + "text": "Der var et problem med at hente RSS-feedet. Sørg for, at du har konfigureret RSS-feedet korrekt ved hjælp af en gyldig URL. URL'er skal stemme overens med den officielle specifikation. Når du har opdateret feed'et, skal du muligvis opdatere dashboardet." + } } } } diff --git a/public/locales/da/modules/video-stream.json b/public/locales/da/modules/video-stream.json index 7319cf36d..03317a7e4 100644 --- a/public/locales/da/modules/video-stream.json +++ b/public/locales/da/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "Indstillinger for video stream widget", "FeedUrl": { - "label": "Feed url" + "label": "Feed URL" }, "autoPlay": { - "label": "Automatisk afspilning" + "label": "Auto-afspilning" }, "muted": { "label": "Slå lyden fra" diff --git a/public/locales/da/settings/customization/page-appearance.json b/public/locales/da/settings/customization/page-appearance.json index 43d2fba2a..bd66eef79 100644 --- a/public/locales/da/settings/customization/page-appearance.json +++ b/public/locales/da/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Metatitel", - "description": "Titlen, der vises som dit fanebladsnavn" + "description": "Den titel, der vises i fanen i din browser" }, "logo": { "label": "Logo", - "description": "Dashboard-logoet øverst til venstre" + "description": "Logoet, der vises øverst til venstre" }, "favicon": { "label": "Favicon", - "description": "Ikonet, der bruges foran dit fanebladsnavn" + "description": "Det ikon, der vises i fanen i din browser" }, "background": { "label": "Baggrund" }, "customCSS": { "label": "Tilpasset CSS", - "description": "Tilpas alle elementer på dit dashboard, kun anbefalet til erfarne brugere", + "description": "Yderligere, tilpasse dit dashboard ved hjælp af CSS, anbefales kun til erfarne brugere", "placeholder": "Brugerdefineret CSS vil blive anvendt sidst", "applying": "Anvender CSS..." }, diff --git a/public/locales/da/widgets/error-boundary.json b/public/locales/da/widgets/error-boundary.json new file mode 100644 index 000000000..377d366b9 --- /dev/null +++ b/public/locales/da/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ups, der opstod en fejl!", + "buttons": { + "details": "Detaljer", + "tryAgain": "Prøv igen" + } + }, + "modal": { + "text": "Vi beklager ulejligheden! Dette burde ikke ske - rapporter venligst dette problem på GitHub.", + "label": "Din fejl", + "reportButton": "Rapportér denne fejl" + } +} \ No newline at end of file diff --git a/public/locales/de/common.json b/public/locales/de/common.json index cdaf5abfb..cf843ff4f 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -10,12 +10,13 @@ "changePosition": "Position wechseln", "remove": "Entfernen", "removeConfirm": "Sind Sie sicher, dass Sie {{item}} entfernen möchten?", + "createItem": "", "sections": { "settings": "Einstellungen", "dangerZone": "Gefahrenzone" }, "secrets": { - "apiKey": "API-Schlüssel", + "apiKey": "API Schlüssel", "username": "Benutzername", "password": "Passwort" }, diff --git a/public/locales/de/layout/modals/about.json b/public/locales/de/layout/modals/about.json index 3c9ef88c0..64876f69b 100644 --- a/public/locales/de/layout/modals/about.json +++ b/public/locales/de/layout/modals/about.json @@ -1,7 +1,11 @@ { - "description": "Homarr ist ein schlankes, modernes Dashboard, das alle Ihre Apps und Dienste auf Knopfdruck zur Verfügung stellt. Mittels Homarr können Sie von einem einzigen Ort aus auf alles zugreifen und steuern. Es lässt sich nahtlos in die von Ihnen bevorzugten Apps integrieren und versorgt Sie mit wertvollen Informationen und der vollständige Kontrolle. Die Installation ist ein Kinderspiel, und es werden eine breite Palette von Konfigurations unterstützt.", + "description": "Homarr ist ein schlankes und modernes Dashboard, das alle Ihre Apps und Dienste auf Knopfdruck zur Verfügung stellt. Mittels Homarr können Sie von einem einzigen Ort aus auf alles zugreifen und steuern. Es lässt sich nahtlos in die von Ihnen bevorzugten Apps integrieren und versorgt Sie mit wertvollen Informationen und der vollständige Kontrolle. Die Installation ist ein Kinderspiel, und es werden eine breite Palette von Konfigurations unterstützt.", "contact": "Haben Sie Probleme oder Fragen? Nehmen Sie Kontakt mit uns auf!", "addToDashboard": "Zum Dashboard hinzufügen", + "tip": "Mod bezieht sich auf die Modifikator Taste, d. h. Strg und Befehl/Super/Windows-Taste", + "key": "Kurzbefehl Taste", + "action": "Aktion", + "keybinds": "Tastenbelegung", "metrics": { "configurationSchemaVersion": "Version des Konfigurationsschemas", "configurationsCount": "Verfügbare Konfigurationen", diff --git a/public/locales/de/modules/dashdot.json b/public/locales/de/modules/dashdot.json index 2ade84d78..a403da824 100644 --- a/public/locales/de/modules/dashdot.json +++ b/public/locales/de/modules/dashdot.json @@ -14,23 +14,23 @@ "label": "Spalten anzeigen" }, "graphHeight": { - "label": "Höhe der Graphen" + "label": "Höhe des Graphen" }, "graphsOrder": { - "label": "Graphen (Reihenfolge)", + "label": "Reihenfolge der Graphen", "storage": { "label": "Speicher", "enabled": { - "label": "Im Widget anzeigen" + "label": "In Widget anzeigen" }, "span": { - "label": "Spaltenbreite" + "label": "Länge der Säulen" }, "compactView": { - "label": "Als Text anzeigen (Kompakt)" + "label": "Als Text anzeigen (kompakt)" }, "multiView": { - "label": "Als Multi-Laufwerk anzeigen" + "label": "Als Multi-Laufwerk-Ansicht anzeigen" } }, "network": { @@ -39,10 +39,10 @@ "label": "In Widget anzeigen" }, "span": { - "label": "Spaltenbreite" + "label": "Länge der Säulen" }, "compactView": { - "label": "Als Text anzeigen (Kompakt)" + "label": "Als Text anzeigen (kompakt)" } }, "cpu": { @@ -51,10 +51,10 @@ "label": "In Widget anzeigen" }, "span": { - "label": "Spaltenbreite" + "label": "Länge der Säulen" }, "multiView": { - "label": "Als Multi-Core anzeigen" + "label": "Als Multi-Core-Ansicht anzeigen" } }, "ram": { @@ -63,7 +63,7 @@ "label": "In Widget anzeigen" }, "span": { - "label": "Spaltenbreite" + "label": "Länge der Säulen" } }, "gpu": { @@ -72,7 +72,7 @@ "label": "In Widget anzeigen" }, "span": { - "label": "Spaltenbreite" + "label": "Länge der Säulen" } } } @@ -85,7 +85,7 @@ "noInformation": "Es können keine Informationen vom Dash. abgerufen werden. - Verwenden Sie die neueste Version?", "protocolDowngrade": { "title": "Protokoll-Downgrade erkannt", - "text": "Das Protokoll zu Ihrer Dash.-Instanz wird herabgestuft. Dies ist ein Sicherheitsrisiko, da HTTP unverschlüsselt ist und Angreifer diese Verbindung missbrauchen könnten. Stellen Sie sicher, dass Dash. auch auf HTTPS läuft oder downgraden Sie Homarr auf HTTP (wird nicht empfohlen)." + "text": "Die Verbindung zu Ihrer Dash.-Instanz erfolgt über HTTP. Dies ist ein Sicherheitsrisiko, da HTTP unverschlüsselt ist und Angreifer diese Verbindung missbrauchen könnten. Stellen Sie sicher, dass Dash. HTTPS verwendet, oder setzen Sie Homarr auf HTTP herab (nicht empfohlen)." } }, "graphs": { diff --git a/public/locales/de/modules/media-requests-list.json b/public/locales/de/modules/media-requests-list.json new file mode 100644 index 000000000..bab554413 --- /dev/null +++ b/public/locales/de/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Medienanfragen", + "description": "Sehen Sie eine Liste aller Medienanfragen von Ihrer Overseerr- oder Jellyseerr-Instanz", + "settings": { + "title": "Liste der Medienanfragen" + } + }, + "noRequests": "Keine Anfragen gefunden. Bitte stellen Sie sicher, dass Sie Ihre Anwendungen richtig konfiguriert haben.", + "pending": "Es gibt {countPendingApproval} Anträge, die auf eine Genehmigung warten.", + "nonePending": "Es sind derzeit keine Genehmigungen ausstehend. Sie sind startklar!", + "state": { + "approved": "Genehmigt", + "pendingApproval": "Warten auf Freigabe", + "declined": "Abgelehnt" + } +} diff --git a/public/locales/de/modules/media-requests-stats.json b/public/locales/de/modules/media-requests-stats.json new file mode 100644 index 000000000..d54215f69 --- /dev/null +++ b/public/locales/de/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Statistik der Medienanfragen", + "description": "Statistiken über Ihre Medienanfragen", + "settings": { + "title": "Statistik der Medienanfragen" + } + }, + "stats": { + "pending": "Ausstehende Freigaben", + "tvRequests": "TV-Anfragen", + "movieRequests": "Filmanfragen" + } +} diff --git a/public/locales/de/modules/rss.json b/public/locales/de/modules/rss.json index 3214e802d..553bd143b 100644 --- a/public/locales/de/modules/rss.json +++ b/public/locales/de/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "Einstellungen für das RSS-Widget", "rssFeedUrl": { - "label": "RSS-Feed URL" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "RSS-Feed konnte nicht abgerufen werden", - "text": "Es gab ein Problem beim Erreichen des RSS-Feeds. Vergewissern Sie sich, dass Sie den Feed richtig konfiguriert haben und eine gültige RSS-URL verwenden, die der offiziellen Standardspezifikation entspricht. Nachdem Sie den Feed aktualisiert haben, müssen Sie möglicherweise Ihr Dashboard speichern und die Seite aktualisieren." + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/de/modules/video-stream.json b/public/locales/de/modules/video-stream.json index c5157f1c2..de60fe085 100644 --- a/public/locales/de/modules/video-stream.json +++ b/public/locales/de/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "Einstellungen für das Video Stream Widget", "FeedUrl": { - "label": "Feed URL" + "label": "Feed-URL" }, "autoPlay": { - "label": "Automatisch abspielen" + "label": "Automatische Wiedergabe" }, "muted": { "label": "Audio stummschalten" diff --git a/public/locales/de/settings/customization/general.json b/public/locales/de/settings/customization/general.json index cdf368d82..f04f09478 100644 --- a/public/locales/de/settings/customization/general.json +++ b/public/locales/de/settings/customization/general.json @@ -14,8 +14,8 @@ "description": "Titel, Logo und PWA anpassen" }, "appereance": { - "name": "Erscheinungsbild", - "description": "Anpassen des Hintergrunds, der Farben und des Erscheinungsbilds der Anwendung" + "name": "Aussehen", + "description": "Anpassen des Hintergrunds, der Farben und des Erscheinungsbilds" } } } \ No newline at end of file diff --git a/public/locales/de/settings/customization/page-appearance.json b/public/locales/de/settings/customization/page-appearance.json index 438805ada..123252c7c 100644 --- a/public/locales/de/settings/customization/page-appearance.json +++ b/public/locales/de/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Meta Titel", - "description": "Der Titel, der als Tab-Name angezeigt wird" + "description": "Der in der Registerkarte Ihres Browsers angezeigte Titel" }, "logo": { "label": "Logo", - "description": "Der Logo des Dashboards oben links" + "description": "Das oben links angezeigte Logo" }, "favicon": { "label": "Favicon", - "description": "Das Symbol, das vor dem Namen Ihres Tabs verwendet wird" + "description": "Der in der Registerkarte Ihres Browsers angezeigte Symbol" }, "background": { "label": "Hintergrund" }, "customCSS": { "label": "Benutzerdefiniertes CSS", - "description": "Anpassen aller Elemente auf Ihrem Dashboard, nur für erfahrene Benutzer empfohlen", + "description": "Außerdem können Sie Ihr Dashboard mittels CSS anpassen, dies wird nur für erfahrene Benutzer empfohlen", "placeholder": "Benutzerdefiniertes CSS wird zuletzt angewendet", "applying": "CSS wird übernommen..." }, diff --git a/public/locales/de/widgets/error-boundary.json b/public/locales/de/widgets/error-boundary.json new file mode 100644 index 000000000..76c2c8380 --- /dev/null +++ b/public/locales/de/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ups, ein Fehler ist aufgetreten!", + "buttons": { + "details": "Details", + "tryAgain": "Erneut versuchen" + } + }, + "modal": { + "text": "Wir entschuldigen uns für die Unannehmlichkeit! Das sollte nicht passieren - bitte melde dieses Problem auf GitHub.", + "label": "Dein Fehler", + "reportButton": "Fehler melden" + } +} \ No newline at end of file diff --git a/public/locales/el/common.json b/public/locales/el/common.json index 0b991af90..769edb658 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -9,13 +9,14 @@ "version": "Έκδοση", "changePosition": "Αλλαγή θέσης", "remove": "Αφαίρεση", - "removeConfirm": "Είστε σίγουροι ότι θέλετε να καταργήσετε το {{item}} ;", + "removeConfirm": "", + "createItem": "", "sections": { "settings": "Ρυθμίσεις", "dangerZone": "Επικίνδυνη Περιοχή" }, "secrets": { - "apiKey": "Κλειδί Api", + "apiKey": "", "username": "Όνομα Χρήστη", "password": "Κωδικός" }, diff --git a/public/locales/el/layout/modals/about.json b/public/locales/el/layout/modals/about.json index aae1178db..927b5b23f 100644 --- a/public/locales/el/layout/modals/about.json +++ b/public/locales/el/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Το Homarr είναι ένα κομψό, μοντέρνο ταμπλό που βάζει όλες τις εφαρμογές και τις υπηρεσίες σας στα χέρια σας. Με το Homarr, μπορείτε να έχετε πρόσβαση και να ελέγχετε τα πάντα σε μια βολική τοποθεσία. Το Homarr ενσωματώνεται απρόσκοπτα με τις εφαρμογές που έχετε προσθέσει, παρέχοντάς σας πολύτιμες πληροφορίες και δίνοντάς σας πλήρη έλεγχο. Η εγκατάσταση είναι πανεύκολη και το Homarr υποστηρίζει ένα ευρύ φάσμα μεθόδων ανάπτυξης.", "contact": "Έχετε προβλήματα ή ερωτήσεις; Συνδεθείτε μαζί μας!", "addToDashboard": "Προσθήκη στο ταμπλό", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "", "configurationsCount": "", diff --git a/public/locales/el/layout/modals/add-app.json b/public/locales/el/layout/modals/add-app.json index d959ac22e..30eb2cf2e 100644 --- a/public/locales/el/layout/modals/add-app.json +++ b/public/locales/el/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "Γενικά", - "behaviour": "Συμπεριφορά", + "behaviour": "", "network": "Δίκτυο", "appearance": "Εμφάνιση", "integration": "Ενσωμάτωση" diff --git a/public/locales/el/layout/modals/change-position.json b/public/locales/el/layout/modals/change-position.json index 52619c888..4c2b1819f 100644 --- a/public/locales/el/layout/modals/change-position.json +++ b/public/locales/el/layout/modals/change-position.json @@ -1,8 +1,6 @@ { - "xPosition": "Θέση του άξονα X", "width": "Πλάτος", "height": "Ύψος", - "yPosition": "Θέση του άξονα Y", "zeroOrHigher": "0 ή υψηλότερο", "betweenXandY": "Μεταξύ {min} και {max}" } \ No newline at end of file diff --git a/public/locales/el/modules/common.json b/public/locales/el/modules/common.json index 1919e13df..14a2512d9 100644 --- a/public/locales/el/modules/common.json +++ b/public/locales/el/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Εντοπίστηκε αχρησιμοποίητη παράμετρος στη διαμόρφωση
{{key}}. Το Homarr δεν μπορεί να ερμηνεύσει και να χρησιμοποιήσει αυτή την παράμετρο. Για να αποφύγετε οποιαδήποτε απροσδόκητη συμπεριφορά, δημιουργήστε αντίγραφα ασφαλείας των ρυθμίσεων σας και διορθώστε τις ρυθμίσεις σας." + "text": "" } } } diff --git a/public/locales/el/modules/dashdot.json b/public/locales/el/modules/dashdot.json index 3c235e9a9..60f6c65b5 100644 --- a/public/locales/el/modules/dashdot.json +++ b/public/locales/el/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Εμφανίζει τα γραφήματα μιας εξωτερικής Dash. μέσα στο Homarr.", + "description": "", "settings": { "title": "Ρυθμίσεις για το widget Dash", "url": { @@ -105,7 +105,7 @@ "title": "CPU" }, "ram": { - "title": "Μνήμη RAM" + "title": "" }, "gpu": { "title": "GPU" diff --git a/public/locales/el/modules/media-requests-list.json b/public/locales/el/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/el/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/el/modules/media-requests-stats.json b/public/locales/el/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/el/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/el/modules/ping.json b/public/locales/el/modules/ping.json index 70d316ee2..cb2037b57 100644 --- a/public/locales/el/modules/ping.json +++ b/public/locales/el/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "Εμφανίζει μια ένδειξη κατάστασης ανάλογα με τον κωδικό απόκρισης HTTP μιας δεδομένης διεύθυνσης URL." + "description": "" }, "states": { "online": "Online {{response}}", diff --git a/public/locales/el/modules/rss.json b/public/locales/el/modules/rss.json index 230d75cf5..0ae05342b 100644 --- a/public/locales/el/modules/rss.json +++ b/public/locales/el/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/el/modules/torrents-status.json b/public/locales/el/modules/torrents-status.json index 5411a4b2e..84c33e30d 100644 --- a/public/locales/el/modules/torrents-status.json +++ b/public/locales/el/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Προσθέστε έναν υποστηριζόμενης εφαρμογής Torrent για να δείτε τις τρέχουσες λήψεις σας" }, "generic": { - "title": "Παρουσιάστηκε ένα απροσδόκητο σφάλμα", + "title": "", "text": "Το Homarr δεν μπόρεσε να επικοινωνήσει με τις εφαρμογές Torrent. Ελέγξτε τις ρυθμίσεις σας" } }, diff --git a/public/locales/el/settings/customization/general.json b/public/locales/el/settings/customization/general.json index ee9d30b5a..141f7ff4b 100644 --- a/public/locales/el/settings/customization/general.json +++ b/public/locales/el/settings/customization/general.json @@ -14,7 +14,7 @@ "description": "" }, "appereance": { - "name": "", + "name": "Εμφάνιση", "description": "" } } diff --git a/public/locales/el/settings/general/config-changer.json b/public/locales/el/settings/general/config-changer.json index 4fe61e49c..628e70e6e 100644 --- a/public/locales/el/settings/general/config-changer.json +++ b/public/locales/el/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "Επιβεβαιώστε τη διαγραφή της διαμόρφωσής σας", - "warningText": "Πρόκειται να διαγράψετε το '{{configName}}'", - "text": "Λάβετε υπόψη ότι η διαγραφή δεν είναι αναστρέψιμη και τα δεδομένα σας θα χαθούν οριστικά. Αφού κάνετε κλικ σε αυτό το κουμπί, το αρχείο θα διαγραφεί οριστικά από το δίσκο σας. Φροντίστε να δημιουργήσετε ένα επαρκές αντίγραφο ασφαλείας της διαμόρφωσής σας.", + "warningText": "", + "text": "", "buttons": { "confirm": "Ναι, διαγράψτε το '{{configName}}'" } @@ -57,7 +57,7 @@ "message": "Η διαγραφή ρυθμίσεων απέτυχε" }, "deleteFailedDefaultConfig": { - "title": "Η προεπιλεγμένη ρύθμιση παραμέτρων δεν μπορεί να διαγραφεί", + "title": "", "message": "Η διαμόρφωση δεν διαγράφηκε από το σύστημα αρχείων" } } diff --git a/public/locales/el/settings/general/search-engine.json b/public/locales/el/settings/general/search-engine.json index f3915a4d1..1d6a3e30e 100644 --- a/public/locales/el/settings/general/search-engine.json +++ b/public/locales/el/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Μηχανή αναζήτησης", "configurationName": "Διαμόρφωση μηχανής αναζήτησης", "tips": { - "generalTip": "Υπάρχουν πολλά προθέματα που μπορείτε να χρησιμοποιήσετε! Προσθέτοντας αυτά μπροστά από το ερώτημά σας θα φιλτράρετε τα αποτελέσματα. !s (Web), !t (Torrents), !y (YouTube) και !m (Media).", + "generalTip": "", "placeholderTip": "%s μπορεί να χρησιμοποιηθεί ως placeholder για το ερώτημα." }, "customEngine": { diff --git a/public/locales/el/widgets/error-boundary.json b/public/locales/el/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/el/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/en/layout/modals/add-app.json b/public/locales/en/layout/modals/add-app.json index 0ca231eb0..dfb741832 100644 --- a/public/locales/en/layout/modals/add-app.json +++ b/public/locales/en/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "App Icon", - "description": "Choose a an icon to be displayed on your dashboard. Choose from {{suggestionsCount}} icons or enter your own URL", + "description": "Choose an icon to be displayed on your dashboard. Choose from {{suggestionsCount}} icons or enter your own URL", "autocomplete": { "title": "No results found", "text": "Try to use a more specific search term. If you can't find your desired icon, paste the image URL above for a custom icon" diff --git a/public/locales/en/modules/common.json b/public/locales/en/modules/common.json index 485d7e8fb..0786350ff 100644 --- a/public/locales/en/modules/common.json +++ b/public/locales/en/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Unused parameter in configuration detected
{{key}}. Homarr is unable to interpret and use this parameter. To avoid any unexpected behavior, back up your configuration and correct your configuration." + "text": "Unused parameter in configuration detected
{{key}}. Homarr is unable to interpret and use this parameter. To avoid any unexpected behavior, back up and correct your configuration." } } } diff --git a/public/locales/en/modules/iframe.json b/public/locales/en/modules/iframe.json index 9cd27d2a3..0c1d70e03 100644 --- a/public/locales/en/modules/iframe.json +++ b/public/locales/en/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Enter an URL", + "title": "Enter a URL", "text": "Ensure that you've entered a valid address in the configuration of your widget" } } diff --git a/public/locales/en/modules/rss.json b/public/locales/en/modules/rss.json index 3c50414d2..8e61c408c 100644 --- a/public/locales/en/modules/rss.json +++ b/public/locales/en/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "RSS Widget", - "description": "Grabs the items from a RSS feed and displays them. Commonly used for online news", + "description": "Grabs the items from an RSS feed and displays them. Commonly used for online news", "settings": { "title": "Settings for RSS widget", "rssFeedUrl": { diff --git a/public/locales/en/widgets/error-boundary.json b/public/locales/en/widgets/error-boundary.json index 9b75f4080..73fbb90b4 100644 --- a/public/locales/en/widgets/error-boundary.json +++ b/public/locales/en/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "We're sorry for the inconvinience! This shouln't happen - please report this issue on GitHub.", + "text": "We're sorry for the inconvenience! This shouldn't happen - please report this issue on GitHub.", "label": "Your error", "reportButton": "Report this error" } diff --git a/public/locales/es/common.json b/public/locales/es/common.json index f60e3c052..a0ad63e97 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -9,7 +9,8 @@ "version": "Versión", "changePosition": "Cambiar posición", "remove": "Eliminar", - "removeConfirm": "Seguro que quieres eliminar {{item}} ?", + "removeConfirm": "¿Seguro que quieres eliminar {{item}}?", + "createItem": "+ create {{item}}", "sections": { "settings": "Ajustes", "dangerZone": "Zona de riesgo" diff --git a/public/locales/es/layout/modals/about.json b/public/locales/es/layout/modals/about.json index b7dc308ef..7e21c89c4 100644 --- a/public/locales/es/layout/modals/about.json +++ b/public/locales/es/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr es un dashboard elegante y moderno que pone todas tus apps y servicios a tu alcance. Con Homarr, puedes acceder y controlar todo desde una sola ubicación. Homarr se integra a la perfección con las apps que hayas añadido, ofreciendote información valiosa y dándote control total. La instalación es muy sencilla, y Homarr soporta una amplia gama de métodos de implementación.", "contact": "¿Tienes problemas o preguntas? ¡Conéctate con nosotros!", "addToDashboard": "Añadir al Dashboard", + "tip": "Mod se refiere a tu tecla modificadora, es Ctrl y tecla Command/Super/Windows", + "key": "Tecla de acceso directo", + "action": "Acción", + "keybinds": "Combinaciones de teclas", "metrics": { "configurationSchemaVersion": "Versión del esquema de configuración", "configurationsCount": "Configuraciones disponibles", diff --git a/public/locales/es/modules/common.json b/public/locales/es/modules/common.json index 0abd1940f..56710d392 100644 --- a/public/locales/es/modules/common.json +++ b/public/locales/es/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Parámetro sin uso detectado en la configuración
{{key}}. Homarr no puede interpretar y usar este parámetro. Para evitar cualquier comportamiento inesperado, respalda tu configuración y corrige tus ajustes." + "text": "Parámetro en desuso detectado en la configuración
{{key}}. Homarr es incapaz de interpretar y usar dicho parámetro. Para evitar un comportamiento inesperado, respalda y corríge tu configuración." } } } diff --git a/public/locales/es/modules/dashdot.json b/public/locales/es/modules/dashdot.json index ee2cd2bb0..1686364ec 100644 --- a/public/locales/es/modules/dashdot.json +++ b/public/locales/es/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Muestra los gráficos de una instancia de Dash. externa, dentro de Homarr.", + "description": "Mostrar los gráficos de una instancia Dash. externa en Homarr.", "settings": { "title": "Ajustes para el widget Dash.", "url": { @@ -85,7 +85,7 @@ "noInformation": "No se puede obtener información de Dash. - ¿estás utilizando la última versión?", "protocolDowngrade": { "title": "Degradación de protocolo detectada", - "text": "El protocolo de tu instancia Dash. está siendo degradado. Esto es un riesgo de seguridad, debido a que HTTP no está cifrado, y los atacantes pueden abusar de esta conexión. Asegúrate de que Dash. esté ejecutándo en HTTPS también, o degrada Homarr a HTTP (no recomendado)." + "text": "La conexión a tu instancia Dash. se realiza por HTTP. Esto es un riesgo de seguridad, debido a que HTTP no está encriptado, y los atacantes podrían abusar de esta conexión. Asegúrate de que Dash. esté usando HTTPS, or degrada Homarr a HTTP (no recomendado)." } }, "graphs": { diff --git a/public/locales/es/modules/iframe.json b/public/locales/es/modules/iframe.json index e864015ae..108fa1f91 100644 --- a/public/locales/es/modules/iframe.json +++ b/public/locales/es/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "Incrustar cualquier contenido de Internet. Algunos sitios web pueden restringir el acceso.", "settings": { - "title": "Ajustes de IFrame", + "title": "Ajustes de iFrime", "embedUrl": { "label": "URL incrustada" }, diff --git a/public/locales/es/modules/media-requests-list.json b/public/locales/es/modules/media-requests-list.json new file mode 100644 index 000000000..5f734dce5 --- /dev/null +++ b/public/locales/es/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Peticiones de contenido", + "description": "Mostrar una lista de todas las peticiones de contenido de tu instancia Overseerr o Jellyseerr", + "settings": { + "title": "Lista de peticiones de contenido" + } + }, + "noRequests": "Peticiones no encontradas. Por favor, asegúrate de tener configuradas tus apps correctamente.", + "pending": "Hay {countPendingApproval} peticiones esperando a ser aprobadas.", + "nonePending": "Actualmente no hay aprobaciones pendientes. ¡Listo!", + "state": { + "approved": "Aprobado", + "pendingApproval": "Aprobación pendiente", + "declined": "Rechazado" + } +} diff --git a/public/locales/es/modules/media-requests-stats.json b/public/locales/es/modules/media-requests-stats.json new file mode 100644 index 000000000..dc2a7455b --- /dev/null +++ b/public/locales/es/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Estadísticas de petición de contenido", + "description": "Estadísticas de tus peticiones de contenido", + "settings": { + "title": "Estadísticas de peticiones de contenido" + } + }, + "stats": { + "pending": "Aprobaciones pendientes", + "tvRequests": "Solicitudes de TV", + "movieRequests": "Solicitudes de películas" + } +} diff --git a/public/locales/es/modules/ping.json b/public/locales/es/modules/ping.json index feb6ce1a4..35ed5754a 100644 --- a/public/locales/es/modules/ping.json +++ b/public/locales/es/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Latencia", - "description": "Muestra un indicador de estado dependiendo del código de respuesta HTTP the la URL." + "description": "Mostrar un indicador de estado dependiendo del código de respuesta HTTP de una URL dada." }, "states": { "online": "En línea {{response}}", diff --git a/public/locales/es/modules/rss.json b/public/locales/es/modules/rss.json index 190f19072..595c2c56b 100644 --- a/public/locales/es/modules/rss.json +++ b/public/locales/es/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "Ajustes para el widget RSS", "rssFeedUrl": { - "label": "url de la fuente RSS" + "label": "URLs de fuentes RSS", + "description": "Las URLs de las fuentes RSS desde las que deseas mostrar." + }, + "refreshInterval": { + "label": "Intervalo de refresco (en minutos)" } - } - }, - "card": { - "errors": { - "general": { - "title": "Imposible recuperar la fuente RSS", - "text": "Hubo un problema al comunicarse con la fuente RSS. Asegúrate de haber configurado el feed correctamente y utiliza una URL de RSS válida que coincida con la especificación estándar oficial. Después de actualizar el feed, es posible que debas guardar tu dashboard y actualizar la página." + }, + "card": { + "errors": { + "general": { + "title": "Imposible recuperar la fuente RSS", + "text": "Hubo un problema al llegar a la fuente RSS. Asegúrate de haber configurado correctamente la fuente RSS utilizando una URL válida. Las URL deben coincidir con la especificación oficial. Después de actualizar la fuente, es posible que debas actualizar el dashboard." + } } } } diff --git a/public/locales/es/modules/torrents-status.json b/public/locales/es/modules/torrents-status.json index a1ae83d34..58b065749 100644 --- a/public/locales/es/modules/torrents-status.json +++ b/public/locales/es/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Añadir un cliente Torrent soportado para ver tus descargas actuales" }, "generic": { - "title": "Ocurrió un error inesperado", + "title": "Un error inesperado ha ocurrido", "text": "Homarr fue incapaz de comunicarse con tus clientes Torrent. Por favor, comprueba tu configuración" } }, diff --git a/public/locales/es/modules/video-stream.json b/public/locales/es/modules/video-stream.json index 13adf6ab9..d7d971851 100644 --- a/public/locales/es/modules/video-stream.json +++ b/public/locales/es/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "Ajustes del widget de transmisión de video", "FeedUrl": { - "label": "Feed url" + "label": "Fuente URL" }, "autoPlay": { - "label": "Auto-reproducción" + "label": "Auto reproducción" }, "muted": { "label": "Audio silenciado" diff --git a/public/locales/es/settings/customization/general.json b/public/locales/es/settings/customization/general.json index 40c675e83..d5fb72a39 100644 --- a/public/locales/es/settings/customization/general.json +++ b/public/locales/es/settings/customization/general.json @@ -15,7 +15,7 @@ }, "appereance": { "name": "Apariencia", - "description": "Personalizar la apariencia del fondo, colores y apps" + "description": "Personaliza el fondo, colores y apariencia de las apps" } } } \ No newline at end of file diff --git a/public/locales/es/settings/customization/page-appearance.json b/public/locales/es/settings/customization/page-appearance.json index effb9c38f..a1e16c02e 100644 --- a/public/locales/es/settings/customization/page-appearance.json +++ b/public/locales/es/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Tarjeta Meta", - "description": "El título, que se muestra como el nombre de tu pestaña" + "description": "El título mostrado en la pestaña de tu navegador" }, "logo": { "label": "Logo", - "description": "El logo del dashboard en la parte superior izquierda" + "description": "El logo mostrado en la parte superior izquierda" }, "favicon": { "label": "Favicon", - "description": "El icono, que se usa delante del nombre de la pestaña" + "description": "El icono mostrado en la pestaña de tu navegador" }, "background": { "label": "Fondo" }, "customCSS": { "label": "CSS Personalizado", - "description": "Personalizar todos los elementos de tu dashboard, solo recomendado para usuarios experimentados", + "description": "Ademas, personaliza tu dashboard usando CSS, solo recomendado para usuarios avanzados", "placeholder": "El CSS personalizado será aplicado en último lugar", "applying": "Aplicando CSS..." }, diff --git a/public/locales/es/settings/general/config-changer.json b/public/locales/es/settings/general/config-changer.json index 7f3e469b6..980d7ac39 100644 --- a/public/locales/es/settings/general/config-changer.json +++ b/public/locales/es/settings/general/config-changer.json @@ -37,7 +37,7 @@ "confirmDeletion": { "title": "Confirmar eliminación de tu configuración", "warningText": "Estás a punto de eliminar '{{configName}}'", - "text": "Por favor, ten en cuenta que la eliminación no es reversible y tus datos serán borrados indefinidamente. Después de hacer clic en el botón, el archivo será eliminado permanentemente del disco. Asegúrate de crear un respaldo adecuado de tu configuración.", + "text": "Por favor, ten en cuenta que la eliminación no es reversible, y tus datos serán perdidos permanentemente. Al presionar el botón, el archivo será eliminado permanentemente del disco. Asegúrate de crear un respaldo adecuado de tu configuración.", "buttons": { "confirm": "Si, eliminar '{{configName}}'" } diff --git a/public/locales/es/settings/general/search-engine.json b/public/locales/es/settings/general/search-engine.json index 17ddbb1fd..395f6248e 100644 --- a/public/locales/es/settings/general/search-engine.json +++ b/public/locales/es/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Motor de búsqueda", "configurationName": "Configuración del motor de búsqueda", "tips": { - "generalTip": "¡Hay múltiples prefijos que puedes usar! Añadiendo éstos delante de tu búsqueda, filtrará los resultados. !s (Web), !t (Torrents), !y (YouTube), y !m (Media).", + "generalTip": "¡Hay múltiples prefijos que puedes usar! Añadiéndolos delante de tus consultas, filtrarán los resultados. !s (Web), !t (Torrents), !y (YouTube), and !m (Media).", "placeholderTip": "%s puede utilizarse como modelo para la petición." }, "customEngine": { diff --git a/public/locales/es/widgets/error-boundary.json b/public/locales/es/widgets/error-boundary.json new file mode 100644 index 000000000..d7b824172 --- /dev/null +++ b/public/locales/es/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ups, ¡hubo un error!", + "buttons": { + "details": "Detalles", + "tryAgain": "Intentar de nuevo" + } + }, + "modal": { + "text": "¡Sentimos los inconvenientes! Esto no debió de haber pasado - por favor, repórtalo en Github.", + "label": "Tu error", + "reportButton": "Reportar este error" + } +} \ No newline at end of file diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index a9dd4fc91..c8b240e10 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -10,12 +10,13 @@ "changePosition": "Modifier la position", "remove": "Supprimer", "removeConfirm": "Êtes-vous sûr de vouloir supprimer {{item}} ?", + "createItem": "", "sections": { "settings": "Paramètres", "dangerZone": "Zone de danger" }, "secrets": { - "apiKey": "Clé d'API", + "apiKey": "Clé API", "username": "Nom d'utilisateur", "password": "Mot de passe" }, diff --git a/public/locales/fr/layout/modals/about.json b/public/locales/fr/layout/modals/about.json index 768c723d4..5e0e635ab 100644 --- a/public/locales/fr/layout/modals/about.json +++ b/public/locales/fr/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr est un tableau de bord élégant, moderne qui met toutes vos applications et services au bout de vos doigts. Avec Homarr, vous pouvez accéder et contrôler tout dans un seul endroit. Homarr s'intègre de façon transparente avec les applications que vous avez ajoutées, vous fournissant des informations précieuses et vous donnant un contrôle total. L'installation est un jeu d'enfant, et Homarr prend en charge un large éventail de méthodes de déploiement.", "contact": "Vous avez des problèmes ou des questions ? Dites-le-nous !", "addToDashboard": "Ajouter au tableau de bord", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "Version de schéma de configuration", "configurationsCount": "Configurations disponibles", diff --git a/public/locales/fr/layout/modals/add-app.json b/public/locales/fr/layout/modals/add-app.json index a79f70f53..5a1a3994e 100644 --- a/public/locales/fr/layout/modals/add-app.json +++ b/public/locales/fr/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "Général", - "behaviour": "Comportement", + "behaviour": "", "network": "Réseau", "appearance": "Apparence", "integration": "Intégration" @@ -39,14 +39,14 @@ "appearance": { "icon": { "label": "Icône de l’app", - "description": "", + "description": "Choisissez une icône à afficher sur votre tableau de bord. Choisissez parmi les icônes de {{suggestionsCount}} ou entrez votre propre URL", "autocomplete": { - "title": "", - "text": "" + "title": "Aucun résultat trouvé", + "text": "Essayez d'utiliser un terme de recherche plus spécifique. Si vous ne trouvez pas l'icône souhaitée, collez l'URL de l'image ci-dessus pour obtenir une icône personnalisée" }, "noItems": { "title": "", - "text": "" + "text": "Cela peut prendre quelques secondes" } } }, diff --git a/public/locales/fr/layout/modals/change-position.json b/public/locales/fr/layout/modals/change-position.json index 4e1016a5f..dcca37c0b 100644 --- a/public/locales/fr/layout/modals/change-position.json +++ b/public/locales/fr/layout/modals/change-position.json @@ -1,8 +1,6 @@ { - "xPosition": "Position sur l'axe X", "width": "Largeur", "height": "Hauteur", - "yPosition": "Position sur l'axe X", "zeroOrHigher": "0 ou plus", "betweenXandY": "Entre {{min}} et {{max}}" } \ No newline at end of file diff --git a/public/locales/fr/modules/common.json b/public/locales/fr/modules/common.json index cc7a46382..ce050fe42 100644 --- a/public/locales/fr/modules/common.json +++ b/public/locales/fr/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Un paramètre non utilisé dans votre configuration a été détectée
{{key}}. Homarr est incapable d'interpréter et d'utiliser ce paramètre. Pour éviter tout comportement inattendu, sauvegardez votre configuration et corrigez-la." + "text": "" } } } diff --git a/public/locales/fr/modules/dashdot.json b/public/locales/fr/modules/dashdot.json index 84d05bff0..7d2b78a53 100644 --- a/public/locales/fr/modules/dashdot.json +++ b/public/locales/fr/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Affiche les graphiques d'une instance externe de Dash. dans Homarr.", + "description": "", "settings": { "title": "Paramètres du widget Dash", "url": { @@ -85,7 +85,7 @@ "noInformation": "Impossible d'acquérir des informations de Dash. - Utilisez-vous la dernière version ?", "protocolDowngrade": { "title": "Protocole rétrograde détecté (HTTP)", - "text": "Le protocole vers votre instance de Dash. n'est pas en mode sécurisé. Ceci est considéré comme étant un risque de sécurité, puisque HTTP ne supporte pas l'encryption, et des attaquants pourraient en abuser. Assurez-vous que Dash. fonctionne en mode HTTPS, ou retirez le mode HTTPS de Homarr (pas recommandé)." + "text": "" } }, "graphs": { diff --git a/public/locales/fr/modules/media-requests-list.json b/public/locales/fr/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/fr/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/fr/modules/media-requests-stats.json b/public/locales/fr/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/fr/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/fr/modules/ping.json b/public/locales/fr/modules/ping.json index 23cb2081e..d9317be27 100644 --- a/public/locales/fr/modules/ping.json +++ b/public/locales/fr/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "Affiche un indicateur d'état en fonction du code de réponse HTTP d'une URL donnée." + "description": "" }, "states": { "online": "En ligne {{response}}", diff --git a/public/locales/fr/modules/rss.json b/public/locales/fr/modules/rss.json index 438b3cb3e..d766e44a1 100644 --- a/public/locales/fr/modules/rss.json +++ b/public/locales/fr/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "", "rssFeedUrl": { - "label": "URL du flux RSS" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "Impossible de récupérer le flux RSS", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/fr/modules/torrents-status.json b/public/locales/fr/modules/torrents-status.json index 02859b043..5163240cc 100644 --- a/public/locales/fr/modules/torrents-status.json +++ b/public/locales/fr/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Ajouter un client Torrent pris en charge pour voir vos téléchargements en cours" }, "generic": { - "title": "Une erreur inattendue s'est produite", + "title": "", "text": "Homarr n'a pas pu communiquer avec vos clients Torrent. Veuillez vérifier votre configuration" } }, diff --git a/public/locales/fr/settings/customization/general.json b/public/locales/fr/settings/customization/general.json index e35622f92..5f940b4ff 100644 --- a/public/locales/fr/settings/customization/general.json +++ b/public/locales/fr/settings/customization/general.json @@ -15,7 +15,7 @@ }, "appereance": { "name": "Apparence", - "description": "Personnalisez l'arrière-plan, les couleurs et l'apparence des applications" + "description": "" } } } \ No newline at end of file diff --git a/public/locales/fr/settings/customization/page-appearance.json b/public/locales/fr/settings/customization/page-appearance.json index 465cf0a01..f56c44043 100644 --- a/public/locales/fr/settings/customization/page-appearance.json +++ b/public/locales/fr/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Titre Méta", - "description": "Le titre qui est affiché comme nom d'onglet" + "description": "Le titre affiché dans l'onglet de votre navigateur" }, "logo": { "label": "Logo", - "description": "Le logo du tableau de bord en haut à gauche" + "description": "Le logo affiché en haut à gauche" }, "favicon": { "label": "Favicon", - "description": "L'icône qui est utilisé devant le nom de votre onglet" + "description": "L'icône affichée dans l'onglet de votre navigateur" }, "background": { "label": "Fond" }, "customCSS": { "label": "CSS personnalisé", - "description": "Personnaliser tous les éléments du tableau de bord, recommandé seulement pour les utilisateurs expérimentés", + "description": "", "placeholder": "Le CSS personnalisé sera appliqué en dernier", "applying": "Application du code CSS..." }, diff --git a/public/locales/fr/settings/general/search-engine.json b/public/locales/fr/settings/general/search-engine.json index ba73acb6d..7983e4ebb 100644 --- a/public/locales/fr/settings/general/search-engine.json +++ b/public/locales/fr/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Moteur de recherche", "configurationName": "Configuration du moteur de recherche", "tips": { - "generalTip": "Il existe plusieurs préfixes que vous pouvez utiliser ! L'ajout de ces préfixes devant votre requête filtrera les résultats. !s (Web), !t (Torrents), !y (YouTube), et !m (Media).", + "generalTip": "Vous pouvez utiliser plusieurs préfixes ! L'ajout de ces préfixes devant votre requête filtrera les résultats. !s (Web), !t (Torrents), !y (YouTube), et !m (Media).", "placeholderTip": "%s peut être utilisé en tant que placeholder pour la requête." }, "customEngine": { diff --git a/public/locales/fr/widgets/error-boundary.json b/public/locales/fr/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/fr/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/he/common.json b/public/locales/he/common.json index e9456d210..7942b01fb 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -9,7 +9,8 @@ "version": "גרסה", "changePosition": "שנה מיקום", "remove": "הסר", - "removeConfirm": "האם אתה בטוח שברצונך להסיר את {{item}} ?", + "removeConfirm": "האם אתה בטוח שברצונך להסיר את {{item}}?", + "createItem": "יצירת שאילתה {{item}}", "sections": { "settings": "הגדרות", "dangerZone": "אזור מסוכן" diff --git a/public/locales/he/layout/modals/about.json b/public/locales/he/layout/modals/about.json index 0695094f3..8540d79f7 100644 --- a/public/locales/he/layout/modals/about.json +++ b/public/locales/he/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr הוא לוח מחוונים אלגנטי, מודרני, אשר שם את כל האפליקציות והשירותים בהישג יד. עם Homarr, ניתן לגשת לכל דבר ולשלוט בו במיקום נוח אחד. Homarr משתלב בצורה חלקה עם האפליקציות, מספק מידע רב ערך ונותן שליטה מלאה. ההתקנה היא קלה ותומכת במגוון רחב של שיטות פריסה.", "contact": "נתקלת בבעיות או בשאלות? צור איתנו קשר!", "addToDashboard": "הוספה ללוח מחוונים", + "tip": "מוד מתייחס למקש השינוי שלך, זהו מקש Ctrl ומקש Command/Super/Windows", + "key": "מקש קיצור", + "action": "פעולה", + "keybinds": "שילוב מקשים", "metrics": { "configurationSchemaVersion": "גירסת סכימת תצורה", "configurationsCount": "תצורות זמינות", diff --git a/public/locales/he/modules/dashdot.json b/public/locales/he/modules/dashdot.json index b3060ef2c..6ca24a9df 100644 --- a/public/locales/he/modules/dashdot.json +++ b/public/locales/he/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "מציג נתוני גרפים.", + "description": "מציג מופעי נתוני גרפים מ- Dash בתוך Homarr.", "settings": { "title": "הגדרות עבור וידג׳ט Dash.", "url": { diff --git a/public/locales/he/modules/iframe.json b/public/locales/he/modules/iframe.json index edecc4ce8..817fcd2c6 100644 --- a/public/locales/he/modules/iframe.json +++ b/public/locales/he/modules/iframe.json @@ -1,6 +1,6 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "הטמע כל תוכן מהאינטרנט. חלק מהאתרים עשויים להגביל את הגישה.", "settings": { "title": "הגדרות IFrame", diff --git a/public/locales/he/modules/media-requests-list.json b/public/locales/he/modules/media-requests-list.json new file mode 100644 index 000000000..e36207b78 --- /dev/null +++ b/public/locales/he/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "בקשות מדיה", + "description": "ראה רשימה של כל בקשות המדיה ממופע Overseerr או Jellyseerr שלך", + "settings": { + "title": "רשימת בקשות מדיה" + } + }, + "noRequests": "לא נמצאו בקשות. אנא ודא שהגדרת את האפליקציות שלך כנדרש.", + "pending": "יש {countPendingApproval} בקשות הממתינות לאישור.", + "nonePending": "אין כרגע אישורים ממתינים. ניתן להמשיך!", + "state": { + "approved": "אושר", + "pendingApproval": "ממתין לאישור", + "declined": "נדחה" + } +} diff --git a/public/locales/he/modules/media-requests-stats.json b/public/locales/he/modules/media-requests-stats.json new file mode 100644 index 000000000..07644a76a --- /dev/null +++ b/public/locales/he/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "מצב בקשות מדיה", + "description": "סטטיסטיקה לגבי בקשות המדיה", + "settings": { + "title": "מצב בקשות מדיה" + } + }, + "stats": { + "pending": "ממתין לאישור", + "tvRequests": "בקשות סדרות", + "movieRequests": "בקשות סרטים" + } +} diff --git a/public/locales/he/modules/rss.json b/public/locales/he/modules/rss.json index b1b9c9dad..8c88666f7 100644 --- a/public/locales/he/modules/rss.json +++ b/public/locales/he/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "הגדרות עבור וידג׳ט רסס", "rssFeedUrl": { - "label": "כתובת אינטרנט להזנת רסס" + "label": "כתובת אינטרנט להזנת רסס", + "description": "כתובות האתרים של הזנות רסס שמהן ברצונך להציג." + }, + "refreshInterval": { + "label": "מרווח הזמן לרענון (בשניות)" } - } - }, - "card": { - "errors": { - "general": { - "title": "לא ניתן לאחזר עדכוני רסס", - "text": "הייתה בעיה ביצירת קשר עם עדכון רסס. ודא שהגדרת בצורה נכונה והשתמש בכתובת אינטרנט חוקית של רסס, התואמת למפרט הסטנדרטי הרשמי. לאחר עדכון כתובת ההזנה, ייתכן שיהיה עליך לבצע שמירה ולרענן את הדף." + }, + "card": { + "errors": { + "general": { + "title": "לא ניתן לאחזר עדכוני רסס", + "text": "הייתה בעיה ביצירת קשר עם עדכון רסס. ודא שהגדרת בצורה נכונה והשתמש בכתובת אינטרנט חוקית של רסס, התואמת למפרט הסטנדרטי הרשמי. לאחר עדכון כתובת ההזנה, ייתכן שיהיה עליך לבצע שמירה ולרענן את הדף." + } } } } diff --git a/public/locales/he/modules/video-stream.json b/public/locales/he/modules/video-stream.json index cadc51f45..3c2426b80 100644 --- a/public/locales/he/modules/video-stream.json +++ b/public/locales/he/modules/video-stream.json @@ -5,7 +5,7 @@ "settings": { "title": "הגדרות עבור ווידג'ט זרם וידאו", "FeedUrl": { - "label": "כתובת אתר הזנה" + "label": "כתובת הזנה" }, "autoPlay": { "label": "הפעלה אוטומטית" diff --git a/public/locales/he/settings/customization/general.json b/public/locales/he/settings/customization/general.json index 7c36fb976..2d9bec07f 100644 --- a/public/locales/he/settings/customization/general.json +++ b/public/locales/he/settings/customization/general.json @@ -14,7 +14,7 @@ "description": "התאם כותרות, לוגו ו-PWA" }, "appereance": { - "name": "מראה חיצוני", + "name": "מראה", "description": "התאם אישית את הרקע, הצבעים ומראה האפליקציות" } } diff --git a/public/locales/he/settings/customization/page-appearance.json b/public/locales/he/settings/customization/page-appearance.json index 84310ae54..6a5d16b4f 100644 --- a/public/locales/he/settings/customization/page-appearance.json +++ b/public/locales/he/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "כותרת דף", - "description": "הכותרת, שמוצגת כשם הכרטיסייה שלך" + "description": "הכותרת המוצגת בלשונית הדפדפן שלך" }, "logo": { "label": "סמל", - "description": "הלוגו של לוח המחוונים בצד שמאל למעלה" + "description": "הלוגו מוצג בצד שמאל למעלה" }, "favicon": { "label": "אייקון לצד שם הדף", - "description": "הסמל שנמצא בשימוש מול שם הכרטיסייה שלך" + "description": "הכותרת המוצגת בלשונית הדפדפן שלך" }, "background": { "label": "רקע" }, "customCSS": { "label": "CSS מותאם אישית", - "description": "התאם אישית את כל הרכיבים בלוח המחוונים שלך, מומלץ רק למשתמשים מנוסים", + "description": "יתר על כן, התאם את לוח המחוונים שלך באמצעות CSS, מומלץ רק למשתמשים מנוסים", "placeholder": "CSS מותאם אישית יוחל אחרון", "applying": "מחיל CSS..." }, diff --git a/public/locales/he/widgets/error-boundary.json b/public/locales/he/widgets/error-boundary.json new file mode 100644 index 000000000..001a87d17 --- /dev/null +++ b/public/locales/he/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "אופס, אירעה שגיאה!", + "buttons": { + "details": "פרטים", + "tryAgain": "נא לנסות שוב" + } + }, + "modal": { + "text": "אנו מצטערים על אי הנוחות! זה לא אמור לקרות - אנא דווח על בעיה זו ב-GitHub.", + "label": "השגיאה שלך", + "reportButton": "דווח על שגיאה זו" + } +} \ No newline at end of file diff --git a/public/locales/it/common.json b/public/locales/it/common.json index e526d7c4e..624343aac 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -10,6 +10,7 @@ "changePosition": "Cambia posizione", "remove": "Rimuovi", "removeConfirm": "Siete sicuri di voler rimuovere {{item}}?", + "createItem": "+ crea {{item}}", "sections": { "settings": "Impostazioni", "dangerZone": "Danger zone" diff --git a/public/locales/it/layout/modals/about.json b/public/locales/it/layout/modals/about.json index 5dd63da61..06413745e 100644 --- a/public/locales/it/layout/modals/about.json +++ b/public/locales/it/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr è una elegante e moderna dashboard che mette tutte le vostre app e i vostri servizi a portata di mano. Con Homarr, potete controllare tutto in un'unica comoda posizione. Homarr si integra perfettamente con le app aggiunte, fornendo informazioni preziose e offrendo un controllo completo. L'installazione è semplice e Homarr supporta un'ampia gamma di metodi di deployment.", "contact": "Problemi o domande? Contattaci!", "addToDashboard": "Aggiungi alla dashboard", + "tip": "Mod si riferisce al tasto modificatore, cioè i tasti Ctrl e Command/Super/Windows", + "key": "Tasto di scelta rapida", + "action": "Azioni", + "keybinds": "Scorciatoie da tastiera", "metrics": { "configurationSchemaVersion": "Versione dello schema di configurazione", "configurationsCount": "Configurazioni disponibili", @@ -9,6 +13,6 @@ "nodeEnvironment": "Ambiente Node", "i18n": "Translation namespaces I18n caricati", "locales": "I18n locales configurati", - "experimental_disableEditMode": "" + "experimental_disableEditMode": "SPERIMENTALE: Disabilita l'edit mode" } } \ No newline at end of file diff --git a/public/locales/it/modules/dashdot.json b/public/locales/it/modules/dashdot.json index 0bdba2d02..69ee1ff84 100644 --- a/public/locales/it/modules/dashdot.json +++ b/public/locales/it/modules/dashdot.json @@ -85,7 +85,7 @@ "noInformation": "Impossibile reperire informazioni da dash. - è in esecuzione l'ultima versione?", "protocolDowngrade": { "title": "Rilevato downgrade del protocollo", - "text": "Il protocollo all'istanza Dash. è in fase di downgrade. Questo è un rischio per la sicurezza, poiché HTTP non è crittografato e gli aggressori potrebbero abusare di questa connessione. Assicurarsi che Dash. sia in esecuzione anche su HTTPS o fare il downgrade di Homarr su HTTP (non consigliato)." + "text": "La connessione all'istanza di Dash. utilizza HTTP. Questo è un rischio per la sicurezza, poiché l'HTTP non è criptato e gli aggressori potrebbero abusare di questa connessione. Assicurarsi che Dash. utilizzi HTTPS o declassare Homarr a HTTP (non consigliato)." } }, "graphs": { diff --git a/public/locales/it/modules/iframe.json b/public/locales/it/modules/iframe.json index 2083273f6..8d3888534 100644 --- a/public/locales/it/modules/iframe.json +++ b/public/locales/it/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "Incorpora qualsiasi contenuto da Internet. Alcuni siti web possono limitare l'accesso.", "settings": { - "title": "Impostazioni IFrame", + "title": "Impostazioni iFrame", "embedUrl": { "label": "Incorpora URL" }, diff --git a/public/locales/it/modules/media-requests-list.json b/public/locales/it/modules/media-requests-list.json new file mode 100644 index 000000000..da452e2d8 --- /dev/null +++ b/public/locales/it/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Richieste Media", + "description": "Vedi un elenco di tutte le richieste multimediali dalla tua istanza Overseerr o Jellyseerr", + "settings": { + "title": "Elenco richieste multimediali" + } + }, + "noRequests": "Nessuna richiesta trovata. Assicurati di aver configurato correttamente le tue app.", + "pending": "Ci sono {countPendingApproval} richieste in attesa di approvazione.", + "nonePending": "Al momento non ci sono approvazioni in attesa. È tutto pronto!", + "state": { + "approved": "Approvato", + "pendingApproval": "In attesa di approvazione", + "declined": "Rifiutato" + } +} diff --git a/public/locales/it/modules/media-requests-stats.json b/public/locales/it/modules/media-requests-stats.json new file mode 100644 index 000000000..50e8f8119 --- /dev/null +++ b/public/locales/it/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Statistiche richiesta multimediale", + "description": "Statistiche sulle richieste multimediali", + "settings": { + "title": "Statistiche richieste multimediali" + } + }, + "stats": { + "pending": "In attesa di approvazione", + "tvRequests": "Richieste TV", + "movieRequests": "Richieste film" + } +} diff --git a/public/locales/it/modules/rss.json b/public/locales/it/modules/rss.json index dd5023117..ba247b73b 100644 --- a/public/locales/it/modules/rss.json +++ b/public/locales/it/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "Impostazioni del widget RSS", "rssFeedUrl": { - "label": "RSS feed url" + "label": "RSS feed url", + "description": "Gli url dei feed RSS che si desidera visualizzare." + }, + "refreshInterval": { + "label": "Intervallo di aggiornamento (in secondi)" } - } - }, - "card": { - "errors": { - "general": { - "title": "Impossibile recuperare il feed RSS", - "text": "Si è verificato un problema nel raggiungere il feed RSS. Assicurarsi di aver configurato correttamente il feed e di utilizzare un url RSS valido, che corrisponda alle specifiche standard ufficiali. Dopo aver aggiornato il feed, potrebbe essere necessario salvare la dashboard e aggiornare la pagina." + }, + "card": { + "errors": { + "general": { + "title": "Impossibile recuperare il feed RSS", + "text": "Si è verificato un problema nel raggiungere il feed RSS. Assicurarsi di aver configurato correttamente il feed RSS e di utilizzare un url valido. Gli URL devono corrispondere alle specifiche standard ufficiali. Dopo aver aggiornato il feed, potrebbe essere necessario salvare la dashboard e aggiornare la pagina." + } } } } diff --git a/public/locales/it/modules/torrents-status.json b/public/locales/it/modules/torrents-status.json index 7b5ea8e30..8a8f61129 100644 --- a/public/locales/it/modules/torrents-status.json +++ b/public/locales/it/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Aggiungi un client Torrent supportato per visualizzare i download attuali" }, "generic": { - "title": "Si è verificato un errore inaspettato", + "title": "Si è verificato un errore imprevisto", "text": "Homarr non è riuscito a comunicare con i client Torrent. Controlla la tua configurazione" } }, diff --git a/public/locales/it/modules/video-stream.json b/public/locales/it/modules/video-stream.json index 9ec158a2f..466c69815 100644 --- a/public/locales/it/modules/video-stream.json +++ b/public/locales/it/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "Impostazioni per il widget flusso video", "FeedUrl": { - "label": "Url del feed" + "label": "URL del feed" }, "autoPlay": { - "label": "Auto play" + "label": "Riproduzione automatica" }, "muted": { "label": "Audio mutato" diff --git a/public/locales/it/settings/customization/page-appearance.json b/public/locales/it/settings/customization/page-appearance.json index d3203c811..fd67a31b4 100644 --- a/public/locales/it/settings/customization/page-appearance.json +++ b/public/locales/it/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Titolo meta", - "description": "Il titolo che viene visualizzato come nome della scheda" + "description": "Il titolo visualizzato nella scheda del browser" }, "logo": { "label": "Logo", - "description": "Il logo della dashboard in alto a sinistra" + "description": "Il logo visualizzato in alto a sinistra" }, "favicon": { "label": "Favicon", - "description": "L'icona che viene utilizzata davanti al nome della scheda" + "description": "L'icona visualizzata nella scheda del browser" }, "background": { "label": "Sfondo" }, "customCSS": { "label": "CSS personalizzato", - "description": "Personalizza tutti gli elementi della dashboard, consigliata solo agli utenti esperti", + "description": "Inoltre, personalizza la dashboard utilizzando i CSS, consigliato solo agli utenti esperti", "placeholder": "I CSS personalizzati saranno applicati per ultimi", "applying": "Applicazione CSS..." }, diff --git a/public/locales/it/settings/general/config-changer.json b/public/locales/it/settings/general/config-changer.json index c4cea6d23..65ea2a2e0 100644 --- a/public/locales/it/settings/general/config-changer.json +++ b/public/locales/it/settings/general/config-changer.json @@ -36,7 +36,7 @@ }, "confirmDeletion": { "title": "Conferma l'eliminazione della configurazione", - "warningText": "Stai per cancellare '{{configName}}'", + "warningText": "Siete sicuri di voler cancellare '{{configName}}'", "text": "Si noti che l'eliminazione non è reversibile e i dati andranno persi in modo permanente. Dopo aver fatto clic su questo pulsante, il file verrà eliminato definitivamente dal disco. Assicurarsi di creare un backup adeguato della propria configurazione.", "buttons": { "confirm": "Sì, elimina '{{configName}}'" diff --git a/public/locales/it/widgets/error-boundary.json b/public/locales/it/widgets/error-boundary.json new file mode 100644 index 000000000..910090362 --- /dev/null +++ b/public/locales/it/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ops, Si è veritivato un errore!", + "buttons": { + "details": "Dettagli", + "tryAgain": "Riprova" + } + }, + "modal": { + "text": "Ci dispiace per l'inconveniente! Ciò non dovrebbe accadere - si prega di segnalare questo problema su GitHub.", + "label": "Il tuo errore", + "reportButton": "Segnala questo errore" + } +} \ No newline at end of file diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index cde89d00d..870beefcb 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -9,13 +9,14 @@ "version": "バージョン", "changePosition": "ポジションを変更する", "remove": "削除", - "removeConfirm": "本当に {{item}} を削除したいのですか?", + "removeConfirm": "", + "createItem": "", "sections": { "settings": "設定", "dangerZone": "デンジャーゾーン" }, "secrets": { - "apiKey": "Apiキー", + "apiKey": "", "username": "ユーザー名", "password": "パスワード" }, diff --git a/public/locales/ja/layout/modals/about.json b/public/locales/ja/layout/modals/about.json index 8dd9f4ed9..609fe310a 100644 --- a/public/locales/ja/layout/modals/about.json +++ b/public/locales/ja/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarrは、 sleek, modern dashboardで、すべてのアプリとサービスを指先で操作できるようにします。HOMARを使えば、便利な1つの場所ですべてにアクセスし、コントロールすることができます。Homarrは、あなたが追加したアプリとシームレスに統合され、あなたに貴重な情報を提供し、完全に制御することができます。インストールは簡単で、Homarrは幅広い導入方法をサポートしています。", "contact": "お困りごとやご質問はありませんか?私たちにご連絡ください。", "addToDashboard": "ダッシュボードに追加", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "", "configurationsCount": "", diff --git a/public/locales/ja/layout/modals/add-app.json b/public/locales/ja/layout/modals/add-app.json index a10926bd5..a580fc671 100644 --- a/public/locales/ja/layout/modals/add-app.json +++ b/public/locales/ja/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "一般", - "behaviour": "ビヘイビア", + "behaviour": "", "network": "ネットワーク", "appearance": "外観", "integration": "統合化" diff --git a/public/locales/ja/layout/modals/change-position.json b/public/locales/ja/layout/modals/change-position.json index 251afd45d..3327de611 100644 --- a/public/locales/ja/layout/modals/change-position.json +++ b/public/locales/ja/layout/modals/change-position.json @@ -1,8 +1,6 @@ { - "xPosition": "X軸位置", "width": "幅", "height": "高さ", - "yPosition": "Y軸位置", "zeroOrHigher": "0以上", "betweenXandY": "{{min}} と {{max}}の間" } \ No newline at end of file diff --git a/public/locales/ja/modules/common.json b/public/locales/ja/modules/common.json index 0715878a7..2b539b6d0 100644 --- a/public/locales/ja/modules/common.json +++ b/public/locales/ja/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "コンフィギュレーションで未使用のパラメータが検出されました
{{key}}.Homarrはこのパラメータを解釈して使用することができません。予期せぬ動作を避けるため、コンフィギュレーションをバックアップし、コンフィギュレーションを修正してください。" + "text": "" } } } diff --git a/public/locales/ja/modules/dashdot.json b/public/locales/ja/modules/dashdot.json index e826ea0f1..be49474b0 100644 --- a/public/locales/ja/modules/dashdot.json +++ b/public/locales/ja/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "ダッシュ", - "description": "Homarr内部の外部Dash.インスタンスのグラフを表示します。", + "description": "", "settings": { "title": "Dash.ウィジェットの設定", "url": { @@ -105,7 +105,7 @@ "title": "CPU" }, "ram": { - "title": "ラム" + "title": "" }, "gpu": { "title": "GPU" diff --git a/public/locales/ja/modules/media-requests-list.json b/public/locales/ja/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/ja/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/ja/modules/media-requests-stats.json b/public/locales/ja/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/ja/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/ja/modules/ping.json b/public/locales/ja/modules/ping.json index 977b86eed..38f4eecc3 100644 --- a/public/locales/ja/modules/ping.json +++ b/public/locales/ja/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "ピング", - "description": "指定されたURLのHTTPレスポンスコードに応じたステータスインジケータを表示します。" + "description": "" }, "states": { "online": "オンライン {{response}}", diff --git a/public/locales/ja/modules/rss.json b/public/locales/ja/modules/rss.json index 230d75cf5..0ae05342b 100644 --- a/public/locales/ja/modules/rss.json +++ b/public/locales/ja/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/ja/modules/torrents-status.json b/public/locales/ja/modules/torrents-status.json index 6c9f2ed6e..97d5c8e5c 100644 --- a/public/locales/ja/modules/torrents-status.json +++ b/public/locales/ja/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "サポートされているTorrentクライアントを追加して、現在のダウンロードを表示します。" }, "generic": { - "title": "予期せぬエラーが発生しました", + "title": "", "text": "HomarrはあなたのTorrentクライアントと通信できませんでした。設定を確認してください。" } }, diff --git a/public/locales/ja/settings/customization/general.json b/public/locales/ja/settings/customization/general.json index ee9d30b5a..c1e57c3d5 100644 --- a/public/locales/ja/settings/customization/general.json +++ b/public/locales/ja/settings/customization/general.json @@ -14,7 +14,7 @@ "description": "" }, "appereance": { - "name": "", + "name": "外観", "description": "" } } diff --git a/public/locales/ja/settings/general/config-changer.json b/public/locales/ja/settings/general/config-changer.json index 6d8144629..b2df43695 100644 --- a/public/locales/ja/settings/general/config-changer.json +++ b/public/locales/ja/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "コンフィグの削除を確認する", - "warningText": "あなたが削除しようとしているのは '{{configName}}' です。", - "text": "削除は元に戻すことができず、データは永久に失われることに注意してください。このボタンをクリックした後、ファイルはディスクから永久に削除されます。必ず、設定の適切なバックアップを作成してください。", + "warningText": "", + "text": "", "buttons": { "confirm": "はい、'{{configName}}' を削除してください。" } @@ -57,7 +57,7 @@ "message": "コンフィグ削除の失敗" }, "deleteFailedDefaultConfig": { - "title": "デフォルトのコンフィグを削除できない", + "title": "", "message": "ファイルシステムからコンフィギュレーションが削除されていない" } } diff --git a/public/locales/ja/settings/general/search-engine.json b/public/locales/ja/settings/general/search-engine.json index d47e651ae..e8d096653 100644 --- a/public/locales/ja/settings/general/search-engine.json +++ b/public/locales/ja/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "検索エンジン", "configurationName": "検索エンジンの設定", "tips": { - "generalTip": "複数の接頭辞を使用することができます。これらをクエリの前に追加することで、結果をフィルタリングすることができます。s (ウェブ)、 !t (トレント)、 !y (YouTube)、 !m (メディア).", + "generalTip": "", "placeholderTip": "%s は、クエリのプレースホルダとして使用することができます。" }, "customEngine": { diff --git a/public/locales/ja/widgets/error-boundary.json b/public/locales/ja/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/ja/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index d272e1df7..742a3d56a 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -10,6 +10,7 @@ "changePosition": "", "remove": "제거", "removeConfirm": "", + "createItem": "", "sections": { "settings": "설정", "dangerZone": "위험한 설정" diff --git a/public/locales/ko/layout/modals/about.json b/public/locales/ko/layout/modals/about.json index 8b1597659..b6fe509b3 100644 --- a/public/locales/ko/layout/modals/about.json +++ b/public/locales/ko/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "", "contact": "", "addToDashboard": "", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "", "configurationsCount": "", diff --git a/public/locales/ko/modules/dashdot.json b/public/locales/ko/modules/dashdot.json index 20bfd9994..c8041f55c 100644 --- a/public/locales/ko/modules/dashdot.json +++ b/public/locales/ko/modules/dashdot.json @@ -105,7 +105,7 @@ "title": "CPU" }, "ram": { - "title": "RAM" + "title": "" }, "gpu": { "title": "GPU" diff --git a/public/locales/ko/modules/media-requests-list.json b/public/locales/ko/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/ko/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/ko/modules/media-requests-stats.json b/public/locales/ko/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/ko/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/ko/modules/rss.json b/public/locales/ko/modules/rss.json index 230d75cf5..0ae05342b 100644 --- a/public/locales/ko/modules/rss.json +++ b/public/locales/ko/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/ko/widgets/error-boundary.json b/public/locales/ko/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/ko/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/lol/common.json b/public/locales/lol/common.json index 20e1a6cc7..99661da35 100644 --- a/public/locales/lol/common.json +++ b/public/locales/lol/common.json @@ -9,13 +9,14 @@ "version": "Vershun", "changePosition": "Change Posishun", "remove": "Remoev", - "removeConfirm": "R U Sure Dat U Wants 2 Remoov {{item}} ?", + "removeConfirm": "", + "createItem": "", "sections": { "settings": "Settingz", "dangerZone": "Dangr zoen" }, "secrets": { - "apiKey": "Api key", + "apiKey": "", "username": "Usernaem", "password": "Password" }, diff --git a/public/locales/lol/layout/modals/about.json b/public/locales/lol/layout/modals/about.json index 01b72d566..e1432237d 100644 --- a/public/locales/lol/layout/modals/about.json +++ b/public/locales/lol/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr Iz Sleek, Modern Dashbord Dat Puts All Ov Ur Apps An Servicez At Ur Fingertips. Wif Homarr, U Can Acces An Control Evrythin In Wan Convenient Locashun. Homarr Seamlesly Integratez Wif Teh Apps Uve Addd, Providin U Wif Valuable Informashun An Givin U Complete Control. Installashun Iz Breeze, An Homarr Supports Wide Range Ov Deployment Methodz.", "contact": "Havin Trouble Or Queshuns? Connect Wif Us!", "addToDashboard": "Add 2 Dashbord", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "", "configurationsCount": "", diff --git a/public/locales/lol/layout/modals/add-app.json b/public/locales/lol/layout/modals/add-app.json index 92f4e4a45..9bbb89f6d 100644 --- a/public/locales/lol/layout/modals/add-app.json +++ b/public/locales/lol/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "General", - "behaviour": "Behaviour", + "behaviour": "", "network": "Netwerk", "appearance": "Appearance", "integration": "Integrashun" diff --git a/public/locales/lol/layout/modals/change-position.json b/public/locales/lol/layout/modals/change-position.json index cf3c63cc8..2f7fd9d9a 100644 --- a/public/locales/lol/layout/modals/change-position.json +++ b/public/locales/lol/layout/modals/change-position.json @@ -1,8 +1,6 @@ { - "xPosition": "X Axis Posishun", "width": "Width", "height": "Height", - "yPosition": "Y Axis Posishun", "zeroOrHigher": "0 Or Highr", "betweenXandY": "Tween {{min}} An {{max}}" } \ No newline at end of file diff --git a/public/locales/lol/modules/common.json b/public/locales/lol/modules/common.json index 6b9bf14bd..d540bc813 100644 --- a/public/locales/lol/modules/common.json +++ b/public/locales/lol/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Un-Usd Parametr In Configurashun Detectd
{{key}}. Homarr Iz Unable 2 Interpret An Use Dis Parametr. 2 Avoid Any Unexpectd Behavior, Bak Up Ur Configurashun An Correct Ur Configurashun." + "text": "" } } } diff --git a/public/locales/lol/modules/dashdot.json b/public/locales/lol/modules/dashdot.json index 46af1ed23..223bfdfdd 100644 --- a/public/locales/lol/modules/dashdot.json +++ b/public/locales/lol/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Displays Teh Grafs Ov An External Dash. Instance Inside Ov Homarr.", + "description": "", "settings": { "title": "Settings 4 Dash. Widget", "url": { @@ -105,7 +105,7 @@ "title": "CPU" }, "ram": { - "title": "RAM" + "title": "" }, "gpu": { "title": "GPU" diff --git a/public/locales/lol/modules/media-requests-list.json b/public/locales/lol/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/lol/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/lol/modules/media-requests-stats.json b/public/locales/lol/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/lol/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/lol/modules/rss.json b/public/locales/lol/modules/rss.json index 230d75cf5..0ae05342b 100644 --- a/public/locales/lol/modules/rss.json +++ b/public/locales/lol/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/lol/modules/torrents-status.json b/public/locales/lol/modules/torrents-status.json index abe311f45..90ea4f429 100644 --- a/public/locales/lol/modules/torrents-status.json +++ b/public/locales/lol/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Add Supportd Torrent Client 2 View Ur Current Downloadz" }, "generic": { - "title": "An Unexpectd Error Occurd", + "title": "", "text": "Homarr Wuz Unable 2 Speek Wif Ur Torrent Clients. Plz Check Ur Configurashun" } }, diff --git a/public/locales/lol/settings/customization/general.json b/public/locales/lol/settings/customization/general.json index ee9d30b5a..1199e4c3a 100644 --- a/public/locales/lol/settings/customization/general.json +++ b/public/locales/lol/settings/customization/general.json @@ -14,7 +14,7 @@ "description": "" }, "appereance": { - "name": "", + "name": "Appearance", "description": "" } } diff --git a/public/locales/lol/settings/general/search-engine.json b/public/locales/lol/settings/general/search-engine.json index 6e22ac92e..23cacc48e 100644 --- a/public/locales/lol/settings/general/search-engine.json +++ b/public/locales/lol/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Search engien", "configurationName": "Search Engine Configurashun", "tips": { - "generalTip": "Thar R Multiple Prefixez U Can Use! Addin Thees Infront Ov Ur Query Will Filtr Teh Results. !S (Web), !T (Torrents), !Y (Youtube), An !M (Media).", + "generalTip": "", "placeholderTip": "%s can bees usd as placeholdah 4 teh quewee." }, "customEngine": { diff --git a/public/locales/lol/widgets/error-boundary.json b/public/locales/lol/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/lol/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index 7c6060751..60b5b1cec 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -9,13 +9,14 @@ "version": "Versie", "changePosition": "Positie wijzigen", "remove": "Verwijder", - "removeConfirm": "Weet u zeker dat u {{item}} wilt verwijderen?", + "removeConfirm": "", + "createItem": "", "sections": { "settings": "Instellingen", "dangerZone": "Gevarenzone" }, "secrets": { - "apiKey": "API-sleutel", + "apiKey": "", "username": "Gebruikersnaam", "password": "Wachtwoord" }, diff --git a/public/locales/nl/layout/modals/about.json b/public/locales/nl/layout/modals/about.json index 55c4b01f4..f7fb65dff 100644 --- a/public/locales/nl/layout/modals/about.json +++ b/public/locales/nl/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr is een sterk, modern dashboard dat al je apps en diensten binnen handbereik brengt. Met Homarr heb je toegang tot en controle over alles op één handige locatie. Homarr integreert naadloos met de apps die je hebt toegevoegd en geeft je waardevolle informatie en volledige controle. Installatie is een fluitje van een cent en Homarr ondersteunt een breed scala aan implementatiemethoden.", "contact": "Problemen of vragen? Neem contact met ons op!", "addToDashboard": "Aan dashboard toevoegen", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "Versie configuratieschema", "configurationsCount": "Beschikbare configuraties", diff --git a/public/locales/nl/layout/modals/add-app.json b/public/locales/nl/layout/modals/add-app.json index c3a67bfe0..0fec507b5 100644 --- a/public/locales/nl/layout/modals/add-app.json +++ b/public/locales/nl/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "Algemeen", - "behaviour": "Gedrag", + "behaviour": "", "network": "Netwerk", "appearance": "Opmaak", "integration": "Integratie" diff --git a/public/locales/nl/layout/modals/change-position.json b/public/locales/nl/layout/modals/change-position.json index bfd2993ea..3ae44f1ba 100644 --- a/public/locales/nl/layout/modals/change-position.json +++ b/public/locales/nl/layout/modals/change-position.json @@ -1,8 +1,6 @@ { - "xPosition": "X-as positie", "width": "Breedte", "height": "Hoogte", - "yPosition": "Y-as positie", "zeroOrHigher": "0 of hoger", "betweenXandY": "Tussen {{min}} en {{max}}" } \ No newline at end of file diff --git a/public/locales/nl/modules/common.json b/public/locales/nl/modules/common.json index 29ea4b19f..52f6fdc3e 100644 --- a/public/locales/nl/modules/common.json +++ b/public/locales/nl/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Ongebruikte parameter in configuratie gedetecteerd
{{key}}. Homarr kan deze parameter niet interpreteren en gebruiken. Maak een back-up van uw configuratie en corrigeer uw configuratie om onverwacht gedrag te voorkomen." + "text": "" } } } diff --git a/public/locales/nl/modules/dashdot.json b/public/locales/nl/modules/dashdot.json index 4c8a28716..b0e8436e3 100644 --- a/public/locales/nl/modules/dashdot.json +++ b/public/locales/nl/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Toont de grafieken van een externe Dash. instantie binnen Homarr.", + "description": "", "settings": { "title": "Instellingen voor Dash. widget", "url": { @@ -85,7 +85,7 @@ "noInformation": "Kan geen informatie verkrijgen van dash. - gebruikt u de laatste versie?", "protocolDowngrade": { "title": "Protocol downgrade gedetecteerd", - "text": "Het protocol voor uw Dash. instantie wordt gedegradeerd. Dit vormt een risico voor de beveiliging, aangezien HTTP ongecodeerd is en aanvallers deze verbinding kunnen misbruiken. Zorg ervoor dat Dash. wordt uitgevoerd op HTTPS of downgrade Homarr naar HTTP (niet aanbevolen)." + "text": "" } }, "graphs": { diff --git a/public/locales/nl/modules/iframe.json b/public/locales/nl/modules/iframe.json index 75830367b..02e28d1f3 100644 --- a/public/locales/nl/modules/iframe.json +++ b/public/locales/nl/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "iFrame", + "name": "", "description": "", "settings": { - "title": "iFrame Instellingen", + "title": "", "embedUrl": { "label": "" }, diff --git a/public/locales/nl/modules/media-requests-list.json b/public/locales/nl/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/nl/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/nl/modules/media-requests-stats.json b/public/locales/nl/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/nl/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/nl/modules/ping.json b/public/locales/nl/modules/ping.json index 6801f9056..f1769b3db 100644 --- a/public/locales/nl/modules/ping.json +++ b/public/locales/nl/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "Toont een statusindicator op basis van de HTTP-responscode van een gegeven URL." + "description": "" }, "states": { "online": "Online {{response}}", diff --git a/public/locales/nl/modules/rss.json b/public/locales/nl/modules/rss.json index e861987b2..8e5f7c0de 100644 --- a/public/locales/nl/modules/rss.json +++ b/public/locales/nl/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "Instellingen voor RSS widget", "rssFeedUrl": { - "label": "RSS feed URL" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "Kan RSS feed niet ophalen", - "text": "Er was een probleem met het bereiken van de RSS feed. Zorg ervoor dat je de feed correct hebt geconfigureerd en een geldige RSS URL gebruikt, die overeenkomt met de officiële standaardspecificatie. Nadat u de feed hebt bijgewerkt, moet u mogelijk uw dashboard opslaan en de pagina vernieuwen." + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/nl/modules/torrents-status.json b/public/locales/nl/modules/torrents-status.json index 6fb2b0ff8..d52912336 100644 --- a/public/locales/nl/modules/torrents-status.json +++ b/public/locales/nl/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Voeg een ondersteunde Torrent-client toe om je huidige downloads te bekijken" }, "generic": { - "title": "Onbekende fout opgetreden", + "title": "", "text": "Homarr kon niet communiceren met je Torrent-clients. Controleer je configuratie" } }, diff --git a/public/locales/nl/modules/video-stream.json b/public/locales/nl/modules/video-stream.json index 979e65b50..7d99b18e0 100644 --- a/public/locales/nl/modules/video-stream.json +++ b/public/locales/nl/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "Instellingen voor videostream-widget", "FeedUrl": { - "label": "Feed URL" + "label": "" }, "autoPlay": { - "label": "Automatisch afspelen" + "label": "" }, "muted": { "label": "Gedempte audio" diff --git a/public/locales/nl/settings/customization/general.json b/public/locales/nl/settings/customization/general.json index c3068a957..cd9900da9 100644 --- a/public/locales/nl/settings/customization/general.json +++ b/public/locales/nl/settings/customization/general.json @@ -14,8 +14,8 @@ "description": "Tegels, logo en PWA aanpassen" }, "appereance": { - "name": "Uiterlijk", - "description": "Pas de achtergrond, kleuren en het uiterlijk van apps aan." + "name": "Opmaak", + "description": "" } } } \ No newline at end of file diff --git a/public/locales/nl/settings/customization/page-appearance.json b/public/locales/nl/settings/customization/page-appearance.json index f22542a73..44dee36c5 100644 --- a/public/locales/nl/settings/customization/page-appearance.json +++ b/public/locales/nl/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Meta Titel", - "description": "De titel, die als uw tabnaam wordt weergegeven" + "description": "" }, "logo": { "label": "Logo", - "description": "Het dashboardlogo linksboven" + "description": "" }, "favicon": { "label": "Favicon", - "description": "Het pictogram, dat wordt gebruik voor de naam van het tabblad" + "description": "" }, "background": { "label": "Achtergrond" }, "customCSS": { "label": "Eigen CSS", - "description": "Alle elementen op je dashboard aanpassen, alleen aanbevolen voor ervaren gebruikers", + "description": "", "placeholder": "Eigen CSS wordt als laatste toegepast", "applying": "CSS toepassen..." }, diff --git a/public/locales/nl/settings/general/config-changer.json b/public/locales/nl/settings/general/config-changer.json index 0a2662f4d..fcfed6199 100644 --- a/public/locales/nl/settings/general/config-changer.json +++ b/public/locales/nl/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "Bevestig de verwijdering van uw configuratie", - "warningText": "Je staat op het punt om '{{configName}}' te verwijderen", - "text": "Houd er rekening mee dat de verwijdering niet onomkeerbaar is en dat uw gegevens permanent verloren gaan. Na het klikken op deze knop wordt het bestand permanent van uw schijf verwijderd. Zorg voor een adequate back-up van uw configuratie.", + "warningText": "", + "text": "", "buttons": { "confirm": "Ja, verwijder '{{configName}}'" } @@ -57,7 +57,7 @@ "message": "Configuratie verwijderen mislukt" }, "deleteFailedDefaultConfig": { - "title": "Standaardconfiguratie kan niet worden verwijderd", + "title": "", "message": "Configuratie is niet verwijderd uit het bestandssysteem" } } diff --git a/public/locales/nl/settings/general/search-engine.json b/public/locales/nl/settings/general/search-engine.json index a52e4d39d..f21f46807 100644 --- a/public/locales/nl/settings/general/search-engine.json +++ b/public/locales/nl/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Zoekmachine", "configurationName": "Zoekmachine configuratie", "tips": { - "generalTip": "Er zijn meerdere voorvoegsels die u kunt gebruiken! Door deze voor uw zoekopdracht toe te voegen worden de resultaten gefilterd. !s (Web), !t (Torrents), !y (YouTube), en !m (Media).", + "generalTip": "", "placeholderTip": "%s kan worden gebruikt als plaatshouder voor de query." }, "customEngine": { diff --git a/public/locales/nl/widgets/error-boundary.json b/public/locales/nl/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/nl/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/no/common.json b/public/locales/no/common.json index 0a3c89969..dd225b18e 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -10,6 +10,7 @@ "changePosition": "Endre posisjon", "remove": "Fjern", "removeConfirm": "Er du sikker på at du vil fjerne {{item}}?", + "createItem": "+ opprett {{item}}", "sections": { "settings": "Innstillinger", "dangerZone": "Faresonen" diff --git a/public/locales/no/layout/modals/about.json b/public/locales/no/layout/modals/about.json index 625aa5679..2539b7c3a 100644 --- a/public/locales/no/layout/modals/about.json +++ b/public/locales/no/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr er et sleek, moderne dashbord som legger alle apper og tjenester ved fingertuppene dine. Med Homarr, kan du få tilgang til og kontrollere alt på et bekvemt sted. Homarr sømløst integrerer med appene du har lagt til, gir deg verdifull informasjon og gir deg full kontroll. Installasjon er en lek, og Homarr støtter en lang rekke distribusjonsmetoder.", "contact": "Har du problemer med eller spørsmål? Ta kontakt med oss!", "addToDashboard": "Legg til på dashbord", + "tip": "Mod refererer til endringstasten din, den er Ctrl og Command/Super/Windows tasten", + "key": "Hurtigtast", + "action": "Handling", + "keybinds": "Hurtigtaster", "metrics": { "configurationSchemaVersion": "Konfigurasjonsskjema versjon", "configurationsCount": "Tilgjengelige konfigurasjoner", @@ -9,6 +13,6 @@ "nodeEnvironment": "Node miljø", "i18n": "Lastet I18n oversettelsesnavneområder", "locales": "Konfigurerte I18n-lokasjoner", - "experimental_disableEditMode": "" + "experimental_disableEditMode": "EXPERIMENTAL: Deaktivere redigeringsmodus" } } \ No newline at end of file diff --git a/public/locales/no/layout/modals/add-app.json b/public/locales/no/layout/modals/add-app.json index b028f8afb..2a4e702ca 100644 --- a/public/locales/no/layout/modals/add-app.json +++ b/public/locales/no/layout/modals/add-app.json @@ -39,14 +39,14 @@ "appearance": { "icon": { "label": "App ikon", - "description": "", + "description": "Velg et ikon som skal vises på dashbordet. Velg fra {{suggestionsCount}} ikoner eller skriv inn din egen URL", "autocomplete": { - "title": "", - "text": "" + "title": "Ingen resultater funnet", + "text": "Prøv å bruke et mer spesifikt søkeord. Hvis du ikke finner det ønskede ikonet, lim inn URL adressen for et egendefinert ikon" }, "noItems": { - "title": "", - "text": "" + "title": "Laster eksterne ikoner", + "text": "Dette kan ta noen sekunder" } } }, diff --git a/public/locales/no/modules/dashdot.json b/public/locales/no/modules/dashdot.json index fe2176c7b..f580b8d8f 100644 --- a/public/locales/no/modules/dashdot.json +++ b/public/locales/no/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Viser grafene til en ekstern Dash. Eksempel inni av Homarr.", + "description": "Viser grafene til en ekstern Dash. Instanse inne i Homarr.", "settings": { "title": "Innstillinger for Dash. widget", "url": { @@ -11,68 +11,68 @@ "label": "Vis prosentandel" }, "columns": { - "label": "" + "label": "Visningskolonner" }, "graphHeight": { - "label": "" + "label": "Høyde på grafer" }, "graphsOrder": { - "label": "", + "label": "Grafer (Rekkefølge)", "storage": { "label": "Lagring", "enabled": { - "label": "" + "label": "Vis i widget" }, "span": { - "label": "" + "label": "Kolonne spenn" }, "compactView": { - "label": "" + "label": "Vis som tekst (kompakt)" }, "multiView": { - "label": "" + "label": "Vis som multi-disk-visning" } }, "network": { "label": "Nettverk", "enabled": { - "label": "" + "label": "Vis i widget" }, "span": { - "label": "" + "label": "Kolonne spenn" }, "compactView": { - "label": "" + "label": "Vis som tekst (kompakt)" } }, "cpu": { "label": "CPU", "enabled": { - "label": "" + "label": "Vis i widget" }, "span": { - "label": "" + "label": "Kolonne spenn" }, "multiView": { - "label": "" + "label": "Vis som multi-kjerne-visning" } }, "ram": { - "label": "", + "label": "RAM", "enabled": { - "label": "" + "label": "Vis i widget" }, "span": { - "label": "" + "label": "Kolonne spenn" } }, "gpu": { "label": "GPU", "enabled": { - "label": "" + "label": "Vis i widget" }, "span": { - "label": "" + "label": "Kolonne spenn" } } } @@ -85,7 +85,7 @@ "noInformation": "Kan ikke hente informasjon fra dash. - kjører du den nyeste versjonen?", "protocolDowngrade": { "title": "Oppdaget protokollnedgradering", - "text": "Protokollen til Dash. instansen blir nedgradert. Dette er sikkerhetsrisiko, siden HTTP er ukryptert og angripere kan misbruke denne tilkoblingen. Kontroller at Dash. kjører på HTTPS for eller nedgraderer Homarr til HTTP (ikke anbefalt)." + "text": "Tilkoblingen til Dash. Instansen bruker HTTP. Dette er en sikkerhetsrisiko, fordi HTTP er ukryptert og angripere kan misbruke denne tilkoblingen. Kontroller at Dash. bruker HTTPS eller nedgrader Homarr til HTTP (ikke anbefalt)." } }, "graphs": { diff --git a/public/locales/no/modules/iframe.json b/public/locales/no/modules/iframe.json index 2b9730307..9229a7fff 100644 --- a/public/locales/no/modules/iframe.json +++ b/public/locales/no/modules/iframe.json @@ -1,22 +1,22 @@ { "descriptor": { - "name": "IFrame", - "description": "", + "name": "iFrame", + "description": "Bygg inn innhold fra Internett. Noen nettsteder kan begrense adgang.", "settings": { - "title": "", + "title": "iFrame innstillinger", "embedUrl": { - "label": "" + "label": "Bygg inn URL" }, "allowFullScreen": { - "label": "" + "label": "Tillat fullskjerm" } } }, "card": { "errors": { "noUrl": { - "title": "", - "text": "" + "title": "Angi en URL", + "text": "Sørg for at du har angitt en gyldig adresse i konfigurasjonen av widgeten din" } } } diff --git a/public/locales/no/modules/media-requests-list.json b/public/locales/no/modules/media-requests-list.json new file mode 100644 index 000000000..b3314c954 --- /dev/null +++ b/public/locales/no/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Media forespørsler", + "description": "Se en liste over alle medieforespørsler fra din Overseerr eller Jellyseerr instans", + "settings": { + "title": "Liste over media forespørsler" + } + }, + "noRequests": "Ingen forespørsler funnet. Vennligst skjekk at du har konfigurert appene dine riktig.", + "pending": "Det er {countPendingApproval} forespørsler som venter på en godkjenning.", + "nonePending": "Det er for tiden ingen ventende godkjenninger. Alt er klart!", + "state": { + "approved": "Godkjent", + "pendingApproval": "Venter på godkjenning", + "declined": "Avvist" + } +} diff --git a/public/locales/no/modules/media-requests-stats.json b/public/locales/no/modules/media-requests-stats.json new file mode 100644 index 000000000..eee47108d --- /dev/null +++ b/public/locales/no/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Statistikk for mediaforespørsler", + "description": "Statistikk om dine medieforespørsler", + "settings": { + "title": "Statistikk for mediaforespørsler" + } + }, + "stats": { + "pending": "Venter på godkjenning", + "tvRequests": "TV forespørsler", + "movieRequests": "Film forespørsler" + } +} diff --git a/public/locales/no/modules/media-server.json b/public/locales/no/modules/media-server.json index 2be958199..92e84e4b6 100644 --- a/public/locales/no/modules/media-server.json +++ b/public/locales/no/modules/media-server.json @@ -1,23 +1,23 @@ { "descriptor": { - "name": "", - "description": "", + "name": "Medieserver", + "description": "Samhandle med din Jellyfin eller Plex medieserver", "settings": { - "title": "" + "title": "Innstillinger for media server widget" } }, "card": { "table": { "header": { - "session": "", - "user": "", - "currentlyPlaying": "" + "session": "Økt", + "user": "Bruker", + "currentlyPlaying": "Spilles nå" } }, "errors": { "general": { - "title": "", - "text": "" + "title": "Kan ikke laste innhold", + "text": "Kan ikke hente informasjon fra serveren. Skjekk loggene for flere detaljer" } } } diff --git a/public/locales/no/modules/rss.json b/public/locales/no/modules/rss.json index 230d75cf5..7abe6eec1 100644 --- a/public/locales/no/modules/rss.json +++ b/public/locales/no/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { - "name": "", - "description": "", + "name": "RSS widget", + "description": "Hent elementene fra en RSS-strøm og viser dem. Vanligvis brukt for online nyheter", "settings": { - "title": "", + "title": "Innstillinger for RSS widget", "rssFeedUrl": { - "label": "" + "label": "RSS Feed URL-er", + "description": "URL-ene til RSS-strømmene du vil vise fra." + }, + "refreshInterval": { + "label": "Oppdaterings intervall (i minutter)" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "Kan ikke hente RSS-feed", + "text": "Det oppstod et problem under henting av RSS-feed. Pass på at du har konfigurert RSS-strømmen ved å bruke en gyldig URL. URLer skal være lik den offisielle spesifikasjonen. Etter oppdatering av feeden, må du kanskje oppfriske dashbordet." + } } } } diff --git a/public/locales/no/modules/video-stream.json b/public/locales/no/modules/video-stream.json index a5a7bd13c..1812cb28c 100644 --- a/public/locales/no/modules/video-stream.json +++ b/public/locales/no/modules/video-stream.json @@ -8,7 +8,7 @@ "label": "Feed URL" }, "autoPlay": { - "label": "Automatisk avspilling" + "label": "Autospill" }, "muted": { "label": "Dempet lyd" diff --git a/public/locales/no/settings/customization/page-appearance.json b/public/locales/no/settings/customization/page-appearance.json index b71148926..1d35c749d 100644 --- a/public/locales/no/settings/customization/page-appearance.json +++ b/public/locales/no/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Meta tittel", - "description": "Tittelen som vises som fanenavn" + "description": "Tittelen som vises i nettleserfanen" }, "logo": { "label": "Logo", - "description": "Dashbord logoen øverst til venstre" + "description": "Logoen som vises øverst til venstre" }, "favicon": { "label": "Favicon", - "description": "Ikonet som brukes foran fanenavnet" + "description": "Ikonet som vises i nettleserfanen" }, "background": { "label": "Bakgrunn" }, "customCSS": { "label": "Egendefinert CSS", - "description": "Tilpass alle elementer på dashbordet, anbefales bare for erfarne brukere", + "description": "Videre kan du tilpasse dashbordet ved hjelp av CSS, dette er bare anbefalt for erfarne brukere", "placeholder": "Egendefinert CSS vil bli brukt sist", "applying": "Tar i bruk CSS..." }, diff --git a/public/locales/no/settings/general/config-changer.json b/public/locales/no/settings/general/config-changer.json index 7cb25eb33..f61d87061 100644 --- a/public/locales/no/settings/general/config-changer.json +++ b/public/locales/no/settings/general/config-changer.json @@ -37,7 +37,7 @@ "confirmDeletion": { "title": "Bekreft sletting av konfigurasjonen", "warningText": "Du er i ferd med å slette '{{configName}}'", - "text": "Vær oppmerksom på at slettingen ikke er invertikal, og at dataene dine vil gå tapt permanent. Når du klikker på denne knappen, vil filen slettes permanent fra disken. Pass på å opprette en tilstrekkelig sikkerhetskopi av konfigurasjonen.", + "text": "Vær oppmerksom på at slettingen kan ikke gås tilbake på, og at dataene dine vil gå tapt permanent. Når du klikker på denne knappen vil filen slettes permanent fra disken. Pass på å opprette en tilstrekkelig sikkerhetskopi av konfigurasjonen.", "buttons": { "confirm": "Ja, slett '{{configName}}'" } diff --git a/public/locales/no/widgets/error-boundary.json b/public/locales/no/widgets/error-boundary.json new file mode 100644 index 000000000..cf93d278f --- /dev/null +++ b/public/locales/no/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Det oppstod en feil!", + "buttons": { + "details": "Detaljer", + "tryAgain": "Prøv igjen" + } + }, + "modal": { + "text": "Vi beklager forstyrrelsen! Dette skal ikke skje - vennligst rapporter dette problemet på GitHub.", + "label": "Din feilmelding", + "reportButton": "Rapporter denne feilen" + } +} \ No newline at end of file diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index aa670b6db..feb853253 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -1,6 +1,6 @@ { "save": "Zapisz", - "about": "O", + "about": "O programie", "cancel": "Anuluj", "close": "Zamknij", "delete": "Usuń", @@ -9,26 +9,27 @@ "version": "Wersja", "changePosition": "Zmiana pozycji", "remove": "Usuń", - "removeConfirm": "Czy jesteś pewien, że chcesz usunąć {{item}} ?", + "removeConfirm": "Czy na pewno chcesz usunąć {{item}}?", + "createItem": "", "sections": { "settings": "Ustawienia", "dangerZone": "Strefa zagrożenia" }, "secrets": { - "apiKey": "Klucz Api", + "apiKey": "Klucz API", "username": "Nazwa użytkownika", "password": "Hasło" }, "tip": "Wskazówka: ", "time": { - "seconds": "sekund", - "minutes": "minut", + "seconds": "sekundy", + "minutes": "minuty", "hours": "godziny" }, "loading": "Ładowanie...", "breakPoints": { "small": "mała", - "medium": "średni", - "large": "duży" + "medium": "średnia", + "large": "duża" } } \ No newline at end of file diff --git a/public/locales/pl/layout/modals/about.json b/public/locales/pl/layout/modals/about.json index 4b0613636..3955e6774 100644 --- a/public/locales/pl/layout/modals/about.json +++ b/public/locales/pl/layout/modals/about.json @@ -2,13 +2,17 @@ "description": "Homarr to elegancka, nowoczesna deska rozdzielcza, dzięki której wszystkie Twoje aplikacje i usługi są na wyciągnięcie ręki. Dzięki Homarr możesz mieć dostęp i kontrolę nad wszystkim w jednym wygodnym miejscu. Homarr płynnie integruje się z dodanymi przez Ciebie aplikacjami, dostarczając Ci cennych informacji i dając Ci pełną kontrolę. Instalacja jest łatwa, a Homarr obsługuje wiele metod wdrażania.", "contact": "Masz problemy lub pytania? Skontaktuj się z nami!", "addToDashboard": "Dodaj do pulpitu nawigacyjnego", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { - "configurationSchemaVersion": "", - "configurationsCount": "", + "configurationSchemaVersion": "Wersja schematu konfiguracji", + "configurationsCount": "Dostępne konfiguracje", "version": "Wersja", - "nodeEnvironment": "", - "i18n": "", - "locales": "", - "experimental_disableEditMode": "" + "nodeEnvironment": "Środowisko węzła", + "i18n": "Załadowane nazwy tłumaczeń I18n", + "locales": "Skonfigurowane lokalizacje I18n", + "experimental_disableEditMode": "EKSPERIMENTAL: Wyłącz tryb edycji" } } \ No newline at end of file diff --git a/public/locales/pl/layout/modals/add-app.json b/public/locales/pl/layout/modals/add-app.json index 91c62ecc0..b8c6913e2 100644 --- a/public/locales/pl/layout/modals/add-app.json +++ b/public/locales/pl/layout/modals/add-app.json @@ -39,14 +39,14 @@ "appearance": { "icon": { "label": "Ikona aplikacji", - "description": "", + "description": "Wybierz ikonę, która będzie wyświetlana na pulpicie. Wybierz ikon z {{suggestionsCount}} lub wprowadź swój własny adres URL", "autocomplete": { - "title": "", - "text": "" + "title": "Nie znaleziono żadnych wyników", + "text": "Spróbuj użyć bardziej konkretnego hasła wyszukiwania. Jeśli nie możesz znaleźć żądanej ikony, wklej adres URL obrazu powyżej, aby wyszukać niestandardową ikonę" }, "noItems": { - "title": "", - "text": "" + "title": "Ładowanie zewnętrznych ikon", + "text": "To może zająć kilka sekund" } } }, diff --git a/public/locales/pl/modules/calendar.json b/public/locales/pl/modules/calendar.json index fd088060c..89e41c4c3 100644 --- a/public/locales/pl/modules/calendar.json +++ b/public/locales/pl/modules/calendar.json @@ -5,7 +5,7 @@ "settings": { "title": "Ustawienia dla widżetu Kalendarz", "useSonarrv4": { - "label": "" + "label": "Użyj API Sonarr v4" }, "sundayStart": { "label": "Rozpoczynaj tydzień od niedzieli" diff --git a/public/locales/pl/modules/common.json b/public/locales/pl/modules/common.json index 0f42e03a8..e4715dce6 100644 --- a/public/locales/pl/modules/common.json +++ b/public/locales/pl/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Wykryto nieużywany parametr w konfiguracji
{{key}}. Homarr nie jest w stanie zinterpretować i wykorzystać tego parametru. Aby uniknąć nieoczekiwanego zachowania, wykonaj kopię zapasową konfiguracji i popraw konfigurację." + "text": "Wykryto nieużywany parametr w konfiguracji
{{key}}. Homarr nie jest w stanie zinterpretować i wykorzystać tego parametru. Aby uniknąć nieoczekiwanego zachowania, wykonaj kopię zapasową i popraw konfigurację." } } } diff --git a/public/locales/pl/modules/dashdot.json b/public/locales/pl/modules/dashdot.json index 658185860..2387f215e 100644 --- a/public/locales/pl/modules/dashdot.json +++ b/public/locales/pl/modules/dashdot.json @@ -1,78 +1,78 @@ { "descriptor": { "name": "Dash.", - "description": "Wyświetla wykresy zewnętrznej instancji Dash. wewnątrz Homarr.", + "description": "Wyświetla wykresy zewnętrznego Dash. Instancja wewnątrz Homarr.", "settings": { "title": "Ustawienia dla widgetu Dash.", "url": { "label": "Adres URL usługi Dash." }, "usePercentages": { - "label": "" + "label": "Wyświetl procenty" }, "columns": { - "label": "" + "label": "Wyświetl kolumny" }, "graphHeight": { - "label": "" + "label": "Wysokość wykresów" }, "graphsOrder": { - "label": "", + "label": "Wykresy (kolejność)", "storage": { "label": "Pamięć", "enabled": { - "label": "" + "label": "Pokaż w widżecie" }, "span": { - "label": "" + "label": "Rozpiętość kolumn" }, "compactView": { - "label": "" + "label": "Pokaż jako tekst (kompaktowy)" }, "multiView": { - "label": "" + "label": "Pokaż jako widok wielordzeniowy" } }, "network": { "label": "Sieć", "enabled": { - "label": "" + "label": "Pokaż w widżecie" }, "span": { - "label": "" + "label": "Rozpiętość kolumn" }, "compactView": { - "label": "" + "label": "Pokaż jako tekst (kompaktowy)" } }, "cpu": { "label": "CPU", "enabled": { - "label": "" + "label": "Pokaż w widżecie" }, "span": { - "label": "" + "label": "Rozpiętość kolumn" }, "multiView": { - "label": "" + "label": "Pokaż jako widok wielordzeniowy" } }, "ram": { - "label": "", + "label": "RAM", "enabled": { - "label": "" + "label": "Pokaż w widżecie" }, "span": { - "label": "" + "label": "Rozpiętość kolumn" } }, "gpu": { "label": "GPU", "enabled": { - "label": "" + "label": "Pokaż w widżecie" }, "span": { - "label": "" + "label": "Rozpiętość kolumn" } } } @@ -84,8 +84,8 @@ "noService": "Nie znaleziono usługi Dash. Proszę dodać ją do pulpitu Homarra lub ustawić adres URL usługi Dash. w opcjach modułu", "noInformation": "Nie można uzyskać informacji z dash. - używasz najnowszej wersji?", "protocolDowngrade": { - "title": "", - "text": "" + "title": "Wykryto obniżenie jakości protokołu", + "text": "Połączenie z instancją Dash. odbywa się przy użyciu protokołu HTTP. Stanowi to zagrożenie dla bezpieczeństwa, ponieważ protokół HTTP jest nieszyfrowany i osoby atakujące mogą nadużywać tego połączenia. Upewnij się, że instancja Dash. korzysta z protokołu HTTPS, lub obniż poziom Homarr do HTTP (niezalecane)." } }, "graphs": { diff --git a/public/locales/pl/modules/iframe.json b/public/locales/pl/modules/iframe.json index 18c90c392..2691b43b5 100644 --- a/public/locales/pl/modules/iframe.json +++ b/public/locales/pl/modules/iframe.json @@ -1,22 +1,22 @@ { "descriptor": { - "name": "", - "description": "", + "name": "iFrame", + "description": "Osadzaj dowolne treści z internetu. Niektóre strony internetowe mogą ograniczać dostęp.", "settings": { - "title": "", + "title": "ustawienia iFrame", "embedUrl": { - "label": "" + "label": "Osadź URL" }, "allowFullScreen": { - "label": "" + "label": "Pozwól na pełny ekran" } } }, "card": { "errors": { "noUrl": { - "title": "", - "text": "" + "title": "Podaj adres URL", + "text": "Upewnij się, że wprowadziłeś poprawny adres w konfiguracji swojego widgetu" } } } diff --git a/public/locales/pl/modules/media-requests-list.json b/public/locales/pl/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/pl/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/pl/modules/media-requests-stats.json b/public/locales/pl/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/pl/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/pl/modules/media-server.json b/public/locales/pl/modules/media-server.json index 2be958199..b74805937 100644 --- a/public/locales/pl/modules/media-server.json +++ b/public/locales/pl/modules/media-server.json @@ -1,23 +1,23 @@ { "descriptor": { - "name": "", - "description": "", + "name": "Serwery mediów", + "description": "Współdziałanie z serwerem multimediów Jellyfin lub Plex", "settings": { - "title": "" + "title": "Ustawienia dla widgetu serwera mediów" } }, "card": { "table": { "header": { - "session": "", - "user": "", - "currentlyPlaying": "" + "session": "Sesja", + "user": "Użytkownik", + "currentlyPlaying": "Aktualnie odtwarzane" } }, "errors": { "general": { - "title": "", - "text": "" + "title": "Nie można załadować zawartości", + "text": "Nie udało się pobrać informacji z serwera. Proszę sprawdzić logi, aby uzyskać więcej szczegółów" } } } diff --git a/public/locales/pl/modules/ping.json b/public/locales/pl/modules/ping.json index 6c52fab1a..02d75f947 100644 --- a/public/locales/pl/modules/ping.json +++ b/public/locales/pl/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "Wyświetla wskaźnik stanu zależny od kodu odpowiedzi HTTP danego adresu URL." + "description": "Wyświetla wskaźnik stanu w zależności od kodu odpowiedzi HTTP danego adresu URL." }, "states": { "online": "Dostępny {{response}}", diff --git a/public/locales/pl/modules/rss.json b/public/locales/pl/modules/rss.json index 230d75cf5..643cd6b85 100644 --- a/public/locales/pl/modules/rss.json +++ b/public/locales/pl/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { - "name": "", - "description": "", + "name": "Widget RSS", + "description": "Przechwytywa elementy z kanału RSS i je wyświetla. Często używane do wiadomości online", "settings": { - "title": "", + "title": "Ustawienia dla widgetu RSS", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/pl/modules/video-stream.json b/public/locales/pl/modules/video-stream.json index 539daa1c4..e84c69ea3 100644 --- a/public/locales/pl/modules/video-stream.json +++ b/public/locales/pl/modules/video-stream.json @@ -1,24 +1,24 @@ { "descriptor": { - "name": "", - "description": "", + "name": "Strumień wideo", + "description": "Osadź strumień wideo lub wideo z kamery lub strony internetowej", "settings": { - "title": "", + "title": "Ustawienia dla widżetu strumienia wideo", "FeedUrl": { - "label": "" + "label": "Adres URL kanału" }, "autoPlay": { - "label": "" + "label": "Autoodtwarzanie" }, "muted": { - "label": "" + "label": "Wyciszony dźwięk" }, "controls": { - "label": "" + "label": "Sterowanie odtwarzaczem wideo" } } }, "errors": { - "invalidStream": "" + "invalidStream": "Nieprawidłowy strumień" } } \ No newline at end of file diff --git a/public/locales/pl/settings/common.json b/public/locales/pl/settings/common.json index 3a8ac0589..b418f81c6 100644 --- a/public/locales/pl/settings/common.json +++ b/public/locales/pl/settings/common.json @@ -10,19 +10,19 @@ }, "credits": { "madeWithLove": "Wykonane z ❤️ przez @", - "thirdPartyContent": "", + "thirdPartyContent": "Zobacz zawartość firm trzecich", "thirdPartyContentTable": { - "dependencyName": "", + "dependencyName": "Zależność", "dependencyVersion": "Wersja" } }, "grow": "Rozwijaj siatkę (zajmij całą przestrzeń)", "layout": { "preview": { - "title": "", - "subtitle": "" + "title": "Podgląd", + "subtitle": "Zmiany zapisywane są automatycznie" }, - "divider": "", + "divider": "Opcje układu", "main": "Główna", "sidebar": "Pasek boczny", "cannotturnoff": "Nie można wyłączyć", diff --git a/public/locales/pl/settings/customization/color-selector.json b/public/locales/pl/settings/customization/color-selector.json index 020b5f898..61115487b 100644 --- a/public/locales/pl/settings/customization/color-selector.json +++ b/public/locales/pl/settings/customization/color-selector.json @@ -1,3 +1,4 @@ { + "colors": "Kolory", "suffix": "{{color}} kolor" } \ No newline at end of file diff --git a/public/locales/pl/settings/customization/general.json b/public/locales/pl/settings/customization/general.json index ee9d30b5a..69e74c464 100644 --- a/public/locales/pl/settings/customization/general.json +++ b/public/locales/pl/settings/customization/general.json @@ -1,21 +1,21 @@ { - "text": "", + "text": "Personalizacje pozwalają na skonfigurowanie i dostosowanie Homarr do swoich preferencji.", "accordeon": { "layout": { - "name": "", - "description": "" + "name": "Układ", + "description": "Włączanie i wyłączanie elementów w nagłówku i na pulpicie" }, "gridstack": { - "name": "", - "description": "" + "name": "Gridstack", + "description": "Dostosuj zachowanie i kolumny obszaru pulpitu" }, "pageMetadata": { - "name": "", - "description": "" + "name": "Metadane strony", + "description": "Dostosowanie tytułów, logo i PWA" }, "appereance": { - "name": "", - "description": "" + "name": "Wygląd", + "description": "Dostosuj tło, kolory i wygląd aplikacji" } } } \ No newline at end of file diff --git a/public/locales/pl/settings/customization/gridstack.json b/public/locales/pl/settings/customization/gridstack.json index 18c3d8233..ca248f5fa 100644 --- a/public/locales/pl/settings/customization/gridstack.json +++ b/public/locales/pl/settings/customization/gridstack.json @@ -1,10 +1,10 @@ { "columnsCount": { - "labelPreset": "", - "descriptionPreset": "", - "descriptionExceedsPreset": "" + "labelPreset": "Kolumny w rozmiarze {{size}}", + "descriptionPreset": "Liczba kolumn, gdy ekran ma mniej niż {{pixels}} pikseli szerokości", + "descriptionExceedsPreset": "Liczba kolumn, gdy rozmiar ekranu przekracza {{pixels}} pikseli" }, - "unsavedChanges": "", - "applyChanges": "", - "defaultValues": "" + "unsavedChanges": "Masz niezapisane zmiany. Kliknij przycisk Zastosuj zmiany poniżej, aby zastosować i zapisać.", + "applyChanges": "Zastosuj zmiany", + "defaultValues": "Wartości domyślne" } \ No newline at end of file diff --git a/public/locales/pl/settings/customization/page-appearance.json b/public/locales/pl/settings/customization/page-appearance.json index 9d266d1c3..69eb7d86e 100644 --- a/public/locales/pl/settings/customization/page-appearance.json +++ b/public/locales/pl/settings/customization/page-appearance.json @@ -1,28 +1,28 @@ { "pageTitle": { "label": "Tytuł strony", - "description": "" + "description": "Tytuł pulpitu w lewym górnym rogu" }, "metaTitle": { "label": "Meta Title", - "description": "" + "description": "Tytuł wyświetlany w karcie przeglądarki" }, "logo": { "label": "Logo", - "description": "" + "description": "Logo wyświetlane u góry po lewej stronie" }, "favicon": { "label": "Ikona", - "description": "" + "description": "Ikona wyświetlana w karcie przeglądarki" }, "background": { "label": "Tło" }, "customCSS": { "label": "Niestandardowy CSS", - "description": "", + "description": "Jeszcze bardziej dostosuj swój pulpit za pomocą CSS, zalecane tylko dla doświadczonych użytkowników", "placeholder": "Custom CSS zostanie zastosowany jako ostatni", - "applying": "" + "applying": "Zastosowanie CSS..." }, "buttons": { "submit": "Zgłoś" diff --git a/public/locales/pl/settings/general/config-changer.json b/public/locales/pl/settings/general/config-changer.json index e15b0e149..1fd388c78 100644 --- a/public/locales/pl/settings/general/config-changer.json +++ b/public/locales/pl/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "Potwierdź usunięcie konfiguracji", - "warningText": "Chciałbyś usunąć '{{configName}}'", - "text": "Należy pamiętać, że usunięcie nie jest odwracalne i dane zostaną trwale utracone. Po kliknięciu tego przycisku plik zostanie trwale usunięty z dysku. Upewnij się, że stworzyłeś odpowiednią kopię zapasową swojej konfiguracji.", + "warningText": "Właśnie zamierzasz usunąć '{{configName}}'", + "text": "Pamiętaj, że usunięcie jest nieodwracalne, a dane zostaną utracone na stałe. Po kliknięciu tego przycisku plik zostanie trwale usunięty z dysku. Upewnij się, że stworzysz kopię zapasową swojej konfiguracji.", "buttons": { "confirm": "Tak, usuń \"{{configName}}" } @@ -57,7 +57,7 @@ "message": "Nie udało się usunąć konfiguracji" }, "deleteFailedDefaultConfig": { - "title": "Domyślna konfiguracja nie może być usunięta", + "title": "Domyślna konfiguracja nie może być usunięta.", "message": "Konfiguracja nie została usunięta z systemu plików" } } diff --git a/public/locales/pl/widgets/error-boundary.json b/public/locales/pl/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/pl/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index 7efd7129d..978ae346e 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -9,13 +9,14 @@ "version": "Versão", "changePosition": "Mudar de posição", "remove": "Excluir", - "removeConfirm": "Tem a certeza de que quer remover {{item}} ?", + "removeConfirm": "", + "createItem": "", "sections": { "settings": "Configurações", "dangerZone": "Zona de risco" }, "secrets": { - "apiKey": "Chave Api", + "apiKey": "", "username": "Usuário", "password": "Senha" }, diff --git a/public/locales/pt/layout/modals/about.json b/public/locales/pt/layout/modals/about.json index a66436fbf..65e868009 100644 --- a/public/locales/pt/layout/modals/about.json +++ b/public/locales/pt/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr é um elegante, moderno painel de instrumentos que coloca todas as suas aplicações e serviços na ponta dos seus dedos. Com Homarr, pode aceder e controlar tudo num único local conveniente. Homarr integra-se perfeitamente com as aplicações que adicionou, fornecendo-lhe informações valiosas e dando-lhe um controlo completo. A instalação é tranquila, e Homarr suporta uma vasta gama de métodos de implantação.", "contact": "Com problemas ou perguntas? Ligue-se a nós!", "addToDashboard": "Adicionar ao Painel de instrumentos", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "Versão do esquema de configuração", "configurationsCount": "Configurações disponíveis", diff --git a/public/locales/pt/layout/modals/add-app.json b/public/locales/pt/layout/modals/add-app.json index e8dc86b96..25fa6c63b 100644 --- a/public/locales/pt/layout/modals/add-app.json +++ b/public/locales/pt/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "Geral", - "behaviour": "Comportamento", + "behaviour": "", "network": "Rede", "appearance": "Aparência", "integration": "Integração" diff --git a/public/locales/pt/layout/modals/change-position.json b/public/locales/pt/layout/modals/change-position.json index 016aaea3a..e27a8718f 100644 --- a/public/locales/pt/layout/modals/change-position.json +++ b/public/locales/pt/layout/modals/change-position.json @@ -1,8 +1,6 @@ { - "xPosition": "Posição do eixo X", "width": "Largura", "height": "Altura", - "yPosition": "Posição do eixo Y", "zeroOrHigher": "0 ou superior", "betweenXandY": "Entre {{min}} e {{max}}" } \ No newline at end of file diff --git a/public/locales/pt/modules/common.json b/public/locales/pt/modules/common.json index b9243bc46..6fa228cf8 100644 --- a/public/locales/pt/modules/common.json +++ b/public/locales/pt/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Parâmetro não utilizado na configuração detectado
{{key}}. Homarr é incapaz de interpretar e utilizar este parâmetro. Para evitar qualquer comportamento inesperado, faça o backup da sua configuração e corrija a sua configuração." + "text": "" } } } diff --git a/public/locales/pt/modules/dashdot.json b/public/locales/pt/modules/dashdot.json index d8be25ae8..58b5b8ed2 100644 --- a/public/locales/pt/modules/dashdot.json +++ b/public/locales/pt/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Apresenta os gráficos de um Dash. exemplo externo dentro de Homarr.", + "description": "", "settings": { "title": "Definições para o Dash. widget", "url": { @@ -85,7 +85,7 @@ "noInformation": "Não é possível obter informações do Dash. Você está executando a versão mais recente?", "protocolDowngrade": { "title": "Downgrade de protocolo detectado", - "text": "O protocolo da sua instancia Dash. está sendo inseguro. Uma vez que HTTP não é criptografado e os invasores podem abusar dessa conexão. Certifique-se de que o Dash. está sendo executado em HTTPS ou configure Homarr para HTTP (não recomendado)." + "text": "" } }, "graphs": { diff --git a/public/locales/pt/modules/iframe.json b/public/locales/pt/modules/iframe.json index d1786265a..855432341 100644 --- a/public/locales/pt/modules/iframe.json +++ b/public/locales/pt/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "", "description": "Incorporar qualquer conteúdo da internet. Alguns sites podem restringir o acesso.", "settings": { - "title": "Configurações do IFrame", + "title": "", "embedUrl": { "label": "Incorporar URL" }, diff --git a/public/locales/pt/modules/media-requests-list.json b/public/locales/pt/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/pt/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/pt/modules/media-requests-stats.json b/public/locales/pt/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/pt/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/pt/modules/ping.json b/public/locales/pt/modules/ping.json index f515961c4..c2dc22556 100644 --- a/public/locales/pt/modules/ping.json +++ b/public/locales/pt/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Latência", - "description": "Apresenta um indicador de estado dependente do código de resposta HTTP de um determinado URL." + "description": "" }, "states": { "online": "Online {{response}}", diff --git a/public/locales/pt/modules/rss.json b/public/locales/pt/modules/rss.json index ef0b67e7f..ece4a3869 100644 --- a/public/locales/pt/modules/rss.json +++ b/public/locales/pt/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "Configurações para o widget RSS", "rssFeedUrl": { - "label": "URL do feed RSS" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "Não foi possível recuperar o feed RSS", - "text": "Houve um problema ao alcançar o feed RSS. Certifique-se de que você configurou o feed corretamente e use uma URL de RSS válido, e que corresponda à especificação padrão oficial. Depois de atualizar o feed, talvez seja necessário salvar o painel de controle e atualizar a página." + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/pt/modules/torrents-status.json b/public/locales/pt/modules/torrents-status.json index b765229b0..554f8fac7 100644 --- a/public/locales/pt/modules/torrents-status.json +++ b/public/locales/pt/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Adicione um cliente Torrent suportado para ver os seus downloads actuais" }, "generic": { - "title": "Ocorreu um erro inesperado", + "title": "", "text": "Homarr foi incapaz de comunicar com os seus clientes Torrent. Por favor, verifique a sua configuração" } }, diff --git a/public/locales/pt/modules/video-stream.json b/public/locales/pt/modules/video-stream.json index b3e624dcd..27fea2dfc 100644 --- a/public/locales/pt/modules/video-stream.json +++ b/public/locales/pt/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "Configurações para o widget de transmissão de vídeo", "FeedUrl": { - "label": "url do feed" + "label": "" }, "autoPlay": { - "label": "Reprodução automática" + "label": "" }, "muted": { "label": "Silenciar áudio" diff --git a/public/locales/pt/settings/customization/general.json b/public/locales/pt/settings/customization/general.json index ac26367b1..59da6f909 100644 --- a/public/locales/pt/settings/customization/general.json +++ b/public/locales/pt/settings/customization/general.json @@ -15,7 +15,7 @@ }, "appereance": { "name": "Aparência", - "description": "Personalizar o plano de fundo, cores e aparência dos aplicativos" + "description": "" } } } \ No newline at end of file diff --git a/public/locales/pt/settings/customization/page-appearance.json b/public/locales/pt/settings/customization/page-appearance.json index 1595854eb..3423ae2ab 100644 --- a/public/locales/pt/settings/customization/page-appearance.json +++ b/public/locales/pt/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Meta Título", - "description": "O título, que está sendo exibido como o nome da sua aba" + "description": "" }, "logo": { "label": "Logo", - "description": "O logotipo do painel no canto superior esquerdo" + "description": "" }, "favicon": { "label": "Favicon", - "description": "O ícone, que está sendo usado na frente do nome da sua aba" + "description": "" }, "background": { "label": "Antecedentes" }, "customCSS": { "label": "CSS Personalizado", - "description": "Personalize todos os elementos no seu painel, recomendado apenas para usuários experientes", + "description": "", "placeholder": "O CSS personalizado será aplicado por último", "applying": "Aplicando CSS..." }, diff --git a/public/locales/pt/settings/general/config-changer.json b/public/locales/pt/settings/general/config-changer.json index e981d4ba8..776be67a3 100644 --- a/public/locales/pt/settings/general/config-changer.json +++ b/public/locales/pt/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "Confirme a eliminação da sua configuração", - "warningText": "Está prestes a eliminar '{{configName}}'", - "text": "Note, por favor, que a eliminação não é invertível e os seus dados serão perdidos permanentemente. Depois de clicar neste botão, o ficheiro será apagado permanentemente do seu disco. Assegure-se de criar uma cópia de segurança adequada da sua configuração.", + "warningText": "", + "text": "", "buttons": { "confirm": "Sim, eliminar '{{configName}}'" } @@ -57,7 +57,7 @@ "message": "A configuração de apagar falhou" }, "deleteFailedDefaultConfig": { - "title": "A configuração por defeito não pode ser apagada", + "title": "", "message": "A configuração não foi apagada do sistema de ficheiros" } } diff --git a/public/locales/pt/settings/general/search-engine.json b/public/locales/pt/settings/general/search-engine.json index 5a8225bf3..346042375 100644 --- a/public/locales/pt/settings/general/search-engine.json +++ b/public/locales/pt/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Motor de busca", "configurationName": "Configuração do motor de busca", "tips": { - "generalTip": "Há vários prefixos que pode usar! A adição destes infratores da sua consulta irá filtrar os resultados. !s (Web), !t (Torrents), !y (YouTube), e !m (Media).", + "generalTip": "", "placeholderTip": "%s pode ser utilizado como um local para a consulta." }, "customEngine": { diff --git a/public/locales/pt/widgets/error-boundary.json b/public/locales/pt/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/pt/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index ffb4a3a17..e55aec875 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -9,13 +9,14 @@ "version": "Версия", "changePosition": "Изменить положение", "remove": "Удалить", - "removeConfirm": "Вы действительно хотите удалить {{item}} ?", + "removeConfirm": "Вы действительно хотите удалить {{item}}?", + "createItem": "", "sections": { "settings": "Настройки", "dangerZone": "Опасная зона" }, "secrets": { - "apiKey": "Ключ API", + "apiKey": "API ключ", "username": "Логин", "password": "Пароль" }, diff --git a/public/locales/ru/layout/modals/about.json b/public/locales/ru/layout/modals/about.json index 56bf6e8c0..0adf8ab06 100644 --- a/public/locales/ru/layout/modals/about.json +++ b/public/locales/ru/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr - это элегантная, современная панель, на которой все ваши приложения и сервисы находятся под рукой. С Homarr вы можете получить доступ и управлять всем в одном удобном месте. Homarr легко интегрируется с приложениями, которые вы добавили, предоставляя вам ценную информацию и обеспечивая полный контроль. Установка не займет много времени, Homarr поддерживает широкий спектр методов развертывания.", "contact": "Проблемы или вопросы? Свяжитесь с нами!", "addToDashboard": "Добавить на панель", + "tip": "Mod относится к клавише модификатору, это клавиши Ctrl и Command/Super/Windows", + "key": "Горячие клавиши", + "action": "Действие", + "keybinds": "Сочетания клавиш", "metrics": { "configurationSchemaVersion": "Версия схемы конфигурации", "configurationsCount": "Доступные конфигурации", diff --git a/public/locales/ru/modules/dashdot.json b/public/locales/ru/modules/dashdot.json index f071ab01f..9a2f5f981 100644 --- a/public/locales/ru/modules/dashdot.json +++ b/public/locales/ru/modules/dashdot.json @@ -21,7 +21,7 @@ "storage": { "label": "Хранилище", "enabled": { - "label": "" + "label": "Показать в виджете" }, "span": { "label": "Размеры столбцов" @@ -30,13 +30,13 @@ "label": "Показать в виде текста (компактный)" }, "multiView": { - "label": "" + "label": "Показать несколько дисков" } }, "network": { "label": "Сеть", "enabled": { - "label": "" + "label": "Показать в виджете" }, "span": { "label": "Размеры столбцов" @@ -48,19 +48,19 @@ "cpu": { "label": "ЦП", "enabled": { - "label": "" + "label": "Показать в виджете" }, "span": { "label": "Размеры столбцов" }, "multiView": { - "label": "" + "label": "Показать многоядерный вид" } }, "ram": { "label": "ОЗУ", "enabled": { - "label": "" + "label": "Показать в виджете" }, "span": { "label": "Размеры столбцов" @@ -69,7 +69,7 @@ "gpu": { "label": "ГП", "enabled": { - "label": "" + "label": "Показать в виджете" }, "span": { "label": "Размеры столбцов" @@ -85,7 +85,7 @@ "noInformation": "Не удается получить информацию из Dash. - Вы используете последнюю версию?", "protocolDowngrade": { "title": "Обнаружено понижение версии протокола соединения", - "text": "Понижение версии протокола соединения с Dash. Это является угрозой безопасности, так как протокол HTTP не зашифрован и злоумышленники могут перехватить данное соединение. Убедитесь, что Dash. работает также и на протоколе HTTPS, или переведите Homarr на HTTP (не рекомендуется)." + "text": "Соединение с вашим экземпляром Dash. использует HTTP. Это представляет угрозу безопасности, потому что HTTP не зашифрован и злоумышленники могут злоупотреблять этим соединением. Убедитесь, что Dash. использует HTTPS, или переведите Homarr на HTTP (не рекомендуется)." } }, "graphs": { diff --git a/public/locales/ru/modules/iframe.json b/public/locales/ru/modules/iframe.json index 51071876d..03fdcd9cd 100644 --- a/public/locales/ru/modules/iframe.json +++ b/public/locales/ru/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "Встраивать любой контент из интернета. Некоторые веб-сайты могут ограничивать доступ.", "settings": { - "title": "Настройки IFrame", + "title": "Настройки iFrame", "embedUrl": { "label": "Вставить URL-адрес" }, diff --git a/public/locales/ru/modules/media-requests-list.json b/public/locales/ru/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/ru/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/ru/modules/media-requests-stats.json b/public/locales/ru/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/ru/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/ru/modules/rss.json b/public/locales/ru/modules/rss.json index fcca56515..638e7be47 100644 --- a/public/locales/ru/modules/rss.json +++ b/public/locales/ru/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "Настройки для виджета RSS", "rssFeedUrl": { - "label": "URL адрес RSS-канала" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "Не удалось получить RSS-канал", - "text": "Возникла проблема при подключении к RSS-каналу. Убедитесь, что вы'правильно настроили канал и используете действительный URL адрес RSS, соответствующий официальной спецификации. После обновления канала, вам может потребоваться сохранить панель и обновить страницу." + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/ru/modules/video-stream.json b/public/locales/ru/modules/video-stream.json index 6efa4a11b..5fcef2678 100644 --- a/public/locales/ru/modules/video-stream.json +++ b/public/locales/ru/modules/video-stream.json @@ -5,7 +5,7 @@ "settings": { "title": "Настройки для виджета трансляции видео", "FeedUrl": { - "label": "URL-адрес канала" + "label": "URL-адрес потока" }, "autoPlay": { "label": "Автовоспроизведение" diff --git a/public/locales/ru/settings/customization/page-appearance.json b/public/locales/ru/settings/customization/page-appearance.json index d4637e6de..6bdcd025e 100644 --- a/public/locales/ru/settings/customization/page-appearance.json +++ b/public/locales/ru/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Мета-заголовок", - "description": "Заголовок, который отображается как имя вкладки" + "description": "Заголовок, который отображается на вкладке вашего браузера" }, "logo": { "label": "Логотип", - "description": "Логотип панели в левом верхнем углу" + "description": "Логотип, который отображается в верхнем левом углу" }, "favicon": { "label": "Иконка", - "description": "Иконка, которая отображается во вкладке перед названием страницы" + "description": "Значок, который отображается на вкладке вашего браузера" }, "background": { "label": "Фон" }, "customCSS": { "label": "Пользовательский CSS", - "description": "Настройте все элементы панели, рекомендуется только для опытных пользователей", + "description": "Далее, настройте свою панель с помощью CSS, рекомендуется только для опытных пользователей", "placeholder": "Пользовательский CSS будет применяться в последнюю очередь", "applying": "Применение CSS..." }, diff --git a/public/locales/ru/settings/general/config-changer.json b/public/locales/ru/settings/general/config-changer.json index d8983405d..89cc10c86 100644 --- a/public/locales/ru/settings/general/config-changer.json +++ b/public/locales/ru/settings/general/config-changer.json @@ -37,7 +37,7 @@ "confirmDeletion": { "title": "Подтвердите удаление вашей конфигурации", "warningText": "Вы собираетесь удалить '{{configName}}'", - "text": "Пожалуйста, обратите внимание, что удаление необратимо и ваши данные будут утеряны навсегда. После нажатия этой кнопки файл будет навсегда удален с диска. Убедитесь, что вы создаете резервную копию конфигурации.", + "text": "Обратите внимание, что удаление не обратимо и ваши данные будут утеряны навсегда. После нажатия этой кнопки файл будет навсегда удален с диска. Убедитесь, что вы создали резервную копию конфигурации.", "buttons": { "confirm": "Да, удалить '{{configName}}'" } diff --git a/public/locales/ru/widgets/error-boundary.json b/public/locales/ru/widgets/error-boundary.json new file mode 100644 index 000000000..76238d372 --- /dev/null +++ b/public/locales/ru/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Упс, произошла ошибка!", + "buttons": { + "details": "Подробнее", + "tryAgain": "Попробовать снова" + } + }, + "modal": { + "text": "Приносим извинения за доставленные неудобства! Это не должно происходить - пожалуйста, сообщите об этой проблеме на GitHub.", + "label": "Ваша ошибка", + "reportButton": "Сообщить об ошибке" + } +} \ No newline at end of file diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index ac605abbf..e8d4595e2 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -9,13 +9,14 @@ "version": "Verzia", "changePosition": "Zmeniť pozíciu", "remove": "Odstrániť", - "removeConfirm": "Ste si istý ze chcete odstrániť {{item}} ?", + "removeConfirm": "Ste si istý ze chcete odstrániť {{item}}?", + "createItem": "+ vytvoriť {{item}}", "sections": { "settings": "Nastavenia", "dangerZone": "Nebezpečná zóna" }, "secrets": { - "apiKey": "Api kľúč", + "apiKey": "API kľúč", "username": "Používateľské meno", "password": "Heslo" }, diff --git a/public/locales/sk/layout/modals/about.json b/public/locales/sk/layout/modals/about.json index f61e4254d..66015e4b3 100644 --- a/public/locales/sk/layout/modals/about.json +++ b/public/locales/sk/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr je elegantný, moderný prístrojový panel, ktorý vám poskytne všetky aplikácie a služby na dosah ruky. Pomocou aplikácie Homarr môžete mať prístup ku všetkému a ovládať ho na jednom pohodlnom mieste. Homarr sa bezproblémovo integruje s aplikáciami, ktoré ste pridali, poskytuje vám cenné informácie a umožňuje vám úplnú kontrolu. Inštalácia je jednoduchá a aplikácia Homarr podporuje širokú škálu metód nasadenia.", "contact": "Máte problémy alebo otázky? Spojte sa s nami!", "addToDashboard": "Pridať na prístrojovú dosku", + "tip": "Mod označuje kláves modifikátora, je to Ctrl a Command/Super/Windows", + "key": "Klávesová skratka", + "action": "Akcia", + "keybinds": "Kľúčové väzby", "metrics": { "configurationSchemaVersion": "Verzia konfiguračnej schémy", "configurationsCount": "Dostupné konfigurácie", diff --git a/public/locales/sk/modules/common.json b/public/locales/sk/modules/common.json index 748c7a306..5d1ab87ae 100644 --- a/public/locales/sk/modules/common.json +++ b/public/locales/sk/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Zistil sa nepoužitý parameter v konfigurácii
{{key}}. Homarr nedokáže interpretovať a použiť tento parameter. Ak sa chcete vyhnúť akémukoľvek neočakávanému správaniu, zálohujte svoju konfiguráciu a opravte ju." + "text": "Zistený nepoužitý parameter v konfigurácii
{{key}}. Homarr nedokáže interpretovať a používať tento parameter. Ak chcete zabrániť neočakávanému správaniu, zálohujte si konfiguráciu a opravte ju." } } } diff --git a/public/locales/sk/modules/dashdot.json b/public/locales/sk/modules/dashdot.json index db1c21731..5367a9f08 100644 --- a/public/locales/sk/modules/dashdot.json +++ b/public/locales/sk/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Zobrazovať grafy externej Dash. vo vnútri Homarru.", + "description": "Zobrazí grafy externého Dash. Instancie vo vnútri Homarr.", "settings": { "title": "Nastavenia pre Dash. mini aplikácie", "url": { @@ -85,7 +85,7 @@ "noInformation": "Nie je možné získať informácie z Dash. - používate najnovšiu verziu?", "protocolDowngrade": { "title": "Zistený downgrade protokol", - "text": "Protokol k vášmu Dash. inštancii sa downgraduje. Ide o bezpečnostné riziko, pretože HTTP je nešifrované a útočníci by mohli toto pripojenie zneužiť. Uistite sa, že Dash. beží aj na HTTPS alebo downgradujte Homarr na HTTP (neodporúča sa)." + "text": "Pripojenie k vašej inštancii Dash. používa protokol HTTP. To predstavuje bezpečnostné riziko, pretože protokol HTTP nie je šifrovaný a útočníci by mohli toto pripojenie zneužiť. Uistite sa, že Dash. používa HTTPS, alebo znížte úroveň Homarr na HTTP (neodporúča sa)." } }, "graphs": { diff --git a/public/locales/sk/modules/iframe.json b/public/locales/sk/modules/iframe.json index 1200294c7..61ae0e064 100644 --- a/public/locales/sk/modules/iframe.json +++ b/public/locales/sk/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "Vložte akýkoľvek obsah z internetu. Niektoré webové stránky môžu obmedziť prístup.", "settings": { - "title": "Nastavenia IFrame", + "title": "Nastavenia iFrame", "embedUrl": { "label": "Vložiť adresu URL" }, diff --git a/public/locales/sk/modules/media-requests-list.json b/public/locales/sk/modules/media-requests-list.json new file mode 100644 index 000000000..b1e3f3ff8 --- /dev/null +++ b/public/locales/sk/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Žiadosti médií", + "description": "Zobrazenie zoznamu všetkých mediálnych požiadaviek z Overseerr alebo Jellyseerr", + "settings": { + "title": "Zoznam požiadaviek médií" + } + }, + "noRequests": "Nenašli sa žiadne požiadavky. Skontrolujte, či ste správne nakonfigurovali svoje aplikácie.", + "pending": "Na schválenie čaká {countPendingApproval} žiadostí.", + "nonePending": "V súčasnosti nie sú k dispozícii žiadne schválenia. Môžete začať!", + "state": { + "approved": "Schválené", + "pendingApproval": "Čaká sa na schválenie", + "declined": "Odmietnuté" + } +} diff --git a/public/locales/sk/modules/media-requests-stats.json b/public/locales/sk/modules/media-requests-stats.json new file mode 100644 index 000000000..516999fcd --- /dev/null +++ b/public/locales/sk/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Štatistiky požiadaviek médií", + "description": "Štatistiky o vašich požiadavkách na médiá", + "settings": { + "title": "Štatistiky požiadaviek médií" + } + }, + "stats": { + "pending": "Čakajúce schválenia", + "tvRequests": "TV požiadavky", + "movieRequests": "Filmové požiadavky" + } +} diff --git a/public/locales/sk/modules/rss.json b/public/locales/sk/modules/rss.json index 155069e90..6b807af02 100644 --- a/public/locales/sk/modules/rss.json +++ b/public/locales/sk/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "Nastavenia mini aplikácie RSS", "rssFeedUrl": { - "label": "URL adresa RSS" + "label": "URL adresa RSS", + "description": "URL adresy kanálov RSS, ktoré chcete zobraziť." + }, + "refreshInterval": { + "label": "Interval obnovovania (v minútach)" } - } - }, - "card": { - "errors": { - "general": { - "title": "Nie je možné načítať kanál RSS", - "text": "Vyskytol sa problém s kontaktovaním informačného kanála RSS. Uistite sa, že ste ' informačný kanál správne nakonfigurovali a používate platnú adresu URL RSS, ktorá zodpovedá oficiálnej štandardnej špecifikácii. Po aktualizácii informačného kanála možno budete musieť uložiť informačný panel a obnoviť stránku." + }, + "card": { + "errors": { + "general": { + "title": "Nie je možné načítať kanál RSS", + "text": "Vyskytol sa problém s dosiahnutím kanála RSS. Uistite sa, že ste správne nakonfigurovali kanál RSS pomocou platnej adresy URL. Adresy URL by mali zodpovedať oficiálnej špecifikácii. Po aktualizácii kanála bude možno potrebné obnoviť ovládací panel." + } } } } diff --git a/public/locales/sk/modules/video-stream.json b/public/locales/sk/modules/video-stream.json index 669d1b86b..35beee759 100644 --- a/public/locales/sk/modules/video-stream.json +++ b/public/locales/sk/modules/video-stream.json @@ -5,7 +5,7 @@ "settings": { "title": "Nastavenia pre mini aplikáciu videostreamu", "FeedUrl": { - "label": "Url adresa" + "label": "Adresa URL" }, "autoPlay": { "label": "Automatické prehrávanie" diff --git a/public/locales/sk/settings/customization/page-appearance.json b/public/locales/sk/settings/customization/page-appearance.json index f0f5e483b..25d15e87a 100644 --- a/public/locales/sk/settings/customization/page-appearance.json +++ b/public/locales/sk/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Meta názov", - "description": "Názov, ktorý sa zobrazuje ako názov vašej karty" + "description": "Názov zobrazený na karte prehliadača" }, "logo": { "label": "Logo", - "description": "Logo prístrojovej dosky vľavo hore" + "description": "Logo zobrazené vľavo hore" }, "favicon": { "label": "Favicon", - "description": "Ikona, ktorá sa používa pred názvom karty" + "description": "Ikona zobrazená na karte prehliadača" }, "background": { "label": "Pozadie" }, "customCSS": { "label": "Vlastné CSS", - "description": "Prispôsobenie všetkých prvkov na prístrojovej doske, odporúča sa len skúseným používateľom", + "description": "Ďalej si prispôsobte ovládací panel pomocou CSS, odporúča sa len pre skúsených používateľov", "placeholder": "Vlastné CSS sa použije ako posledné", "applying": "Aplikuje sa CSS..." }, diff --git a/public/locales/sk/settings/general/config-changer.json b/public/locales/sk/settings/general/config-changer.json index d7071e548..9ff8cd6e3 100644 --- a/public/locales/sk/settings/general/config-changer.json +++ b/public/locales/sk/settings/general/config-changer.json @@ -37,7 +37,7 @@ "confirmDeletion": { "title": "Potvrdenie odstránenia konfigurácie", "warningText": "Chystáte sa vymazať '{{configName}}'", - "text": "Upozorňujeme, že vymazanie nie je možné zvrátiť a vaše údaje budú natrvalo stratené. Po kliknutí na toto tlačidlo sa súbor natrvalo odstráni z vášho disku. Uistite sa, že ste si vytvorili primeranú zálohu konfigurácie.", + "text": "Upozorňujeme, že vymazanie nie je možné vrátiť späť a vaše údaje budú natrvalo stratené. Po kliknutí na toto tlačidlo sa súbor natrvalo odstráni z vášho disku. Uistite sa, že ste si vytvorili primeranú zálohu konfigurácie.", "buttons": { "confirm": "Áno, vymažte '{{configName}}'" } @@ -57,7 +57,7 @@ "message": "Odstránenie konfigurácie zlyhalo" }, "deleteFailedDefaultConfig": { - "title": "Predvolená konfigurácia sa nedá odstrániť", + "title": "Predvolenú konfiguráciu nemožno odstrániť", "message": "Konfigurácia nebola odstránená zo systému súborov" } } diff --git a/public/locales/sk/settings/general/search-engine.json b/public/locales/sk/settings/general/search-engine.json index 8087221ec..2adf0e08d 100644 --- a/public/locales/sk/settings/general/search-engine.json +++ b/public/locales/sk/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Vyhľadávač", "configurationName": "Konfigurácia vyhľadávača", "tips": { - "generalTip": "Môžete použiť viacero predpon! Ich pridaním pred dotaz sa budú výsledky filtrovať. !s (Web), !t (Torrenty), !y (YouTube) a !m (Médiá).", + "generalTip": "Môžete použiť viacero predpon! Ich pridaním pred dotaz sa výsledky vyfiltrujú. !s (Web), !t (Torrenty), !y (YouTube) a !m (Médiá).", "placeholderTip": "%s možno použiť ako zástupný symbol pre dotaz." }, "customEngine": { diff --git a/public/locales/sk/widgets/error-boundary.json b/public/locales/sk/widgets/error-boundary.json new file mode 100644 index 000000000..e2edbac4c --- /dev/null +++ b/public/locales/sk/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ups, došlo k chybe!", + "buttons": { + "details": "Detaily", + "tryAgain": "Skúste znova" + } + }, + "modal": { + "text": "Ospravedlňujeme sa za nepríjemnosti! Toto by sa nemalo stávať - nahláste tento problém na GitHub.", + "label": "Vaša chyba", + "reportButton": "Nahlásiť chybu" + } +} \ No newline at end of file diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index 5e291d3de..b92544eaa 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -9,13 +9,14 @@ "version": "Različica", "changePosition": "Spremeni položaj", "remove": "Odstrani", - "removeConfirm": "Ali ste prepričani, da želite odstraniti {{item}} ?", + "removeConfirm": "Ali ste prepričani, da želite odstraniti {{item}}?", + "createItem": "", "sections": { "settings": "Nastavitve", "dangerZone": "Nevarno območje" }, "secrets": { - "apiKey": "Api ključ", + "apiKey": "API ključ", "username": "Uporabniško ime", "password": "Geslo" }, diff --git a/public/locales/sl/layout/modals/about.json b/public/locales/sl/layout/modals/about.json index 609179cfa..b7fb226da 100644 --- a/public/locales/sl/layout/modals/about.json +++ b/public/locales/sl/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr je elegantna, sodobna nadzorna plošča, s katero so vse vaše aplikacije in storitve na dosegu roke. Z aplikacijo Homarr lahko do vsega dostopate in nadzorujete na enem priročnem mestu. Homarr se brez težav poveže z aplikacijami, ki ste jih dodali, in vam zagotavlja dragocene informacije ter popoln nadzor. Namestitev je preprosta, Homarr pa podpira širok nabor načinov namestitve.", "contact": "Imate težave ali vprašanja? Povežite se z nami!", "addToDashboard": "Dodajanje v nadzorno ploščo", + "tip": "Mod se nanaša na modifikacijsko tipko, to so tipke Ctrl in Command/Super/Windows", + "key": "Bližnjična tipka", + "action": "Dejanje", + "keybinds": "Vezave tipk", "metrics": { "configurationSchemaVersion": "Različica konfiguracijske sheme", "configurationsCount": "Razpoložljive konfiguracije", diff --git a/public/locales/sl/layout/modals/add-app.json b/public/locales/sl/layout/modals/add-app.json index 187a28594..02515e4cf 100644 --- a/public/locales/sl/layout/modals/add-app.json +++ b/public/locales/sl/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "Splošno", - "behaviour": "Vedenje", + "behaviour": "Obnašanje", "network": "Omrežje", "appearance": "Videz", "integration": "Integracija" diff --git a/public/locales/sl/modules/dashdot.json b/public/locales/sl/modules/dashdot.json index 28a1f9132..e9420fccc 100644 --- a/public/locales/sl/modules/dashdot.json +++ b/public/locales/sl/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Prikaže grafe zunanjega primerka Dash. znotraj Homarra.", + "description": "Prikaže grafe zunanje instance Dash. znotraj Homarr.", "settings": { "title": "Nastavitve za pripomoček Dash", "url": { @@ -85,7 +85,7 @@ "noInformation": "Ne morem pridobiti informacij iz Dash. - ali uporabljate najnovejšo različico?", "protocolDowngrade": { "title": "Odkrit nižji protokol", - "text": "Protokol do vašega Dash. vmesnika se znižuje. To predstavlja varnostno tveganje, saj protokol HTTP ni šifriran in napadalci lahko zlorabijo to povezavo. Prepričajte se, da Dash. deluje tudi v protokolu HTTPS, ali pa znižajte stopnjo Homarr na HTTP (ni priporočljivo)." + "text": "Povezava z vašim primerkom Dash. uporablja protokol HTTP. To predstavlja varnostno tveganje, saj HTTP ni šifriran in napadalci lahko zlorabijo to povezavo. Prepričajte se, da Dash. uporablja HTTPS, ali pa Homarr prestavite na HTTP (ni priporočljivo)." } }, "graphs": { diff --git a/public/locales/sl/modules/iframe.json b/public/locales/sl/modules/iframe.json index 4326b0e81..e58a71f9f 100644 --- a/public/locales/sl/modules/iframe.json +++ b/public/locales/sl/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "Vstavite katero koli vsebino iz interneta. Nekatera spletna mesta lahko omejijo dostop.", "settings": { - "title": "Nastavitve okvirja IFrame", + "title": "nastavitve okvirja IFrame", "embedUrl": { "label": "URL za vstavljanje" }, diff --git a/public/locales/sl/modules/media-requests-list.json b/public/locales/sl/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/sl/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/sl/modules/media-requests-stats.json b/public/locales/sl/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/sl/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/sl/modules/ping.json b/public/locales/sl/modules/ping.json index 03e0df982..5d1c47ae7 100644 --- a/public/locales/sl/modules/ping.json +++ b/public/locales/sl/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "Prikaže indikator stanja, ki je odvisen od odzivne kode HTTP danega URL-ja." + "description": "Prikaže indikator stanja glede na odzivno kodo HTTP danega URL-ja." }, "states": { "online": "Povezan {{response}}", diff --git a/public/locales/sl/modules/rss.json b/public/locales/sl/modules/rss.json index a6a31649d..7d055cac9 100644 --- a/public/locales/sl/modules/rss.json +++ b/public/locales/sl/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "Nastavitve za RSS pripomoček", "rssFeedUrl": { - "label": "URL naslov vira RSS" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "Ni mogoče pridobiti vira RSS", - "text": "Prišlo je do težave pri doseganju vira RSS. Prepričajte se, da ste pravilno nastavili vir in uporabili veljavni URL naslov RSS, ki ustreza uradni standardni specifikaciji. Po posodobitvi vira boste morda morali shraniti nadzorno ploščo in osvežiti stran." + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/sl/modules/torrents-status.json b/public/locales/sl/modules/torrents-status.json index 1db9d2f5a..1926bf1ec 100644 --- a/public/locales/sl/modules/torrents-status.json +++ b/public/locales/sl/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Dodajte podprt odjemalec Torrent, da si ogledate trenutne prenose" }, "generic": { - "title": "Zgodila se je nepričakovana napaka", + "title": "Prišlo je do nepričakovane napake", "text": "Homarr ni mogel komunicirati z vašimi odjemalci Torrent. Prosimo, preverite svojo konfiguracijo" } }, diff --git a/public/locales/sl/modules/video-stream.json b/public/locales/sl/modules/video-stream.json index cfb629949..4ae86cf43 100644 --- a/public/locales/sl/modules/video-stream.json +++ b/public/locales/sl/modules/video-stream.json @@ -5,7 +5,7 @@ "settings": { "title": "Nastavitve za gradnik videoprenosa", "FeedUrl": { - "label": "URL naslov pretoka" + "label": "URL vira" }, "autoPlay": { "label": "Samodejno predvajanje" diff --git a/public/locales/sl/settings/customization/general.json b/public/locales/sl/settings/customization/general.json index ed867874d..25bf79f33 100644 --- a/public/locales/sl/settings/customization/general.json +++ b/public/locales/sl/settings/customization/general.json @@ -15,7 +15,7 @@ }, "appereance": { "name": "Videz", - "description": "Prilagodite ozadje, barve in videz aplikacij" + "description": "Prilagodite ozadje, barve in videz aplikacije" } } } \ No newline at end of file diff --git a/public/locales/sl/settings/customization/page-appearance.json b/public/locales/sl/settings/customization/page-appearance.json index bc2f65f3e..d0528335b 100644 --- a/public/locales/sl/settings/customization/page-appearance.json +++ b/public/locales/sl/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Meta naslov", - "description": "Naslov, ki se prikaže kot ime zavihka" + "description": "Naslov, prikazan v zavihku brskalnika" }, "logo": { "label": "Logotip", - "description": "Logotip armaturne plošče v zgornjem levem kotu" + "description": "Logotip prikazan v zgornjem levem kotu" }, "favicon": { "label": "Favicon", - "description": "Ikona, ki se uporablja pred imenom zavihka" + "description": "Ikona, prikazana v zavihku brskalnika" }, "background": { "label": "Ozadje" }, "customCSS": { "label": "Po meri CSS", - "description": "Prilagodite vse elemente na nadzorni plošči, priporočljivo le za izkušene uporabnike", + "description": "Dadatno prilagodite pogled s CSS. Priporočljivo le za izkušene uporabnike", "placeholder": "Prilagojeni CSS bo uporabljen kot zadnji", "applying": "Uporaba CSS..." }, diff --git a/public/locales/sl/settings/general/config-changer.json b/public/locales/sl/settings/general/config-changer.json index f2acfe046..c7d2f3ce2 100644 --- a/public/locales/sl/settings/general/config-changer.json +++ b/public/locales/sl/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "Potrdite brisanje konfiguracije", - "warningText": "Želite izbrisati '{{configName}}'", - "text": "Upoštevajte, da izbrisa ni mogoče spremeniti in da bodo vaši podatki trajno izgubljeni. Ko kliknete ta gumb, bo datoteka trajno izbrisana z vašega diska. Poskrbite, da ustvarite ustrezno varnostno kopijo svoje konfiguracije.", + "warningText": "Pobrisali boste '{{configName}}'", + "text": "Upoštevajte, da izbrisa ni mogoče povrniti in da bodo vaši podatki trajno izgubljeni. Ko kliknete ta gumb, bo datoteka trajno izbrisana z vašega diska. Poskrbite, da ustvarite ustrezno varnostno kopijo svoje konfiguracije.", "buttons": { "confirm": "Da, izbrišite '{{configName}}'" } diff --git a/public/locales/sl/settings/general/search-engine.json b/public/locales/sl/settings/general/search-engine.json index 45f831fcc..484b33092 100644 --- a/public/locales/sl/settings/general/search-engine.json +++ b/public/locales/sl/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Iskalnik", "configurationName": "Nastavitve iskalnika", "tips": { - "generalTip": "Uporabite lahko več predpon! Če jih dodate pred poizvedbo, se rezultati filtrirajo. !s (splet), !t (torrenti), !y (YouTube) in !m (mediji).", + "generalTip": "Uporabite lahko več predpon! Če jih dodate pred poizvedbo, boste filtrirali rezultate. !s (splet), !t (torrenti), !y (YouTube) in !m (mediji).", "placeholderTip": "%s lahko uporabite kot nadomestno ime za poizvedbo." }, "customEngine": { diff --git a/public/locales/sl/widgets/error-boundary.json b/public/locales/sl/widgets/error-boundary.json new file mode 100644 index 000000000..7f1c59f40 --- /dev/null +++ b/public/locales/sl/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ups, prišlo je do napake!", + "buttons": { + "details": "Podrobnosti", + "tryAgain": "Poskusite znova" + } + }, + "modal": { + "text": "Opravičujemo se za nevšečnosti! To se ne bi smelo zgoditi - prosimo, da to težavo prijavite na GitHubu.", + "label": "Vaša napaka", + "reportButton": "Prijavite to napako" + } +} \ No newline at end of file diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 3afa381ce..b26ea1c89 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -9,7 +9,8 @@ "version": "Version", "changePosition": "Ändra position", "remove": "Ta bort", - "removeConfirm": "Är du säker på att du vill ta bort {{item}} ?", + "removeConfirm": "Är du säker på att du vill ta bort {{item}}?", + "createItem": "", "sections": { "settings": "Inställningar", "dangerZone": "Farozon" diff --git a/public/locales/sv/layout/modals/about.json b/public/locales/sv/layout/modals/about.json index bf41ad5d4..aa227437b 100644 --- a/public/locales/sv/layout/modals/about.json +++ b/public/locales/sv/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr är en stilren, modern instrumentpanel som ger dig tillgång till alla dina appar och tjänster. Med Homarr kan du få tillgång till och kontrollera allt på ett bekvämt ställe. Homarr integreras sömlöst med de appar du har lagt till, vilket ger dig värdefull information och ger dig fullständig kontroll. Installationen är enkel och Homarr stöder ett stort antal installationsmetoder.", "contact": "Har du problem eller frågor? Kontakta oss!", "addToDashboard": "Lägg till på instrumentpanel", + "tip": "Mod är din modifiertangent, det är Ctrl och kommando/Super/Windows-tangenten", + "key": "Genvägstangent", + "action": "Åtgärd", + "keybinds": "Knapptilldelning", "metrics": { "configurationSchemaVersion": "Version av konfigurationsschemat", "configurationsCount": "Tillgängliga konfigurationer", diff --git a/public/locales/sv/modules/dashdot.json b/public/locales/sv/modules/dashdot.json index 67f97a5f7..99d68045e 100644 --- a/public/locales/sv/modules/dashdot.json +++ b/public/locales/sv/modules/dashdot.json @@ -85,7 +85,7 @@ "noInformation": "Kan inte få information från dash. - Kör du den senaste versionen?", "protocolDowngrade": { "title": "Nedgradering av protokoll upptäcktes", - "text": "Protokollet till din Dash.-instans håller på att nedgraderas. Detta är en säkerhetsrisk eftersom HTTP är okrypterat och angripare kan missbruka denna anslutning. Se till att Dash. också körs på HTTPS eller nedgradera Homarr till HTTP (rekommenderas inte)." + "text": "Anslutningen till din Dash.-instans använder HTTP. Detta är en säkerhetsrisk eftersom HTTP är okrypterat och angripare kan missbruka anslutningen. Se till att Dash. använder HTTPS eller nedgradera Homarr till HTTP (rekommenderas inte)." } }, "graphs": { diff --git a/public/locales/sv/modules/iframe.json b/public/locales/sv/modules/iframe.json index 18c90c392..0fb5bb633 100644 --- a/public/locales/sv/modules/iframe.json +++ b/public/locales/sv/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "", + "name": "iFrame", "description": "", "settings": { - "title": "", + "title": "iFrame-inställningar", "embedUrl": { "label": "" }, diff --git a/public/locales/sv/modules/media-requests-list.json b/public/locales/sv/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/sv/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/sv/modules/media-requests-stats.json b/public/locales/sv/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/sv/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/sv/modules/rss.json b/public/locales/sv/modules/rss.json index 230d75cf5..0ae05342b 100644 --- a/public/locales/sv/modules/rss.json +++ b/public/locales/sv/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/sv/modules/video-stream.json b/public/locales/sv/modules/video-stream.json index 539daa1c4..1aebb3188 100644 --- a/public/locales/sv/modules/video-stream.json +++ b/public/locales/sv/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "", "FeedUrl": { - "label": "" + "label": "Flödes-URL" }, "autoPlay": { - "label": "" + "label": "Automatisk uppspelning" }, "muted": { "label": "" diff --git a/public/locales/sv/settings/customization/page-appearance.json b/public/locales/sv/settings/customization/page-appearance.json index 62eae221e..58cdc56da 100644 --- a/public/locales/sv/settings/customization/page-appearance.json +++ b/public/locales/sv/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Metatitel", - "description": "Titeln som visas som fliknamn" + "description": "Titeln som visas i din webbläsares flik" }, "logo": { "label": "Logotyp", - "description": "Instrumentbrädans logotyp längst upp till vänster" + "description": "Logotypen som visas längst upp till vänster" }, "favicon": { "label": "Favicon", - "description": "Ikonen, som används framför flikens namn" + "description": "Ikonen som visas i din webbläsares flik" }, "background": { "label": "Bakgrund" }, "customCSS": { "label": "Anpassad CSS", - "description": "Anpassa alla element på instrumentpanelen, rekommenderas endast för erfarna användare", + "description": "Vidare kan du anpassa din instrumentpanel med CSS, vilket endast rekommenderas för erfarna användare", "placeholder": "Anpassad CSS tillämpas sist", "applying": "Tillämpar CSS..." }, diff --git a/public/locales/sv/settings/general/config-changer.json b/public/locales/sv/settings/general/config-changer.json index 8a3ca55ef..b8d4aafac 100644 --- a/public/locales/sv/settings/general/config-changer.json +++ b/public/locales/sv/settings/general/config-changer.json @@ -37,7 +37,7 @@ "confirmDeletion": { "title": "Bekräfta radering av din konfiguration", "warningText": "Du är på väg att radera '{{configName}}'", - "text": "Observera att raderingen inte kan göras om och att dina uppgifter kommer att gå förlorade permanent. När du har klickat på den här knappen kommer filen att raderas permanent från din disk. Se till att skapa en lämplig säkerhetskopia av din konfiguration.", + "text": "Observera att raderingen inte kan återställas och att dina uppgifter kommer att gå förlorade för alltid. När du har klickat på den här knappen raderas filen permanent från din disk. Se till att skapa en lämplig säkerhetskopia av din konfiguration.", "buttons": { "confirm": "Ja, radera '{{configName}}'" } diff --git a/public/locales/sv/widgets/error-boundary.json b/public/locales/sv/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/sv/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index a8feb9e50..c0970c518 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -9,13 +9,14 @@ "version": "Версія", "changePosition": "Змінити положення", "remove": "Видалити", - "removeConfirm": "Ви впевнені, що хочете видалити {{item}} ?", + "removeConfirm": "Ви впевнені, що хочете видалити {{item}}?", + "createItem": "", "sections": { "settings": "Налаштування", "dangerZone": "Небезпечна зона" }, "secrets": { - "apiKey": "Ключ API", + "apiKey": "API ключ", "username": "Логін", "password": "Пароль" }, diff --git a/public/locales/uk/layout/modals/about.json b/public/locales/uk/layout/modals/about.json index 83e01a3b0..95efbb0c2 100644 --- a/public/locales/uk/layout/modals/about.json +++ b/public/locales/uk/layout/modals/about.json @@ -2,13 +2,17 @@ "description": "Homarr - це витончена, сучасна інформаційна панель, яка надає всі ваші додатки та сервіси під рукою. З Homarr ви можете отримати доступ до всього і контролювати все в одному зручному місці. Homarr легко інтегрується з додатками, які ви додали, надаючи вам цінну інформацію та забезпечуючи повний контроль. Встановлення дуже просте, і Homarr підтримує широкий спектр методів розгортання.", "contact": "Виникли проблеми або питання? Зв'яжіться з нами!", "addToDashboard": "Додати до панелі інструментів", + "tip": "Mod відноситься до клавіші модифікатора, це клавіші Ctrl та Command/Super/Windows", + "key": "Гарячі клавіши", + "action": "Дії", + "keybinds": "Сполучення клавіш", "metrics": { - "configurationSchemaVersion": "", - "configurationsCount": "", + "configurationSchemaVersion": "Версія схеми конфігурації", + "configurationsCount": "Доступні конфігурації", "version": "Версія", - "nodeEnvironment": "", - "i18n": "", - "locales": "", + "nodeEnvironment": "Середовище вузла", + "i18n": "Завантажено інтернаціональні переклади", + "locales": "Налаштовано інтернаціональні локалі", "experimental_disableEditMode": "ЕКСПЕРИМЕНТАЛЬНО: Вимкнути режим редагування" } } \ No newline at end of file diff --git a/public/locales/uk/layout/modals/add-app.json b/public/locales/uk/layout/modals/add-app.json index ccd59222b..b918c6b74 100644 --- a/public/locales/uk/layout/modals/add-app.json +++ b/public/locales/uk/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "Загальне", - "behaviour": "Поведінка", + "behaviour": "Модель поведінки", "network": "Мережа", "appearance": "Вигляд", "integration": "Інтеграція" @@ -39,14 +39,14 @@ "appearance": { "icon": { "label": "Іконка програми", - "description": "", + "description": "Виберіть іконку, яка буде відображатися на вашій інформаційній панелі. Виберіть одну з іконок {{suggestionsCount}} або введіть власну URL-адресу", "autocomplete": { - "title": "", - "text": "" + "title": "Результатів не знайдено", + "text": "Спробуйте використати більш конкретний пошуковий термін. Якщо ви не можете знайти потрібну піктограму, вставте URL-адресу зображення вище для створення власної піктограми" }, "noItems": { - "title": "", - "text": "" + "title": "Завантаження зовнішніх іконок", + "text": "Це може зайняти кілька секунд" } } }, diff --git a/public/locales/uk/layout/modals/change-position.json b/public/locales/uk/layout/modals/change-position.json index 4e9079512..0374396d4 100644 --- a/public/locales/uk/layout/modals/change-position.json +++ b/public/locales/uk/layout/modals/change-position.json @@ -1,8 +1,8 @@ { - "xPosition": "Положення осі X", + "xPosition": "Положення по осі X", "width": "Ширина", "height": "Висота", - "yPosition": "Положення осі Y", + "yPosition": "Положення по осі Y", "zeroOrHigher": "0 або вище", "betweenXandY": "Між {{min}} та {{max}}" } \ No newline at end of file diff --git a/public/locales/uk/modules/common.json b/public/locales/uk/modules/common.json index 9382da365..66e2bb7a6 100644 --- a/public/locales/uk/modules/common.json +++ b/public/locales/uk/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Параметр невикористані в конфігурації виявив
{{key}}. Homarr не в змозі інтерпретувати та використовувати цей параметр. Щоб уникнути будь-якої несподіваної поведінки, зробіть резервну копію конфігурації та виправте вашу конфігурацію." + "text": "Виявлено невикористаний параметр у конфігурації
{{key}}. Homarr не може інтерпретувати та використовувати цей параметр. Щоб уникнути будь-якої несподіваної поведінки, створіть резервну копію конфігурації та виправте конфігурацію." } } } diff --git a/public/locales/uk/modules/dashdot.json b/public/locales/uk/modules/dashdot.json index f65d4f5a0..86cfbaa3d 100644 --- a/public/locales/uk/modules/dashdot.json +++ b/public/locales/uk/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Показує графіки зовнішньої Dash. всередині Homarr.", + "description": "Відображає графіки зовнішнього Dash. всередині Homarr.", "settings": { "title": "Налаштування віджета Dash.", "url": { @@ -84,8 +84,8 @@ "noService": "Dash. сервіс не знайдено. Будь ласка, додайте його до головної панелі чи встановіть Dash. URL в налаштуваннях модулю", "noInformation": "Не вдалося отримати інформацію з Dash. - чи ви використовуєте останню версію?", "protocolDowngrade": { - "title": "", - "text": "" + "title": "Виявлено зниження рівня протоколу", + "text": "З'єднання з вашим екземпляром Dash. здійснюється за протоколом HTTP. Це загрожує безпеці, оскільки HTTP не зашифрований, і зловмисники можуть зловживати цим з'єднанням. Переконайтеся, що Dash. використовує HTTPS, або знизьте налаштування Homarr до HTTP (не рекомендується)." } }, "graphs": { diff --git a/public/locales/uk/modules/iframe.json b/public/locales/uk/modules/iframe.json index 18c90c392..2a89739d0 100644 --- a/public/locales/uk/modules/iframe.json +++ b/public/locales/uk/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "", + "name": "IFrame", "description": "", "settings": { - "title": "", + "title": "Налаштування iFrame", "embedUrl": { "label": "" }, diff --git a/public/locales/uk/modules/media-requests-list.json b/public/locales/uk/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/uk/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/uk/modules/media-requests-stats.json b/public/locales/uk/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/uk/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/uk/modules/rss.json b/public/locales/uk/modules/rss.json index 55d312096..e17588ec4 100644 --- a/public/locales/uk/modules/rss.json +++ b/public/locales/uk/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "Налаштування віджету RSS", "rssFeedUrl": { - "label": "URL-адреса RSS стрічки" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "Не вдалося отримати RSS стрічку", - "text": "Виникла проблема з доступом до RSS-стрічки. Переконайтеся, що ви'правильно налаштували стрічку і використовуєте правильну адресу RSS, яка відповідає офіційній стандартній специфікації. Після оновлення стрічки вам може знадобитися зберегти вашу інформаційну панель і оновити сторінку." + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/uk/modules/torrents-status.json b/public/locales/uk/modules/torrents-status.json index 69e8e03bc..e6fd31010 100644 --- a/public/locales/uk/modules/torrents-status.json +++ b/public/locales/uk/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Додайте підтримуваний клієнт завантаження Usenet, щоб переглянути поточні завантаження" }, "generic": { - "title": "Сталась непередбачена помилка", + "title": "Трапилась неочікувана помилка", "text": "Homarr не зміг зв'язатися з вашими клієнтами для завантаження. Будь ласка, перевірте свою конфігурацію" } }, diff --git a/public/locales/uk/modules/video-stream.json b/public/locales/uk/modules/video-stream.json index 4f4f3ec9d..85b3e1206 100644 --- a/public/locales/uk/modules/video-stream.json +++ b/public/locales/uk/modules/video-stream.json @@ -8,7 +8,7 @@ "label": "URL-адреса стрічки" }, "autoPlay": { - "label": "Автоматичне відтворення" + "label": "Автовідтворення" }, "muted": { "label": "Звук вимкнуто" diff --git a/public/locales/uk/settings/common.json b/public/locales/uk/settings/common.json index 69855599f..759eac671 100644 --- a/public/locales/uk/settings/common.json +++ b/public/locales/uk/settings/common.json @@ -10,19 +10,19 @@ }, "credits": { "madeWithLove": "Зроблено з ❤️ by @", - "thirdPartyContent": "", + "thirdPartyContent": "Переглянути сторонні матеріали", "thirdPartyContentTable": { - "dependencyName": "", + "dependencyName": "Залежність", "dependencyVersion": "Версія" } }, "grow": "Виростити сітку (зайняти весь простір)", "layout": { "preview": { - "title": "", - "subtitle": "" + "title": "Попередній перегляд", + "subtitle": "Зміни будуть збережені автоматично" }, - "divider": "", + "divider": "Варіанти компонування", "main": "Основне", "sidebar": "Бокова панель", "cannotturnoff": "Неможливо вимкнути", diff --git a/public/locales/uk/settings/customization/color-selector.json b/public/locales/uk/settings/customization/color-selector.json index 8f79746bf..f9a660012 100644 --- a/public/locales/uk/settings/customization/color-selector.json +++ b/public/locales/uk/settings/customization/color-selector.json @@ -1,3 +1,4 @@ { + "colors": "Кольори", "suffix": "{{color}} колір" } \ No newline at end of file diff --git a/public/locales/uk/settings/customization/general.json b/public/locales/uk/settings/customization/general.json index ee9d30b5a..99dee01ec 100644 --- a/public/locales/uk/settings/customization/general.json +++ b/public/locales/uk/settings/customization/general.json @@ -1,21 +1,21 @@ { - "text": "", + "text": "Налаштування дозволяють вам конфігурувати та підлаштовувати роботу з Homarr відповідно до ваших уподобань.", "accordeon": { "layout": { - "name": "", - "description": "" + "name": "Макет", + "description": "Увімкнення та вимкнення елементів на плитках хедера та інформаційної панелі" }, "gridstack": { "name": "", - "description": "" + "description": "Налаштуйте поведінку та стовпці в області інформаційної панелі" }, "pageMetadata": { - "name": "", - "description": "" + "name": "Метадані сторінки", + "description": "Налаштуйте заголовки, логотип та PWA" }, "appereance": { - "name": "", - "description": "" + "name": "Вигляд", + "description": "Налаштування фону, кольорів і додатків" } } } \ No newline at end of file diff --git a/public/locales/uk/settings/customization/gridstack.json b/public/locales/uk/settings/customization/gridstack.json index 18c3d8233..316dd07ef 100644 --- a/public/locales/uk/settings/customization/gridstack.json +++ b/public/locales/uk/settings/customization/gridstack.json @@ -1,10 +1,10 @@ { "columnsCount": { - "labelPreset": "", - "descriptionPreset": "", - "descriptionExceedsPreset": "" + "labelPreset": "Кількість стовпців в {{size}}", + "descriptionPreset": "Кількість стовпців, коли екран має менше ніж {{pixels}} пікселів в ширину", + "descriptionExceedsPreset": "Кількість колонок, коли розмір екрану перевищує {{pixels}} пікселів" }, - "unsavedChanges": "", - "applyChanges": "", + "unsavedChanges": "У вас є незбережені зміни. Натисніть кнопку Застосувати зміни нижче, щоб застосувати та зберегти зміни.", + "applyChanges": "Застосувати зміни", "defaultValues": "" } \ No newline at end of file diff --git a/public/locales/uk/settings/customization/page-appearance.json b/public/locales/uk/settings/customization/page-appearance.json index 722e1985e..ffbb619d8 100644 --- a/public/locales/uk/settings/customization/page-appearance.json +++ b/public/locales/uk/settings/customization/page-appearance.json @@ -1,28 +1,28 @@ { "pageTitle": { "label": "Заголовок сторінки", - "description": "" + "description": "Заголовок інформаційної панелі вгорі ліворуч" }, "metaTitle": { "label": "Мета-заголовок", - "description": "" + "description": "Назва, що відображається у вкладці вашого браузера" }, "logo": { "label": "Логотип", - "description": "" + "description": "Логотип відображається вгорі ліворуч" }, "favicon": { "label": "Іконка", - "description": "" + "description": "Іконка, що відображається у вкладці вашого браузера" }, "background": { "label": "Фон" }, "customCSS": { "label": "Власний CSS", - "description": "", + "description": "Крім того, налаштуйте дашборд за допомогою CSS, що рекомендується лише досвідченим користувачам", "placeholder": "Власний CSS буде оброблятися в останню чергу", - "applying": "" + "applying": "Застосувати CSS..." }, "buttons": { "submit": "Надіслати" diff --git a/public/locales/uk/settings/general/config-changer.json b/public/locales/uk/settings/general/config-changer.json index a4af2ec93..cfec91a79 100644 --- a/public/locales/uk/settings/general/config-changer.json +++ b/public/locales/uk/settings/general/config-changer.json @@ -37,7 +37,7 @@ "confirmDeletion": { "title": "Підтвердьте видалення конфігурації", "warningText": "Ви збираєтеся видалити '{{configName}}'", - "text": "Зверніть увагу, що видалення не є безповоротним і ваші дані будуть втрачені безповоротно. Після натискання цієї кнопки файл буде безповоротно видалено з вашого диска. Переконайтеся, що ви створили адекватну резервну копію вашої конфігурації.", + "text": "Зверніть увагу, що видалення є незворотнім, і ваші дані будуть втрачені безповоротно. Після натискання цієї кнопки файл буде безповоротно видалено з вашого диска. Переконайтеся, що ви створили належну резервну копію вашої конфігурації.", "buttons": { "confirm": "Так, видалити '{{configName}}'" } diff --git a/public/locales/uk/settings/general/search-engine.json b/public/locales/uk/settings/general/search-engine.json index 839abdab7..0ffc9f10a 100644 --- a/public/locales/uk/settings/general/search-engine.json +++ b/public/locales/uk/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Пошукова система", "configurationName": "Налаштування пошукової системи", "tips": { - "generalTip": "Існують кілька префіксів, які ви можете використовувати! Додавання їх перед запитом фільтруватиме результати. !s (Web), !t (Torrents), !y (YouTube) and !m (Media).", + "generalTip": "Ви можете використовувати кілька префіксів! Додавання їх перед запитом відфільтрує результати. !s (веб), !t (торренти), !y (YouTube) і !m (медіа).", "placeholderTip": "%s можна використовувати як заповнювач для запиту." }, "customEngine": { diff --git a/public/locales/uk/widgets/error-boundary.json b/public/locales/uk/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/uk/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index ed6a295dc..cd62c1269 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -9,13 +9,14 @@ "version": "Phiên bản", "changePosition": "Đổi vị trí", "remove": "Xóa", - "removeConfirm": "Bạn có chắc muốn xoá {{item}} ?", + "removeConfirm": "Bạn có chắc muốn xoá {{item}}?", + "createItem": "", "sections": { "settings": "Cài đặt", "dangerZone": "Khu vực nguy hiểm" }, "secrets": { - "apiKey": "Khóa API", + "apiKey": "Khoá API", "username": "Tên người dùng", "password": "Mật khẩu" }, diff --git a/public/locales/vi/layout/modals/about.json b/public/locales/vi/layout/modals/about.json index 4f83dd4bd..8fbf04565 100644 --- a/public/locales/vi/layout/modals/about.json +++ b/public/locales/vi/layout/modals/about.json @@ -1,14 +1,18 @@ { - "description": "", - "contact": "", - "addToDashboard": "", + "description": "Homarr là một bảng điều khiển nuột nà, hiện đại, giúp bạn đặt tất cả các ứng dụng và dịch vụ ngay trong tầm với. Với Homarr, bạn có thể truy cập và kiểm soát mọi thứ thuận tiện từ một nơi nhất định. Homarr tích hợp liền mạch với các ứng dụng bạn đã thêm, cung cấp các thông tin quan trọng tới bạn và trao cho bạn toàn quyền kiểm soát. Cài đặt Homarr rất dễ dàng, và Homarr còn hỗ trợ nhiều phương thức triển khai nữa.", + "contact": "Gặp khó khăn hoặc có thắc mắc? Hãy liên hệ với chúng tôi!", + "addToDashboard": "Thêm vào bảng điều khiển", + "tip": "", + "key": "Phím tắt", + "action": "", + "keybinds": "", "metrics": { - "configurationSchemaVersion": "", - "configurationsCount": "", + "configurationSchemaVersion": "Phiên bản lược đồ cấu hình", + "configurationsCount": "Cấu hình có sẵn", "version": "Phiên bản", - "nodeEnvironment": "", - "i18n": "", - "locales": "", - "experimental_disableEditMode": "" + "nodeEnvironment": "Môi trường node", + "i18n": "Bản dịch I18n đã tải", + "locales": "Cấu hình ngôn ngữ l18n đã thiết lập", + "experimental_disableEditMode": "THỬ NGHIỆM: Tắt chế độ chỉnh sửa" } } \ No newline at end of file diff --git a/public/locales/vi/layout/modals/add-app.json b/public/locales/vi/layout/modals/add-app.json index b0e97ca9f..ead34deae 100644 --- a/public/locales/vi/layout/modals/add-app.json +++ b/public/locales/vi/layout/modals/add-app.json @@ -1,76 +1,76 @@ { "tabs": { - "general": "", - "behaviour": "", + "general": "Chung", + "behaviour": "Hành vi", "network": "Mạng", - "appearance": "", - "integration": "" + "appearance": "Hiển thị", + "integration": "Tích hợp" }, "general": { "appname": { - "label": "", - "description": "" + "label": "Tên ứng dụng", + "description": "Tên dùng để hiển thị trên bảng điều khiển." }, "internalAddress": { - "label": "", - "description": "" + "label": "Địa chỉ nội bộ", + "description": "Địa chỉ IP nội bộ của ứng dụng." }, "externalAddress": { - "label": "", - "description": "" + "label": "Địa chỉ bên ngoài", + "description": "Đường dẫn được mở khi nhấp vào ứng dụng." } }, "behaviour": { "isOpeningNewTab": { - "label": "", - "description": "" + "label": "Mở trong tab mới", + "description": "Mở ứng dụng trong tab mới thay vì tab hiện tại." } }, "network": { "statusChecker": { - "label": "", - "description": "" + "label": "Kiểm tra trạng thái", + "description": "Kiểm tra trạng thái trực tuyến cửa ứng dụng bằng một yêu cầu HTTP(S) đơn giản." }, "statusCodes": { - "label": "", - "description": "" + "label": "Mã trạng thái HTTP", + "description": "Các mã trạng thái HTTP được coi là trực tuyến." } }, "appearance": { "icon": { - "label": "", - "description": "", + "label": "Biểu tượng ứng dụng", + "description": "Chọn một biểu tượng để hiển thị trên bảng điều khiển của bạn. Chọn từ {{suggestionsCount}} biểu tượng hoặc nhập URL của riêng bạn", "autocomplete": { - "title": "", - "text": "" + "title": "Không có kết quả", + "text": "Hãy thử sử dụng cụm từ tìm kiếm cụ thể hơn. Nếu bạn không tìm thấy biểu tượng mình muốn, hãy dán URL hình ảnh vào bên trên để dùng biểu tượng tùy chỉnh" }, "noItems": { - "title": "", - "text": "" + "title": "Đang tải biểu tượng ngoài", + "text": "Có thể mất vài giây" } } }, "integration": { "type": { - "label": "", - "description": "", - "placeholder": "", - "defined": "", - "undefined": "", - "public": "", - "private": "", - "explanationPrivate": "", - "explanationPublic": "" + "label": "Cấu hình tích hợp", + "description": "Cấu hình tích hợp sẽ được sử dụng để kết nối ứng dụng của bạn.", + "placeholder": "Chọn loại tích hợp", + "defined": "Đã định", + "undefined": "Chưa định", + "public": "Công khai", + "private": "Riêng tư", + "explanationPrivate": "Một bí mật riêng tư sẽ chỉ được gửi đến máy chủ một lần. Khi trình duyệt của bạn đã làm mới trang, nó sẽ không bao giờ được gửi lại nữa.", + "explanationPublic": "Một bí mật công khai sẽ luôn được gửi tới ứng dụng khách và có thể truy cập được qua API. Nó không được chứa bất kỳ giá trị bí mật nào như tên người dùng, mật khẩu, mã thông báo, chứng chỉ, v.v!" }, "secrets": { - "description": "", - "warning": "", - "clear": "", - "save": "", - "update": "" + "description": "Để cập nhật một bí mật, hãy nhập một giá trị và nhấp vào nút Lưu. Để xóa một bí mật, hãy sử dụng nút Xóa bí mật.", + "warning": "Thông tin đăng nhập của bạn dùng để truy cập vào tích hợp và bạn nên đừng bao giờ chia sẻ chúng với bất kỳ ai. Nhóm Homarr sẽ không bao giờ yêu cầu thông tin đăng nhập. Hãy nhớ lưu trữ và quản lý khóa của bạn một cách an toàn.", + "clear": "Xóa bí mật", + "save": "Lưu bí mật", + "update": "Cập nhật bí mật" } }, "validation": { - "popover": "" + "popover": "Biểu mẫu của bạn chứa dữ liệu không hợp lệ, vì vậy không thể lưu nó. Vui lòng khắc phục mọi vấn đề và nhấp lại vào nút này để lưu các thay đổi của bạn" } } diff --git a/public/locales/vi/modules/dashdot.json b/public/locales/vi/modules/dashdot.json index 4d3febbb7..2dc01c902 100644 --- a/public/locales/vi/modules/dashdot.json +++ b/public/locales/vi/modules/dashdot.json @@ -11,68 +11,68 @@ "label": "Hiển thị phần trăm" }, "columns": { - "label": "" + "label": "Cột hiển thị" }, "graphHeight": { - "label": "" + "label": "Chiều cao của biểu đồ" }, "graphsOrder": { - "label": "", + "label": "Biểu đồ (thứ tự)", "storage": { "label": "Bộ nhớ", "enabled": { - "label": "" + "label": "Hiển thị trong tiện ích" }, "span": { - "label": "" + "label": "Số cột chiếm" }, "compactView": { - "label": "" + "label": "Hiển thị bằng chữ (gọn)" }, "multiView": { - "label": "" + "label": "Chế độ hiện đa ổ đĩa" } }, "network": { "label": "Mạng", "enabled": { - "label": "" + "label": "Hiển thị trong tiện ích" }, "span": { - "label": "" + "label": "Số cột chiếm" }, "compactView": { - "label": "" + "label": "Hiển thị bằng chữ (gọn)" } }, "cpu": { "label": "CPU", "enabled": { - "label": "" + "label": "Hiển thị trong tiện ích" }, "span": { - "label": "" + "label": "Số cột chiếm" }, "multiView": { - "label": "" + "label": "Chế độ hiện đa nhân" } }, "ram": { - "label": "", + "label": "RAM", "enabled": { - "label": "" + "label": "Hiển thị trong tiện ích" }, "span": { - "label": "" + "label": "Số cột chiếm" } }, "gpu": { "label": "GPU", "enabled": { - "label": "" + "label": "Hiển thị trong tiện ích" }, "span": { - "label": "" + "label": "Số cột chiếm" } } } @@ -85,7 +85,7 @@ "noInformation": "Không thể nhận thông tin từ dash. - bạn có đang chạy phiên bản mới nhất không?", "protocolDowngrade": { "title": "Phát hiện hạ cấp giao thức", - "text": "Giao thức cho phiên bản Dash của bạn. không ở chế độ bảo mật. Đây được coi là rủi ro bảo mật vì HTTP không hỗ trợ mã hóa và những kẻ tấn công có thể lạm dụng nó. Hãy chắc chắn rằng Dash. hoạt động ở chế độ HTTPS hoặc xóa chế độ HTTPS khỏi Homarr (không được khuyến nghị)." + "text": "Dash. của bạn đang sử dụng HTTP. Đây là một rủi ro bảo mật, vì HTTP không được mã hóa và những kẻ tấn công có thể lạm dụng phương thức này. Hãy đảm bảo rằng Dash. sử dụng HTTPS hoặc hạ cấp Homarr xuống HTTP (không khuyến nghị)." } }, "graphs": { diff --git a/public/locales/vi/modules/iframe.json b/public/locales/vi/modules/iframe.json index 18c90c392..8a8979303 100644 --- a/public/locales/vi/modules/iframe.json +++ b/public/locales/vi/modules/iframe.json @@ -1,22 +1,22 @@ { "descriptor": { - "name": "", - "description": "", + "name": "iFrame", + "description": "Nhúng bất kỳ nội dung nào từ internet. Một số trang web có thể hạn chế quyền truy cập.", "settings": { - "title": "", + "title": "Cài đặt iFrame", "embedUrl": { - "label": "" + "label": "URL nhúng" }, "allowFullScreen": { - "label": "" + "label": "Cho phép toàn màn hình" } } }, "card": { "errors": { "noUrl": { - "title": "", - "text": "" + "title": "Nhập một URL", + "text": "Đảm bảo rằng bạn đã nhập một địa chỉ hợp lệ trong cấu hình tiện ích" } } } diff --git a/public/locales/vi/modules/media-requests-list.json b/public/locales/vi/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/vi/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/vi/modules/media-requests-stats.json b/public/locales/vi/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/vi/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/vi/modules/media-server.json b/public/locales/vi/modules/media-server.json index 2be958199..aeffba869 100644 --- a/public/locales/vi/modules/media-server.json +++ b/public/locales/vi/modules/media-server.json @@ -1,23 +1,23 @@ { "descriptor": { - "name": "", - "description": "", + "name": "Máy chủ đa phương tiện", + "description": "Tương tác với máy chủ Jellyfin hoặc Plex của bạn", "settings": { - "title": "" + "title": "Cài đặt cho máy chủ đa phương tiện" } }, "card": { "table": { "header": { - "session": "", - "user": "", - "currentlyPlaying": "" + "session": "Phiên", + "user": "Người dùng", + "currentlyPlaying": "Hiện đang phát" } }, "errors": { "general": { - "title": "", - "text": "" + "title": "Không thể tải nội dung", + "text": "Không thể lấy thông tin từ máy chủ. Vui lòng kiểm tra nhật ký để biết thêm chi tiết" } } } diff --git a/public/locales/vi/modules/rss.json b/public/locales/vi/modules/rss.json index 230d75cf5..ef1cb054e 100644 --- a/public/locales/vi/modules/rss.json +++ b/public/locales/vi/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { - "name": "", - "description": "", + "name": "Tiện ích RSS", + "description": "Lấy các mục từ nguồn cấp dữ liệu RSS và hiển thị chúng. Thường được sử dụng cho tin tức trực tuyến", "settings": { - "title": "", + "title": "Cài đặt cho tiện ích RSS", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/vi/modules/video-stream.json b/public/locales/vi/modules/video-stream.json index 539daa1c4..8c0d0792d 100644 --- a/public/locales/vi/modules/video-stream.json +++ b/public/locales/vi/modules/video-stream.json @@ -1,24 +1,24 @@ { "descriptor": { - "name": "", - "description": "", + "name": "Luồng video", + "description": "Nhúng luồng hoặc video từ camera hoặc trang web", "settings": { - "title": "", + "title": "Cài đặt cho tiện ích luồng video", "FeedUrl": { - "label": "" + "label": "URL nguồn" }, "autoPlay": { - "label": "" + "label": "Tự động phát" }, "muted": { - "label": "" + "label": "Tắt âm thanh" }, "controls": { - "label": "" + "label": "Trình điều khiển video" } } }, "errors": { - "invalidStream": "" + "invalidStream": "Luồng không hợp lệ" } } \ No newline at end of file diff --git a/public/locales/vi/settings/common.json b/public/locales/vi/settings/common.json index 52e8a0709..0f86edda3 100644 --- a/public/locales/vi/settings/common.json +++ b/public/locales/vi/settings/common.json @@ -6,33 +6,33 @@ "customizations": "Cá nhân hoá" }, "tips": { - "configTip": "" + "configTip": "Tải tệp cấu hình của bạn lên chỉ bằng cách kéo và thả tệp vào trong trang!" }, "credits": { "madeWithLove": "From @ with ❤️", - "thirdPartyContent": "", + "thirdPartyContent": "Xem nội dung bên thứ ba", "thirdPartyContentTable": { - "dependencyName": "", + "dependencyName": "Phụ thuộc", "dependencyVersion": "Phiên bản" } }, "grow": "Khung giãn (chiếm toàn bộ không gian)", "layout": { "preview": { - "title": "", - "subtitle": "" + "title": "Xem trước", + "subtitle": "Thay đổi sẽ được tự động lưu" }, - "divider": "", - "main": "", - "sidebar": "", - "cannotturnoff": "", - "dashboardlayout": "", - "enablersidebar": "", - "enablelsidebar": "", - "enablesearchbar": "", - "enabledocker": "", - "enableping": "", - "enablelsidebardesc": "", - "enablersidebardesc": "" + "divider": "Tùy chọn bố cục", + "main": "Chính", + "sidebar": "Thanh bên", + "cannotturnoff": "Không thể tắt", + "dashboardlayout": "Bố cục bảng điều khiển", + "enablersidebar": "Bật thanh bên phải", + "enablelsidebar": "Bật thanh bên trái", + "enablesearchbar": "Bật thanh tìm kiếm", + "enabledocker": "Bật tích hợp docker", + "enableping": "Bật chức năng Ping", + "enablelsidebardesc": "Tuỳ thích. Chỉ có thể được sử dụng cho các ứng dụng và tích hợp", + "enablersidebardesc": "Tuỳ thích. Chỉ có thể được sử dụng cho các ứng dụng và tích hợp" } } diff --git a/public/locales/vi/settings/customization/general.json b/public/locales/vi/settings/customization/general.json index 28da46431..2cbe418a9 100644 --- a/public/locales/vi/settings/customization/general.json +++ b/public/locales/vi/settings/customization/general.json @@ -1,21 +1,21 @@ { - "text": "", + "text": "Tùy chỉnh cho phép bạn định cấu hình và điều chỉnh trải nghiệm Homarr theo ý thích của mình.", "accordeon": { "layout": { "name": "Bố cục", - "description": "" + "description": "Bật và tắt các thành phần trên tiêu đề và ô bảng điều khiển" }, "gridstack": { - "name": "", - "description": "" + "name": "Chồng lưới", + "description": "Tùy chỉnh hành vi và các cột của khu vực bảng điều khiển của bạn" }, "pageMetadata": { "name": "Metadata trang", - "description": "" + "description": "Điều chỉnh tiêu đề, logo và PWA" }, "appereance": { "name": "Hiển thị", - "description": "" + "description": "Tuỳ chỉnh nền, màu và hiển thị của các ứng dụng" } } } \ No newline at end of file diff --git a/public/locales/vi/settings/customization/gridstack.json b/public/locales/vi/settings/customization/gridstack.json index af30d7355..8c0147689 100644 --- a/public/locales/vi/settings/customization/gridstack.json +++ b/public/locales/vi/settings/customization/gridstack.json @@ -1,10 +1,10 @@ { "columnsCount": { - "labelPreset": "", - "descriptionPreset": "", - "descriptionExceedsPreset": "" + "labelPreset": "Số cột cho kích thước {{size}}", + "descriptionPreset": "Số cột khi màn hình có chiều rộng ít hơn {{pixels}} pixel", + "descriptionExceedsPreset": "Số cột khi màn hình có chiều rộng vượt quá {{pixels}} pixel" }, - "unsavedChanges": "", + "unsavedChanges": "Bạn có các thay đổi chưa lưu. Nhấp vào nút Áp dụng thay đổi bên dưới để áp dụng và lưu.", "applyChanges": "Áp dụng thay đổi", "defaultValues": "Giá trị mặc định" } \ No newline at end of file diff --git a/public/locales/vi/settings/customization/page-appearance.json b/public/locales/vi/settings/customization/page-appearance.json index dd2265cea..cbd51a8e7 100644 --- a/public/locales/vi/settings/customization/page-appearance.json +++ b/public/locales/vi/settings/customization/page-appearance.json @@ -1,26 +1,26 @@ { "pageTitle": { "label": "Tiêu đề trang", - "description": "" + "description": "Tiêu đề bảng điều khiển ở góc trái" }, "metaTitle": { "label": "Tiêu đề meta", - "description": "" + "description": "Tiêu đề hiển thị trên tab trình duyệt của bạn" }, "logo": { "label": "Logo", - "description": "" + "description": "Logo bảng điều khiển ở góc trái" }, "favicon": { "label": "Favicon", - "description": "" + "description": "Biểu tượng hiển thị trên tab trình duyệt của bạn" }, "background": { "label": "Hình nền" }, "customCSS": { "label": "CSS tuỳ chỉnh", - "description": "", + "description": "Ngoài ra có thể tùy chỉnh bảng điều khiển của bạn bằng CSS, chỉ được đề xuất cho người dùng có kinh nghiệm", "placeholder": "CSS tùy chỉnh sẽ được áp dụng sau cùng", "applying": "Đang áp dụng CSS..." }, diff --git a/public/locales/vi/settings/general/config-changer.json b/public/locales/vi/settings/general/config-changer.json index 6ede7dab7..7a3675c3c 100644 --- a/public/locales/vi/settings/general/config-changer.json +++ b/public/locales/vi/settings/general/config-changer.json @@ -1,6 +1,6 @@ { "configSelect": { - "label": "", + "label": "Chuyển cấu hình", "description": "{{configCount}} cấu hình có sẵn", "loadingNew": "Đang tải cấu hình...", "pleaseWait": "Vui lòng chờ cho đến khi cấu hình mới được tải!" @@ -36,10 +36,10 @@ }, "confirmDeletion": { "title": "Xác nhận xóa cấu hình của bạn", - "warningText": "", - "text": "", + "warningText": "Bạn sắp xóa '{{configName}}'", + "text": "Xin lưu ý rằng thao tác này không thể hoàn tác và dữ liệu của bạn sẽ bị mất vĩnh viễn. Sau khi nhấp vào nút này, tệp sẽ bị xóa vĩnh viễn khỏi đĩa của bạn. Hãy nhớ tạo một bản sao lưu thích hợp cho cấu hình của bạn.", "buttons": { - "confirm": "" + "confirm": "Vâng, xoá '{{configName}}'" } } }, @@ -58,7 +58,7 @@ }, "deleteFailedDefaultConfig": { "title": "Cấu hình mặc định không thể bị xoá", - "message": "" + "message": "Cấu hình không bị xóa khỏi hệ thống tệp" } } }, @@ -75,12 +75,12 @@ } }, "accept": { - "title": "", - "text": "" + "title": "Tải lên cấu hình", + "text": "Kéo tệp vào đây để tải lên một cấu hình. Chỉ hỗ trợ tệp JSON." }, "reject": { - "title": "", - "text": "" + "title": "Kéo và Thả bị từ chối", + "text": "Định dạng tệp này không được hỗ trợ. Vui lòng chỉ tải tệp JSON." } } } diff --git a/public/locales/vi/widgets/error-boundary.json b/public/locales/vi/widgets/error-boundary.json new file mode 100644 index 000000000..5acb79f5e --- /dev/null +++ b/public/locales/vi/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ối, đã xảy ra lỗi!", + "buttons": { + "details": "Chi tiết", + "tryAgain": "Thử lại" + } + }, + "modal": { + "text": "Chúng tôi rất xin lỗi vì sự bất tiện này! Điều này không nên xảy ra - xin hãy báo cáo lại vấn đề này trên GitHub.", + "label": "Lỗi của bạn", + "reportButton": "Báo cáo lỗi này" + } +} \ No newline at end of file diff --git a/public/locales/zh/common.json b/public/locales/zh/common.json index 2a1c757f6..0c76984bb 100644 --- a/public/locales/zh/common.json +++ b/public/locales/zh/common.json @@ -9,13 +9,14 @@ "version": "版本", "changePosition": "改变位置", "remove": "移除", - "removeConfirm": "确定要删除 {{item}} 吗?", + "removeConfirm": "你确定要删除 {{item}} 吗?", + "createItem": "", "sections": { "settings": "设置", "dangerZone": "危险操作" }, "secrets": { - "apiKey": "Api密钥", + "apiKey": "API密钥", "username": "用户名", "password": "密码" }, diff --git a/public/locales/zh/layout/modals/about.json b/public/locales/zh/layout/modals/about.json index 3717aa10d..244f0bd13 100644 --- a/public/locales/zh/layout/modals/about.json +++ b/public/locales/zh/layout/modals/about.json @@ -1,14 +1,18 @@ { - "description": "Homarr是一个 顺滑现代化 的面板,它把你所有的应用和服务汇于指尖。有了Homarr,你可以在一个页面访问和控制一切。Homarr与你添加的应用无缝交互,为你提供有价值的信息并由你完全把控。安装Homarr轻松简单,并且支持多种部署方式。", + "description": "Homarr是一个 顺滑的现代化 的面板,它把你所有的应用和服务汇于指尖。有了Homarr,你可以在一个页面访问和控制一切。Homarr与你添加的应用无缝交互,为你提供有价值的信息并由你完全控制。安装Homarr轻松简单,并且支持多种部署方式。", "contact": "遇到困难或问题?请与我们联系!", - "addToDashboard": "添加到面板", + "addToDashboard": "添加到控制面板", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { - "configurationSchemaVersion": "配置方案版本", - "configurationsCount": "可用配置", + "configurationSchemaVersion": "配置样式版本", + "configurationsCount": "可用的配置", "version": "版本", "nodeEnvironment": "节点环境", "i18n": "加载了I18n翻译名称空间", "locales": "配置的I18n区域设置", - "experimental_disableEditMode": "" + "experimental_disableEditMode": "实验: 禁用编辑模式" } } \ No newline at end of file diff --git a/public/locales/zh/layout/modals/add-app.json b/public/locales/zh/layout/modals/add-app.json index a38a664ba..4391508d7 100644 --- a/public/locales/zh/layout/modals/add-app.json +++ b/public/locales/zh/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "一般", - "behaviour": "行为", + "behaviour": "", "network": "网络", "appearance": "外观", "integration": "融合" @@ -39,14 +39,14 @@ "appearance": { "icon": { "label": "应用图标", - "description": "", + "description": "选择一个图标来显示在你的仪表板上。从 {{suggestionsCount}} 图标中选择,或输入你自己的URL。", "autocomplete": { - "title": "", - "text": "" + "title": "未找到相应结果", + "text": "尝试使用一个更具体的搜索词。如果你找不到你想要的图标,请粘贴上面的图片URL,以获得一个自定义图标。" }, "noItems": { - "title": "", - "text": "" + "title": "加载外部图标", + "text": "这可能需要几秒钟" } } }, diff --git a/public/locales/zh/modules/common.json b/public/locales/zh/modules/common.json index c37b13e11..7a6ff18e5 100644 --- a/public/locales/zh/modules/common.json +++ b/public/locales/zh/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "在配置中检测到未使用的参数
{{key}}。Homarr目前还无法解释和使用这个参数。为了避免任何意外情况的发生,请备份你的配置并正确修改你的配置。" + "text": "在配置中检测到未使用的参数
{{key}}。Homarr无法解释和使用这个参数。为了避免任何意外的行为,请备份你的配置并纠正你的配置。" } } } diff --git a/public/locales/zh/modules/dashdot.json b/public/locales/zh/modules/dashdot.json index 341fd67f4..817df9efa 100644 --- a/public/locales/zh/modules/dashdot.json +++ b/public/locales/zh/modules/dashdot.json @@ -14,53 +14,53 @@ "label": "" }, "graphHeight": { - "label": "" + "label": "图形的高度" }, "graphsOrder": { "label": "", "storage": { "label": "存储", "enabled": { - "label": "" + "label": "在小工具中显示" }, "span": { "label": "" }, "compactView": { - "label": "" + "label": "显示为文本(紧凑)" }, "multiView": { - "label": "" + "label": "显示为多驱动视图" } }, "network": { "label": "网络", "enabled": { - "label": "" + "label": "在小工具中显示" }, "span": { "label": "" }, "compactView": { - "label": "" + "label": "显示为文本(紧凑)" } }, "cpu": { "label": "CPU", "enabled": { - "label": "" + "label": "在小工具中显示" }, "span": { "label": "" }, "multiView": { - "label": "" + "label": "显示为多核视图" } }, "ram": { - "label": "", + "label": "内存", "enabled": { - "label": "" + "label": "在小工具中显示" }, "span": { "label": "" @@ -69,7 +69,7 @@ "gpu": { "label": "GPU", "enabled": { - "label": "" + "label": "在小工具中显示" }, "span": { "label": "" diff --git a/public/locales/zh/modules/iframe.json b/public/locales/zh/modules/iframe.json index 43dd325ac..c8c132054 100644 --- a/public/locales/zh/modules/iframe.json +++ b/public/locales/zh/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "嵌入互联网上的任何内容。一些网站可能限制访问。", "settings": { - "title": "IFrame设置", + "title": "iFrame设置", "embedUrl": { "label": "嵌入URL" }, diff --git a/public/locales/zh/modules/media-requests-list.json b/public/locales/zh/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/zh/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/zh/modules/media-requests-stats.json b/public/locales/zh/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/zh/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/zh/modules/rss.json b/public/locales/zh/modules/rss.json index 5424c1b3a..df0fe8895 100644 --- a/public/locales/zh/modules/rss.json +++ b/public/locales/zh/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "设置RSS小部件", "rssFeedUrl": { - "label": "RSS订阅网址" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "无法检索到RSS源", - "text": "触发RSS 种子时出现问题。 请确保您've 正确配置了种子并使用一个符合官方标准规格的有效RSS url。 更新种子后,您可能需要保存您的面板并刷新页面。" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/zh/modules/torrents-status.json b/public/locales/zh/modules/torrents-status.json index 98b71ad74..2e63b40b8 100644 --- a/public/locales/zh/modules/torrents-status.json +++ b/public/locales/zh/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "添加一个支持Torrent的客户端来查看你当前的下载情况" }, "generic": { - "title": "发生了一个未知的错误", + "title": "发生了一个意外的错误", "text": "Homarr无法与您的Torrent客户端通信。请检查您的配置" } }, diff --git a/public/locales/zh/modules/video-stream.json b/public/locales/zh/modules/video-stream.json index 7afa408e0..6fe7de322 100644 --- a/public/locales/zh/modules/video-stream.json +++ b/public/locales/zh/modules/video-stream.json @@ -5,7 +5,7 @@ "settings": { "title": "设置视频流小部件", "FeedUrl": { - "label": "订阅URL" + "label": "订阅源的URL" }, "autoPlay": { "label": "自动播放" diff --git a/public/locales/zh/settings/customization/general.json b/public/locales/zh/settings/customization/general.json index 763c37441..01426d32e 100644 --- a/public/locales/zh/settings/customization/general.json +++ b/public/locales/zh/settings/customization/general.json @@ -15,7 +15,7 @@ }, "appereance": { "name": "外观", - "description": "自定义背景,颜色和应用程序外观" + "description": "自定义背景、颜色和应用程序的外观" } } } \ No newline at end of file diff --git a/public/locales/zh/settings/customization/page-appearance.json b/public/locales/zh/settings/customization/page-appearance.json index 0e7b445a0..a95c0dd47 100644 --- a/public/locales/zh/settings/customization/page-appearance.json +++ b/public/locales/zh/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "元标题", - "description": "标题显示为您的标签名称" + "description": "在你的浏览器标签中显示的标题" }, "logo": { "label": "徽标", - "description": "左上角的仪表盘标志" + "description": "显示在左上方的标志" }, "favicon": { "label": "网站图标", - "description": "在您的选项卡名称前面使用的图标" + "description": "在你的浏览器标签中显示的图标" }, "background": { "label": "背景" }, "customCSS": { "label": "自定义CSS", - "description": "自定义你的仪表板上的所有元素,只推荐给有经验的用户", + "description": "此外,使用CSS定制你的仪表板,只推荐给有经验的用户。", "placeholder": "自定义 CSS 将在最后应用", "applying": "应用CSS..." }, diff --git a/public/locales/zh/settings/general/config-changer.json b/public/locales/zh/settings/general/config-changer.json index 484b45273..9b0bd46c0 100644 --- a/public/locales/zh/settings/general/config-changer.json +++ b/public/locales/zh/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "确认删除你的配置", - "warningText": "你即将删除 '{{configName}}'。", - "text": "请注意,删除是不可逆的,您的数据将永久丢失。点击此按钮后,该文件将从您的磁盘上永久删除。请确保为您的配置创建足够的备份。", + "warningText": "您要删除的是 '{{configName}}' 。", + "text": "请注意,删除是不可逆转的,你的数据将被永久地丢失。点击这个按钮后,该文件将从你的磁盘中永久删除。请确保为你的配置创建一个充分的备份。", "buttons": { "confirm": "是的,删除 '{{configName}}' 。" } @@ -57,7 +57,7 @@ "message": "配置删除失败" }, "deleteFailedDefaultConfig": { - "title": "默认值不能被删除", + "title": "默认配置不能被删除", "message": "配置没有从文件系统中删除" } } diff --git a/public/locales/zh/settings/general/search-engine.json b/public/locales/zh/settings/general/search-engine.json index 91f1be4c7..8fef0bc63 100644 --- a/public/locales/zh/settings/general/search-engine.json +++ b/public/locales/zh/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "搜索引擎", "configurationName": "搜索引擎设置", "tips": { - "generalTip": "你可以使用多种前缀!在你的查询语句前面添加这些信息将过滤结果。!s (Web)、!t (torrent)、!y (YouTube)、!m (Media)。", + "generalTip": "你可以使用多个前缀!在你的查询前加入这些前缀将过滤结果。!s (Web), !t (Torrents), !y (YouTube), 和 !m (Media)。", "placeholderTip": "%s 可以作为查询的占位符。" }, "customEngine": { diff --git a/public/locales/zh/widgets/error-boundary.json b/public/locales/zh/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/zh/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file From 5ae6b39fa9404b420171c2e53bf65208327d4acf Mon Sep 17 00:00:00 2001 From: Manuel Date: Fri, 14 Apr 2023 12:22:11 +0200 Subject: [PATCH 95/98] =?UTF-8?q?=F0=9F=90=9B=20Anonymous=20Plex=20user?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tools/server/sdk/plex/plexClient.test.ts | 100 +++++++++++++++---- src/tools/server/sdk/plex/plexClient.ts | 8 +- src/types/api/media-server/session-info.ts | 2 +- 3 files changed, 85 insertions(+), 25 deletions(-) diff --git a/src/tools/server/sdk/plex/plexClient.test.ts b/src/tools/server/sdk/plex/plexClient.test.ts index 48c8af49c..9ef7feee4 100644 --- a/src/tools/server/sdk/plex/plexClient.test.ts +++ b/src/tools/server/sdk/plex/plexClient.test.ts @@ -1,32 +1,33 @@ -import { describe, expect, it } from 'vitest'; +import { afterEach, describe, expect, it } from 'vitest'; import 'vitest-fetch-mock'; import { PlexClient } from './plexClient'; -const mockResponse = ` - -`; - describe('Plex SDK', () => { - it('abc', async () => { + it('return sessions when player, user and session present', async () => { // arrange const client = new PlexClient('https://plex.local', 'MY_TOKEN'); - fetchMock.mockResponseOnce(mockResponse); + fetchMock.mockOnceIf( + 'https://plex.local/status/sessions?X-Plex-Token=MY_TOKEN', + ` + + ` + ); // act const response = await client.getSessions(); @@ -74,4 +75,63 @@ describe('Plex SDK', () => { }, }); }); + + it('return sessions when no player and session present', async () => { + // arrange + const client = new PlexClient('http://plex.local', 'ABCYZT'); + + fetchMock.mockResponseOnce(` + + `); + + // act + const response = await client.getSessions(); + + // assert + expect(fetchMock.requests().length).toBe(1); + expect(fetchMock.requests()[0].url).toBe( + 'http://plex.local/status/sessions?X-Plex-Token=ABCYZT' + ); + expect(response.length).toBe(1); + expect(response[0]).toMatchObject({ + id: undefined, + username: 'Anonymous', + userProfilePicture: undefined, + sessionName: 'Plex Web (Chrome)', + currentlyPlaying: { + name: 'A long title', + type: 'movie', + }, + }); + }); + + it('return empty if no media container', async () => { + // arrange + const client = new PlexClient('http://plex.local', 'Homarr'); + + fetchMock.mockResponseOnce(''); + + // act + const response = await client.getSessions(); + + // assert + expect(fetchMock.requests().length).toBe(1); + expect(response.length).toBe(0); + }); + + afterEach(() => { + fetchMock.mockRestore(); + }); }); diff --git a/src/tools/server/sdk/plex/plexClient.ts b/src/tools/server/sdk/plex/plexClient.ts index 6bc6707ce..eabf5a264 100644 --- a/src/tools/server/sdk/plex/plexClient.ts +++ b/src/tools/server/sdk/plex/plexClient.ts @@ -33,7 +33,7 @@ export class PlexClient { const mediaElement = this.findElement('Media', videoElement.elements); const sessionElement = this.findElement('Session', videoElement.elements); - if (!userElement || !playerElement || !mediaElement || !sessionElement) { + if (!playerElement || !mediaElement) { return undefined; } @@ -43,9 +43,9 @@ export class PlexClient { const transcodingElement = this.findElement('TranscodeSession', videoElement.elements); return { - id: sessionElement.id as string, - username: userElement.title as string, - userProfilePicture: userElement.thumb as string, + id: (sessionElement?.id as string | undefined), + username: userElement?.title ?? 'Anonymous' as string, + userProfilePicture: userElement?.thumb as string | undefined, sessionName: `${playerElement.product} (${playerElement.title})`, currentlyPlaying: { name: videoElement.attributes?.title as string, diff --git a/src/types/api/media-server/session-info.ts b/src/types/api/media-server/session-info.ts index 81e3d943b..6132f9185 100644 --- a/src/types/api/media-server/session-info.ts +++ b/src/types/api/media-server/session-info.ts @@ -1,7 +1,7 @@ export type GenericSessionInfo = { supportsMediaControl: boolean; username: string | undefined; - id: string; + id: string | undefined; sessionName: string; userProfilePicture: string | undefined; currentlyPlaying: GenericCurrentlyPlaying | undefined; From 75cf90c7eac1703f7f051c086e0c17154e0f4ee0 Mon Sep 17 00:00:00 2001 From: ajnart Date: Sun, 16 Apr 2023 17:51:07 +0900 Subject: [PATCH 96/98] =?UTF-8?q?=F0=9F=90=9B=20Fix=20RSS=20client=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dashboard/Tiles/Widgets/WidgetsEditModal.tsx | 2 +- src/widgets/rss/RssWidgetTile.tsx | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx index 03c2d6b34..34d7d985d 100644 --- a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx +++ b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx @@ -254,7 +254,7 @@ const WidgetOptionTypeSwitch: FC<{ withinPortal searchable creatable - getCreateLabel={(query) => t('common:createItem', query)} + getCreateLabel={(query) => t('common:createItem', { item: query })} onChange={(values) => handleChange( key, diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index 132c07b81..c3022fd00 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -29,7 +29,7 @@ const definition = defineWidget({ options: { rssFeedUrl: { type: 'multiple-text', - defaultValue: ['https://github.com/ajnart/homarr/tags.atom'], + defaultValue: [], }, refreshInterval: { type: 'slider', @@ -103,13 +103,13 @@ function RssTile({ widget }: RssTileProps) { ); } - if (data.length < 1 || isError) { + if (data.length < 1 || !data[0].feed || isError) { return (
- {t('card.errors.general.title')} - {t('card.errors.general.text')} + {t('descriptor.card.errors.general.title')} + {t('descriptor.card.errors.general.text')}
); @@ -120,7 +120,7 @@ function RssTile({ widget }: RssTileProps) { {data.map((feed, index) => ( - {feed.feed.items.map((item: any, index: number) => ( + {feed.feed && feed.feed.items.map((item: any, index: number) => ( Date: Sun, 16 Apr 2023 17:51:54 +0900 Subject: [PATCH 97/98] New Crowdin updates (#811) * New translations common.json (Slovenian) * New translations add-app.json (Slovenian) * New translations rss.json (Slovenian) * New translations iframe.json (Slovenian) * New translations error-boundary.json (Slovenian) * New translations error-boundary.json (Vietnamese) * New translations common.json (Spanish) * New translations common.json (Danish) * New translations common.json (German) * New translations common.json (Hebrew) * New translations common.json (Italian) * New translations common.json (Norwegian) * New translations common.json (Polish) * New translations common.json (Russian) * New translations common.json (Slovak) * New translations common.json (Swedish) * New translations common.json (Ukrainian) * New translations common.json (Chinese Simplified) * New translations common.json (English) * New translations common.json (Vietnamese) * New translations add-app.json (French) * New translations add-app.json (Spanish) * New translations add-app.json (Danish) * New translations add-app.json (German) * New translations add-app.json (Hebrew) * New translations add-app.json (Italian) * New translations add-app.json (Norwegian) * New translations add-app.json (Polish) * New translations add-app.json (Russian) * New translations add-app.json (Slovak) * New translations add-app.json (Swedish) * New translations add-app.json (Ukrainian) * New translations add-app.json (Chinese Simplified) * New translations add-app.json (English) * New translations add-app.json (Vietnamese) * New translations add-app.json (Portuguese, Brazilian) * New translations rss.json (Spanish) * New translations rss.json (Danish) * New translations rss.json (German) * New translations rss.json (Hebrew) * New translations rss.json (Italian) * New translations rss.json (Dutch) * New translations rss.json (Norwegian) * New translations rss.json (Polish) * New translations rss.json (Russian) * New translations rss.json (Slovak) * New translations rss.json (Ukrainian) * New translations rss.json (Chinese Simplified) * New translations rss.json (English) * New translations rss.json (Vietnamese) * New translations rss.json (Portuguese, Brazilian) * New translations iframe.json (French) * New translations iframe.json (Spanish) * New translations iframe.json (Danish) * New translations iframe.json (German) * New translations iframe.json (Hebrew) * New translations iframe.json (Italian) * New translations iframe.json (Dutch) * New translations iframe.json (Norwegian) * New translations iframe.json (Polish) * New translations iframe.json (Russian) * New translations iframe.json (Slovak) * New translations iframe.json (Chinese Simplified) * New translations iframe.json (English) * New translations iframe.json (Vietnamese) * New translations iframe.json (Portuguese, Brazilian) * New translations error-boundary.json (Spanish) * New translations error-boundary.json (Danish) * New translations error-boundary.json (German) * New translations error-boundary.json (Hebrew) * New translations error-boundary.json (Italian) * New translations error-boundary.json (Norwegian) * New translations error-boundary.json (Russian) * New translations error-boundary.json (Slovak) * New translations error-boundary.json (English) * New translations common.json (German) * New translations common.json (Spanish) * New translations common.json (Danish) * New translations common.json (German) * New translations common.json (Hebrew) * New translations add-app.json (Spanish) * New translations add-app.json (Danish) * New translations add-app.json (German) * New translations add-app.json (Hebrew) * New translations rss.json (Spanish) * New translations rss.json (Danish) * New translations rss.json (Hebrew) * New translations iframe.json (Spanish) * New translations iframe.json (Danish) * New translations iframe.json (Hebrew) * New translations error-boundary.json (Spanish) * New translations error-boundary.json (Danish) * New translations error-boundary.json (Hebrew) * New translations common.json (German) * New translations common.json (Italian) * New translations add-app.json (Italian) * New translations rss.json (German) * New translations rss.json (Italian) * New translations iframe.json (German) * New translations iframe.json (Italian) * New translations error-boundary.json (German) * New translations error-boundary.json (Italian) * New translations common.json (Norwegian) * New translations add-app.json (Norwegian) * New translations rss.json (Norwegian) * New translations iframe.json (Norwegian) * New translations error-boundary.json (Norwegian) * New translations media-requests-list.json (Ukrainian) * New translations common.json (Ukrainian) * New translations iframe.json (Ukrainian) * New translations common.json (Slovak) * New translations add-app.json (Slovak) * New translations rss.json (Slovak) * New translations iframe.json (Slovak) * New translations error-boundary.json (Slovak) --- public/locales/da/modules/common.json | 2 +- public/locales/de/common.json | 2 +- public/locales/de/layout/modals/add-app.json | 2 +- public/locales/de/modules/common.json | 2 +- public/locales/de/widgets/error-boundary.json | 2 +- public/locales/en/layout/modals/add-app.json | 2 +- public/locales/en/modules/common.json | 2 +- public/locales/en/modules/iframe.json | 2 +- public/locales/en/modules/rss.json | 2 +- public/locales/en/widgets/error-boundary.json | 2 +- public/locales/es/layout/modals/add-app.json | 2 +- public/locales/es/modules/common.json | 2 +- public/locales/es/modules/iframe.json | 2 +- public/locales/es/modules/rss.json | 2 +- public/locales/es/widgets/error-boundary.json | 2 +- public/locales/fr/layout/modals/add-app.json | 2 +- public/locales/fr/modules/iframe.json | 2 +- public/locales/he/layout/modals/add-app.json | 2 +- public/locales/he/modules/common.json | 2 +- public/locales/he/modules/iframe.json | 2 +- public/locales/nl/modules/iframe.json | 2 +- public/locales/nl/modules/rss.json | 2 +- public/locales/no/modules/iframe.json | 2 +- public/locales/no/modules/rss.json | 2 +- public/locales/pl/layout/modals/add-app.json | 2 +- public/locales/pl/modules/common.json | 2 +- public/locales/pl/modules/iframe.json | 2 +- public/locales/pl/modules/rss.json | 2 +- public/locales/pt/layout/modals/add-app.json | 2 +- public/locales/pt/modules/iframe.json | 2 +- public/locales/pt/modules/rss.json | 2 +- public/locales/ru/layout/modals/add-app.json | 2 +- public/locales/ru/modules/common.json | 2 +- public/locales/ru/modules/iframe.json | 2 +- public/locales/ru/modules/rss.json | 2 +- public/locales/ru/widgets/error-boundary.json | 2 +- public/locales/sk/modules/common.json | 2 +- public/locales/sl/layout/modals/add-app.json | 2 +- public/locales/sl/modules/common.json | 2 +- public/locales/sl/modules/iframe.json | 2 +- public/locales/sl/modules/rss.json | 2 +- public/locales/sl/widgets/error-boundary.json | 2 +- public/locales/sv/layout/modals/add-app.json | 2 +- public/locales/sv/modules/common.json | 2 +- public/locales/uk/layout/modals/add-app.json | 2 +- public/locales/uk/modules/common.json | 2 +- public/locales/uk/modules/iframe.json | 10 +++++----- public/locales/uk/modules/media-requests-list.json | 6 +++--- public/locales/uk/modules/rss.json | 2 +- public/locales/vi/layout/modals/add-app.json | 2 +- public/locales/vi/modules/common.json | 2 +- public/locales/vi/modules/iframe.json | 2 +- public/locales/vi/modules/rss.json | 2 +- public/locales/vi/widgets/error-boundary.json | 2 +- public/locales/zh/layout/modals/add-app.json | 2 +- public/locales/zh/modules/common.json | 2 +- public/locales/zh/modules/iframe.json | 2 +- public/locales/zh/modules/rss.json | 2 +- 58 files changed, 64 insertions(+), 64 deletions(-) diff --git a/public/locales/da/modules/common.json b/public/locales/da/modules/common.json index 68d59d38a..2276eb91f 100644 --- a/public/locales/da/modules/common.json +++ b/public/locales/da/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Der er fundet en ubrugt parameter i konfigurationen
{{key}}. Homarr kan ikke fortolke og bruge denne parameter. For at undgå uventet adfærd skal du sikkerhedskopiere din konfiguration og rette konfigurationen." + "text": "Der er fundet en ubrugt parameter i konfigurationen
{{key}}. Homarr kan ikke fortolke og bruge denne parameter. For at undgå uventet adfærd skal du sikkerhedskopiere din konfiguration og tilrette konfigurationen." } } } diff --git a/public/locales/de/common.json b/public/locales/de/common.json index cf843ff4f..cf39f324d 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -10,7 +10,7 @@ "changePosition": "Position wechseln", "remove": "Entfernen", "removeConfirm": "Sind Sie sicher, dass Sie {{item}} entfernen möchten?", - "createItem": "", + "createItem": "+ erstelle {{item}}", "sections": { "settings": "Einstellungen", "dangerZone": "Gefahrenzone" diff --git a/public/locales/de/layout/modals/add-app.json b/public/locales/de/layout/modals/add-app.json index cbb0cad05..51bef3830 100644 --- a/public/locales/de/layout/modals/add-app.json +++ b/public/locales/de/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "App Symbol", - "description": "Wählen Sie ein Symbol, das auf Ihrem Dashboard angezeigt werden soll. Wählen Sie aus {{suggestionsCount}} Icons oder geben Sie Ihre eigene URL ein", + "description": "Wähle ein Symbol, das auf dem Dashboard angezeigt werden soll. Wähle aus {{suggestionsCount}} Symbolen oder gib eine URL ein", "autocomplete": { "title": "Die Suche ergab keine Treffer", "text": "Versuchen Sie, einen spezifischeren Suchbegriff zu verwenden. Wenn Sie das gewünschte Symbol nicht finden können, fügen Sie die obige Bild-URL für ein benutzerdefiniertes Symbol ein" diff --git a/public/locales/de/modules/common.json b/public/locales/de/modules/common.json index 24f082c2c..966778f38 100644 --- a/public/locales/de/modules/common.json +++ b/public/locales/de/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Ungenutzter Parameter in der Konfiguration erkannt
{{key}}. Homarr ist nicht in der Lage, diesen Parameter zu interpretieren und zu verwenden. Um ein unerwartetes Verhalten zu vermeiden, sichern Sie Ihre Konfiguration und korrigieren Sie diese." + "text": "In der Konfiguration wurde ein ungenutzter Parameter erkannt
{{key}}. Homarr kann diesen Parameter nicht interpretieren und verwenden. Um unerwartetes Verhalten zu vermeiden, machen Sie ein Backup und korrigiere deine Konfiguration." } } } diff --git a/public/locales/de/widgets/error-boundary.json b/public/locales/de/widgets/error-boundary.json index 76c2c8380..056e79b1c 100644 --- a/public/locales/de/widgets/error-boundary.json +++ b/public/locales/de/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "Wir entschuldigen uns für die Unannehmlichkeit! Das sollte nicht passieren - bitte melde dieses Problem auf GitHub.", + "text": "Wir entschuldigen uns für die Unannehmlichkeiten! Dies sollte nicht passieren - bitte melden Sie dieses Problem auf GitHub.", "label": "Dein Fehler", "reportButton": "Fehler melden" } diff --git a/public/locales/en/layout/modals/add-app.json b/public/locales/en/layout/modals/add-app.json index dfb741832..403babeaa 100644 --- a/public/locales/en/layout/modals/add-app.json +++ b/public/locales/en/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "App Icon", - "description": "Choose an icon to be displayed on your dashboard. Choose from {{suggestionsCount}} icons or enter your own URL", + "description": "", "autocomplete": { "title": "No results found", "text": "Try to use a more specific search term. If you can't find your desired icon, paste the image URL above for a custom icon" diff --git a/public/locales/en/modules/common.json b/public/locales/en/modules/common.json index 0786350ff..c394f3a26 100644 --- a/public/locales/en/modules/common.json +++ b/public/locales/en/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Unused parameter in configuration detected
{{key}}. Homarr is unable to interpret and use this parameter. To avoid any unexpected behavior, back up and correct your configuration." + "text": "" } } } diff --git a/public/locales/en/modules/iframe.json b/public/locales/en/modules/iframe.json index 0c1d70e03..b7058e677 100644 --- a/public/locales/en/modules/iframe.json +++ b/public/locales/en/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Enter a URL", + "title": "", "text": "Ensure that you've entered a valid address in the configuration of your widget" } } diff --git a/public/locales/en/modules/rss.json b/public/locales/en/modules/rss.json index 8e61c408c..9566f1dc4 100644 --- a/public/locales/en/modules/rss.json +++ b/public/locales/en/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "RSS Widget", - "description": "Grabs the items from an RSS feed and displays them. Commonly used for online news", + "description": "", "settings": { "title": "Settings for RSS widget", "rssFeedUrl": { diff --git a/public/locales/en/widgets/error-boundary.json b/public/locales/en/widgets/error-boundary.json index 73fbb90b4..4c7b31e2d 100644 --- a/public/locales/en/widgets/error-boundary.json +++ b/public/locales/en/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "We're sorry for the inconvenience! This shouldn't happen - please report this issue on GitHub.", + "text": "", "label": "Your error", "reportButton": "Report this error" } diff --git a/public/locales/es/layout/modals/add-app.json b/public/locales/es/layout/modals/add-app.json index 3db9ff890..45f342816 100644 --- a/public/locales/es/layout/modals/add-app.json +++ b/public/locales/es/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Icono App", - "description": "Elige un icono para mostrarse en tu dashboard. Elige entre {{suggestionsCount}} iconos o introduce tu propia URL", + "description": "Elije un icono para ser mostrado en tu dashboard. Elige entre {{suggestionsCount}} iconos o introduce tu propia URL", "autocomplete": { "title": "Ningún resultado encontrado", "text": "Intenta usar un término de búsqueda más específico. Si no puedes encontrar tu icono deseado, pega la URL de la imagen encima para establecer un icono personalizado" diff --git a/public/locales/es/modules/common.json b/public/locales/es/modules/common.json index 56710d392..bd9682232 100644 --- a/public/locales/es/modules/common.json +++ b/public/locales/es/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Parámetro en desuso detectado en la configuración
{{key}}. Homarr es incapaz de interpretar y usar dicho parámetro. Para evitar un comportamiento inesperado, respalda y corríge tu configuración." + "text": "Detectado parámetro en desuso en la configuración
{{key}}. Homarr no puede interpretar y utilizar dicho parámetro. Para evitar cualquier comportamiento inesperado, respalda y corrige tu configuración." } } } diff --git a/public/locales/es/modules/iframe.json b/public/locales/es/modules/iframe.json index 108fa1f91..18e816e5d 100644 --- a/public/locales/es/modules/iframe.json +++ b/public/locales/es/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Introducir una URL", + "title": "Introduce una URL", "text": "Asegúrate de que has introducido una dirección válida en la configuración del widget" } } diff --git a/public/locales/es/modules/rss.json b/public/locales/es/modules/rss.json index 595c2c56b..8cc90cd3b 100644 --- a/public/locales/es/modules/rss.json +++ b/public/locales/es/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Widget RSS", - "description": "Toma los elementos de una fuente RSS y los muestra. Comúnmente utilizado para noticias en línea", + "description": "Recoge los elementos de una fuente RSS, y los muestra. Comúnmente utilizado para noticias online", "settings": { "title": "Ajustes para el widget RSS", "rssFeedUrl": { diff --git a/public/locales/es/widgets/error-boundary.json b/public/locales/es/widgets/error-boundary.json index d7b824172..5afd374b4 100644 --- a/public/locales/es/widgets/error-boundary.json +++ b/public/locales/es/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "¡Sentimos los inconvenientes! Esto no debió de haber pasado - por favor, repórtalo en Github.", + "text": "¡Sentimos el inconveniente! Esto no debería de haber pasado - por favor, reporta el error en GitHub.", "label": "Tu error", "reportButton": "Reportar este error" } diff --git a/public/locales/fr/layout/modals/add-app.json b/public/locales/fr/layout/modals/add-app.json index 5a1a3994e..d8a2ecdc4 100644 --- a/public/locales/fr/layout/modals/add-app.json +++ b/public/locales/fr/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Icône de l’app", - "description": "Choisissez une icône à afficher sur votre tableau de bord. Choisissez parmi les icônes de {{suggestionsCount}} ou entrez votre propre URL", + "description": "", "autocomplete": { "title": "Aucun résultat trouvé", "text": "Essayez d'utiliser un terme de recherche plus spécifique. Si vous ne trouvez pas l'icône souhaitée, collez l'URL de l'image ci-dessus pour obtenir une icône personnalisée" diff --git a/public/locales/fr/modules/iframe.json b/public/locales/fr/modules/iframe.json index 8c861e144..d31b1f61f 100644 --- a/public/locales/fr/modules/iframe.json +++ b/public/locales/fr/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Saisir une URL", + "title": "", "text": "" } } diff --git a/public/locales/he/layout/modals/add-app.json b/public/locales/he/layout/modals/add-app.json index 111f91a0b..4f314247b 100644 --- a/public/locales/he/layout/modals/add-app.json +++ b/public/locales/he/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "סמל אפליקציה", - "description": "בחר סמל שיוצג בלוח המחוונים שלך. ניתן לבחור סמלים מ- {{suggestionsCount}} או הזן כתובת אתר משלך", + "description": "בחר סמל שיוצג בלוח המחוונים. ניתן לבחור סמלים מ- {{suggestionsCount}} או הזן כתובת אתר משלך", "autocomplete": { "title": "לא נמצאו תוצאות", "text": "נא להשתמש במונח חיפוש ספציפי יותר. אם הסמל הרצוי לא נמצא ניתן להעתיק את כתובת האתר של התמונה למעלה עבור סמל מותאם אישית" diff --git a/public/locales/he/modules/common.json b/public/locales/he/modules/common.json index 8fd412e0b..fba71c8c8 100644 --- a/public/locales/he/modules/common.json +++ b/public/locales/he/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "זוהה פרמטר לא בשימוש בתצורה
{{key}}. לא ניתן להשתמש בפרמטר זה. כדי להימנע מכל התנהגות בלתי צפויה, גבה ותקן את התצורה." + "text": "זוהה פרמטר לא בשימוש
{{key}}. לא ניתן להשתמש בפרמטר זה. כדי להימנע מכל התנהגות בלתי צפויה, גבה ותקן את קובץ ההגדרות." } } } diff --git a/public/locales/he/modules/iframe.json b/public/locales/he/modules/iframe.json index 817fcd2c6..115df6937 100644 --- a/public/locales/he/modules/iframe.json +++ b/public/locales/he/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "הזן קישור", + "title": "הזן כתובת אינטרנט", "text": "ודא שהזנת כתובת חוקית בתצורת הווידג'ט שלך" } } diff --git a/public/locales/nl/modules/iframe.json b/public/locales/nl/modules/iframe.json index 02e28d1f3..3acc9cb99 100644 --- a/public/locales/nl/modules/iframe.json +++ b/public/locales/nl/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Voer URL in", + "title": "", "text": "Zorg ervoor dat je een geldig adres hebt ingevoerd in de configuratie van je widget" } } diff --git a/public/locales/nl/modules/rss.json b/public/locales/nl/modules/rss.json index 8e5f7c0de..cf6cfae9b 100644 --- a/public/locales/nl/modules/rss.json +++ b/public/locales/nl/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "RSS Widget", - "description": "Pakt de items uit een RSS-feed en geeft ze weer. Wordt vaak gebruikt voor online nieuws", + "description": "", "settings": { "title": "Instellingen voor RSS widget", "rssFeedUrl": { diff --git a/public/locales/no/modules/iframe.json b/public/locales/no/modules/iframe.json index 9229a7fff..478d489b1 100644 --- a/public/locales/no/modules/iframe.json +++ b/public/locales/no/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Angi en URL", + "title": "Skriv inn en URL", "text": "Sørg for at du har angitt en gyldig adresse i konfigurasjonen av widgeten din" } } diff --git a/public/locales/no/modules/rss.json b/public/locales/no/modules/rss.json index 7abe6eec1..da390a9e2 100644 --- a/public/locales/no/modules/rss.json +++ b/public/locales/no/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "RSS widget", - "description": "Hent elementene fra en RSS-strøm og viser dem. Vanligvis brukt for online nyheter", + "description": "Hent gjenstander fra en RSS-feed og vise dem. Vanligvis brukt for online nyheter", "settings": { "title": "Innstillinger for RSS widget", "rssFeedUrl": { diff --git a/public/locales/pl/layout/modals/add-app.json b/public/locales/pl/layout/modals/add-app.json index b8c6913e2..6e391ac88 100644 --- a/public/locales/pl/layout/modals/add-app.json +++ b/public/locales/pl/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Ikona aplikacji", - "description": "Wybierz ikonę, która będzie wyświetlana na pulpicie. Wybierz ikon z {{suggestionsCount}} lub wprowadź swój własny adres URL", + "description": "", "autocomplete": { "title": "Nie znaleziono żadnych wyników", "text": "Spróbuj użyć bardziej konkretnego hasła wyszukiwania. Jeśli nie możesz znaleźć żądanej ikony, wklej adres URL obrazu powyżej, aby wyszukać niestandardową ikonę" diff --git a/public/locales/pl/modules/common.json b/public/locales/pl/modules/common.json index e4715dce6..1ccc1c899 100644 --- a/public/locales/pl/modules/common.json +++ b/public/locales/pl/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Wykryto nieużywany parametr w konfiguracji
{{key}}. Homarr nie jest w stanie zinterpretować i wykorzystać tego parametru. Aby uniknąć nieoczekiwanego zachowania, wykonaj kopię zapasową i popraw konfigurację." + "text": "" } } } diff --git a/public/locales/pl/modules/iframe.json b/public/locales/pl/modules/iframe.json index 2691b43b5..5f4803f77 100644 --- a/public/locales/pl/modules/iframe.json +++ b/public/locales/pl/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Podaj adres URL", + "title": "", "text": "Upewnij się, że wprowadziłeś poprawny adres w konfiguracji swojego widgetu" } } diff --git a/public/locales/pl/modules/rss.json b/public/locales/pl/modules/rss.json index 643cd6b85..8107055fa 100644 --- a/public/locales/pl/modules/rss.json +++ b/public/locales/pl/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Widget RSS", - "description": "Przechwytywa elementy z kanału RSS i je wyświetla. Często używane do wiadomości online", + "description": "", "settings": { "title": "Ustawienia dla widgetu RSS", "rssFeedUrl": { diff --git a/public/locales/pt/layout/modals/add-app.json b/public/locales/pt/layout/modals/add-app.json index 25fa6c63b..974cba2be 100644 --- a/public/locales/pt/layout/modals/add-app.json +++ b/public/locales/pt/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Ícone de aplicação", - "description": "Escolha um ícone a ser exibido no seu painel. Escolha entre {{suggestionsCount}} ícones ou insira sua própria URL", + "description": "", "autocomplete": { "title": "Nenhum resultado encontrado", "text": "Tente usar um termo de pesquisa mais específico. Se não conseguir encontrar o ícone desejado, cole a URL da imagem acima para obter um ícone personalizado" diff --git a/public/locales/pt/modules/iframe.json b/public/locales/pt/modules/iframe.json index 855432341..23178e2b7 100644 --- a/public/locales/pt/modules/iframe.json +++ b/public/locales/pt/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Insira uma URL", + "title": "", "text": "Certifique-se de que você inseriu um endereço válido na configuração do seu widget" } } diff --git a/public/locales/pt/modules/rss.json b/public/locales/pt/modules/rss.json index ece4a3869..940902a73 100644 --- a/public/locales/pt/modules/rss.json +++ b/public/locales/pt/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Widget RSS", - "description": "Pega os itens de um feed RSS e os exibe. Geralmente usado para notícias on-line", + "description": "", "settings": { "title": "Configurações para o widget RSS", "rssFeedUrl": { diff --git a/public/locales/ru/layout/modals/add-app.json b/public/locales/ru/layout/modals/add-app.json index d6ee7e981..4dec3cf77 100644 --- a/public/locales/ru/layout/modals/add-app.json +++ b/public/locales/ru/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Иконка приложения", - "description": "Выберите иконку, которая будет отображаться на вашей панели. Выберите из {{suggestionsCount}} иконок или введите собственный URL-адрес", + "description": "", "autocomplete": { "title": "Результаты не найдены", "text": "Попробуйте использовать более конкретное условие поиска. Если вы не можете найти нужную иконку, вставьте URL-адрес изображения выше для пользовательской иконки" diff --git a/public/locales/ru/modules/common.json b/public/locales/ru/modules/common.json index f5da987d9..eb23e76a3 100644 --- a/public/locales/ru/modules/common.json +++ b/public/locales/ru/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Обнаружен неиспользуемый параметр в конфигурации
{{key}}. Homarr не может интерпретировать и использовать этот параметр. Чтобы избежать неожиданного поведения, сделайте резервную копию конфигурации и исправьте ее." + "text": "" } } } diff --git a/public/locales/ru/modules/iframe.json b/public/locales/ru/modules/iframe.json index 03fdcd9cd..6e2d447fa 100644 --- a/public/locales/ru/modules/iframe.json +++ b/public/locales/ru/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Введите URL-адрес", + "title": "", "text": "Убедитесь, что вы ввели действительный адрес в конфигурации вашего виджета" } } diff --git a/public/locales/ru/modules/rss.json b/public/locales/ru/modules/rss.json index 638e7be47..40257026f 100644 --- a/public/locales/ru/modules/rss.json +++ b/public/locales/ru/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Виджет RSS", - "description": "Захватывает элементы из RSS-канала и отображает их. Обычно используется для онлайн-новостей", + "description": "", "settings": { "title": "Настройки для виджета RSS", "rssFeedUrl": { diff --git a/public/locales/ru/widgets/error-boundary.json b/public/locales/ru/widgets/error-boundary.json index 76238d372..3528d8326 100644 --- a/public/locales/ru/widgets/error-boundary.json +++ b/public/locales/ru/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "Приносим извинения за доставленные неудобства! Это не должно происходить - пожалуйста, сообщите об этой проблеме на GitHub.", + "text": "", "label": "Ваша ошибка", "reportButton": "Сообщить об ошибке" } diff --git a/public/locales/sk/modules/common.json b/public/locales/sk/modules/common.json index 5d1ab87ae..748c7a306 100644 --- a/public/locales/sk/modules/common.json +++ b/public/locales/sk/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Zistený nepoužitý parameter v konfigurácii
{{key}}. Homarr nedokáže interpretovať a používať tento parameter. Ak chcete zabrániť neočakávanému správaniu, zálohujte si konfiguráciu a opravte ju." + "text": "Zistil sa nepoužitý parameter v konfigurácii
{{key}}. Homarr nedokáže interpretovať a použiť tento parameter. Ak sa chcete vyhnúť akémukoľvek neočakávanému správaniu, zálohujte svoju konfiguráciu a opravte ju." } } } diff --git a/public/locales/sl/layout/modals/add-app.json b/public/locales/sl/layout/modals/add-app.json index 02515e4cf..e53427bdb 100644 --- a/public/locales/sl/layout/modals/add-app.json +++ b/public/locales/sl/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Ikona aplikacije", - "description": "Izberite ikono, ki bo prikazana na nadzorni plošči. Izbirate lahko med ikonami {{suggestionsCount}} ali vnesete svoj URL", + "description": "", "autocomplete": { "title": "Ni rezultatov", "text": "Poskusite uporabiti bolj specifičen iskalni izraz. Če želene ikone ne najdete, prilepite zgornji naslov URL slike za ikono po meri" diff --git a/public/locales/sl/modules/common.json b/public/locales/sl/modules/common.json index 097a44509..c2a7719e6 100644 --- a/public/locales/sl/modules/common.json +++ b/public/locales/sl/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Odkrit neuporabljen parameter v konfiguraciji
{{key}}. Homarr tega parametra ne more interpretirati in uporabiti. Da bi se izognili nepričakovanemu vedenju, naredite varnostno kopijo konfiguracije in jo popravite." + "text": "" } } } diff --git a/public/locales/sl/modules/iframe.json b/public/locales/sl/modules/iframe.json index e58a71f9f..f0a6e5cc4 100644 --- a/public/locales/sl/modules/iframe.json +++ b/public/locales/sl/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Vnesite naslov URL", + "title": "", "text": "Prepričajte se, da ste v konfiguracijo svojega pripomočka vnesli veljaven naslov" } } diff --git a/public/locales/sl/modules/rss.json b/public/locales/sl/modules/rss.json index 7d055cac9..27cf37b8e 100644 --- a/public/locales/sl/modules/rss.json +++ b/public/locales/sl/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "RSS pripomoček", - "description": "Prevzame elemente iz vira RSS in jih prikaže. Običajno se uporablja za spletne novice", + "description": "", "settings": { "title": "Nastavitve za RSS pripomoček", "rssFeedUrl": { diff --git a/public/locales/sl/widgets/error-boundary.json b/public/locales/sl/widgets/error-boundary.json index 7f1c59f40..d8dca36c6 100644 --- a/public/locales/sl/widgets/error-boundary.json +++ b/public/locales/sl/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "Opravičujemo se za nevšečnosti! To se ne bi smelo zgoditi - prosimo, da to težavo prijavite na GitHubu.", + "text": "", "label": "Vaša napaka", "reportButton": "Prijavite to napako" } diff --git a/public/locales/sv/layout/modals/add-app.json b/public/locales/sv/layout/modals/add-app.json index 43e2fe3af..a13682fec 100644 --- a/public/locales/sv/layout/modals/add-app.json +++ b/public/locales/sv/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Appikon", - "description": "Välj en ikon som ska visas på kontrollpanelen. Välj mellan {{suggestionsCount}} ikoner eller ange din egen URL", + "description": "", "autocomplete": { "title": "Hittade inga resultat", "text": "Försök att använda en mer specifik sökterm. Om du inte kan hitta önskad ikon, klistra in bild-URL ovan för en anpassad ikon" diff --git a/public/locales/sv/modules/common.json b/public/locales/sv/modules/common.json index 85ebdf33c..c1eafbab8 100644 --- a/public/locales/sv/modules/common.json +++ b/public/locales/sv/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "En oanvänd parameter i konfigurationen har upptäckts
{{key}}. Homarr kan inte tolka och använda denna parameter. För att undvika oväntat beteende bör du säkerhetskopiera din konfiguration och korrigera den." + "text": "" } } } diff --git a/public/locales/uk/layout/modals/add-app.json b/public/locales/uk/layout/modals/add-app.json index b918c6b74..096e838d9 100644 --- a/public/locales/uk/layout/modals/add-app.json +++ b/public/locales/uk/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Іконка програми", - "description": "Виберіть іконку, яка буде відображатися на вашій інформаційній панелі. Виберіть одну з іконок {{suggestionsCount}} або введіть власну URL-адресу", + "description": "", "autocomplete": { "title": "Результатів не знайдено", "text": "Спробуйте використати більш конкретний пошуковий термін. Якщо ви не можете знайти потрібну піктограму, вставте URL-адресу зображення вище для створення власної піктограми" diff --git a/public/locales/uk/modules/common.json b/public/locales/uk/modules/common.json index 66e2bb7a6..6b19242b3 100644 --- a/public/locales/uk/modules/common.json +++ b/public/locales/uk/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Виявлено невикористаний параметр у конфігурації
{{key}}. Homarr не може інтерпретувати та використовувати цей параметр. Щоб уникнути будь-якої несподіваної поведінки, створіть резервну копію конфігурації та виправте конфігурацію." + "text": "У конфігурації виявлено параметр, який не використовується
{{key}}. Homarr не може інтерпретувати та використовувати цей параметр. Щоб уникнути будь-якої несподіваної поведінки, створіть резервну копію конфігурації та виправте конфігурацію." } } } diff --git a/public/locales/uk/modules/iframe.json b/public/locales/uk/modules/iframe.json index 2a89739d0..bc67566f1 100644 --- a/public/locales/uk/modules/iframe.json +++ b/public/locales/uk/modules/iframe.json @@ -1,22 +1,22 @@ { "descriptor": { "name": "IFrame", - "description": "", + "description": "Вставити будь-який контент з інтернету. Деякі вебсайти можуть обмежувати доступ.", "settings": { "title": "Налаштування iFrame", "embedUrl": { - "label": "" + "label": "Вставити URL" }, "allowFullScreen": { - "label": "" + "label": "Дозволити повноекранний режим" } } }, "card": { "errors": { "noUrl": { - "title": "", - "text": "" + "title": "Введіть URL", + "text": "Переконайтеся, що Ви ввели правильну адресу в налаштуваннях вашого віджета" } } } diff --git a/public/locales/uk/modules/media-requests-list.json b/public/locales/uk/modules/media-requests-list.json index 72c9da211..d43c74360 100644 --- a/public/locales/uk/modules/media-requests-list.json +++ b/public/locales/uk/modules/media-requests-list.json @@ -10,8 +10,8 @@ "pending": "", "nonePending": "", "state": { - "approved": "", - "pendingApproval": "", - "declined": "" + "approved": "Схвалено", + "pendingApproval": "Очікує схвалення", + "declined": "Відхилено" } } diff --git a/public/locales/uk/modules/rss.json b/public/locales/uk/modules/rss.json index e17588ec4..ab0518939 100644 --- a/public/locales/uk/modules/rss.json +++ b/public/locales/uk/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "RSS-віджет", - "description": "Витягує предмети з RSS-стрічки та показує їх. Часто використовується для новин онлайн", + "description": "", "settings": { "title": "Налаштування віджету RSS", "rssFeedUrl": { diff --git a/public/locales/vi/layout/modals/add-app.json b/public/locales/vi/layout/modals/add-app.json index ead34deae..8ee378403 100644 --- a/public/locales/vi/layout/modals/add-app.json +++ b/public/locales/vi/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Biểu tượng ứng dụng", - "description": "Chọn một biểu tượng để hiển thị trên bảng điều khiển của bạn. Chọn từ {{suggestionsCount}} biểu tượng hoặc nhập URL của riêng bạn", + "description": "", "autocomplete": { "title": "Không có kết quả", "text": "Hãy thử sử dụng cụm từ tìm kiếm cụ thể hơn. Nếu bạn không tìm thấy biểu tượng mình muốn, hãy dán URL hình ảnh vào bên trên để dùng biểu tượng tùy chỉnh" diff --git a/public/locales/vi/modules/common.json b/public/locales/vi/modules/common.json index 5189d85c8..014084f9d 100644 --- a/public/locales/vi/modules/common.json +++ b/public/locales/vi/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Đã phát hiện tham số không được sử dụng trong cấu hình
{{key}}. Homarr hiện không thể diễn giải và sử dụng tham số này. Để tránh hành vi không mong muốn, vui lòng sao lưu và sửa đổi cấu hình của bạn đúng cách." + "text": "" } } } diff --git a/public/locales/vi/modules/iframe.json b/public/locales/vi/modules/iframe.json index 8a8979303..bfda9276a 100644 --- a/public/locales/vi/modules/iframe.json +++ b/public/locales/vi/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Nhập một URL", + "title": "", "text": "Đảm bảo rằng bạn đã nhập một địa chỉ hợp lệ trong cấu hình tiện ích" } } diff --git a/public/locales/vi/modules/rss.json b/public/locales/vi/modules/rss.json index ef1cb054e..5e4b82043 100644 --- a/public/locales/vi/modules/rss.json +++ b/public/locales/vi/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Tiện ích RSS", - "description": "Lấy các mục từ nguồn cấp dữ liệu RSS và hiển thị chúng. Thường được sử dụng cho tin tức trực tuyến", + "description": "", "settings": { "title": "Cài đặt cho tiện ích RSS", "rssFeedUrl": { diff --git a/public/locales/vi/widgets/error-boundary.json b/public/locales/vi/widgets/error-boundary.json index 5acb79f5e..793b21507 100644 --- a/public/locales/vi/widgets/error-boundary.json +++ b/public/locales/vi/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "Chúng tôi rất xin lỗi vì sự bất tiện này! Điều này không nên xảy ra - xin hãy báo cáo lại vấn đề này trên GitHub.", + "text": "", "label": "Lỗi của bạn", "reportButton": "Báo cáo lỗi này" } diff --git a/public/locales/zh/layout/modals/add-app.json b/public/locales/zh/layout/modals/add-app.json index 4391508d7..fdaeeb1d6 100644 --- a/public/locales/zh/layout/modals/add-app.json +++ b/public/locales/zh/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "应用图标", - "description": "选择一个图标来显示在你的仪表板上。从 {{suggestionsCount}} 图标中选择,或输入你自己的URL。", + "description": "", "autocomplete": { "title": "未找到相应结果", "text": "尝试使用一个更具体的搜索词。如果你找不到你想要的图标,请粘贴上面的图片URL,以获得一个自定义图标。" diff --git a/public/locales/zh/modules/common.json b/public/locales/zh/modules/common.json index 7a6ff18e5..d95286e50 100644 --- a/public/locales/zh/modules/common.json +++ b/public/locales/zh/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "在配置中检测到未使用的参数
{{key}}。Homarr无法解释和使用这个参数。为了避免任何意外的行为,请备份你的配置并纠正你的配置。" + "text": "" } } } diff --git a/public/locales/zh/modules/iframe.json b/public/locales/zh/modules/iframe.json index c8c132054..57e6b6f26 100644 --- a/public/locales/zh/modules/iframe.json +++ b/public/locales/zh/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "输入 URL", + "title": "", "text": "确保您在小部件配置中输入了一个有效的地址" } } diff --git a/public/locales/zh/modules/rss.json b/public/locales/zh/modules/rss.json index df0fe8895..85f800113 100644 --- a/public/locales/zh/modules/rss.json +++ b/public/locales/zh/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "RSS小工具", - "description": "从RSS提要中抓取项目并显示它们。常用于在线新闻", + "description": "", "settings": { "title": "设置RSS小部件", "rssFeedUrl": { From cad111de6dea26a72203a3f232a70a9f394061c3 Mon Sep 17 00:00:00 2001 From: Thomas Camlong <49837342+ajnart@users.noreply.github.com> Date: Sun, 16 Apr 2023 18:57:18 +0900 Subject: [PATCH 98/98] New Crowdin updates (#817) * New translations common.json (Spanish) * New translations common.json (Danish) * New translations common.json (German) * New translations common.json (Hebrew) * New translations common.json (Italian) * New translations common.json (Norwegian) * New translations common.json (Slovak) * New translations common.json (Ukrainian) * New translations add-app.json (Spanish) * New translations add-app.json (Danish) * New translations add-app.json (German) * New translations add-app.json (Hebrew) * New translations add-app.json (Italian) * New translations add-app.json (Norwegian) * New translations add-app.json (Slovak) * New translations rss.json (Spanish) * New translations rss.json (Danish) * New translations rss.json (German) * New translations rss.json (Hebrew) * New translations rss.json (Italian) * New translations rss.json (Norwegian) * New translations rss.json (Slovak) * New translations iframe.json (Spanish) * New translations iframe.json (Danish) * New translations iframe.json (German) * New translations iframe.json (Hebrew) * New translations iframe.json (Italian) * New translations iframe.json (Norwegian) * New translations iframe.json (Slovak) * New translations iframe.json (Ukrainian) * New translations error-boundary.json (Spanish) * New translations error-boundary.json (Danish) * New translations error-boundary.json (German) * New translations error-boundary.json (Hebrew) * New translations error-boundary.json (Italian) * New translations error-boundary.json (Norwegian) * New translations error-boundary.json (Slovak) --- public/locales/da/layout/modals/add-app.json | 2 +- public/locales/da/modules/common.json | 2 +- public/locales/da/modules/iframe.json | 2 +- public/locales/da/modules/rss.json | 2 +- public/locales/da/widgets/error-boundary.json | 2 +- public/locales/de/layout/modals/add-app.json | 2 +- public/locales/de/modules/common.json | 2 +- public/locales/de/modules/iframe.json | 2 +- public/locales/de/modules/rss.json | 2 +- public/locales/de/widgets/error-boundary.json | 2 +- public/locales/es/layout/modals/add-app.json | 2 +- public/locales/es/modules/common.json | 2 +- public/locales/es/modules/iframe.json | 2 +- public/locales/es/modules/rss.json | 2 +- public/locales/es/widgets/error-boundary.json | 2 +- public/locales/he/layout/modals/add-app.json | 2 +- public/locales/he/modules/common.json | 2 +- public/locales/he/modules/iframe.json | 2 +- public/locales/he/modules/rss.json | 2 +- public/locales/he/widgets/error-boundary.json | 2 +- public/locales/it/layout/modals/add-app.json | 2 +- public/locales/it/modules/common.json | 2 +- public/locales/it/modules/iframe.json | 2 +- public/locales/it/modules/rss.json | 2 +- public/locales/it/widgets/error-boundary.json | 2 +- public/locales/no/layout/modals/add-app.json | 2 +- public/locales/no/modules/common.json | 2 +- public/locales/no/modules/iframe.json | 2 +- public/locales/no/modules/rss.json | 2 +- public/locales/no/widgets/error-boundary.json | 2 +- public/locales/sk/layout/modals/add-app.json | 2 +- public/locales/sk/modules/common.json | 2 +- public/locales/sk/modules/iframe.json | 2 +- public/locales/sk/modules/rss.json | 2 +- public/locales/sk/widgets/error-boundary.json | 2 +- public/locales/uk/modules/common.json | 2 +- public/locales/uk/modules/iframe.json | 2 +- 37 files changed, 37 insertions(+), 37 deletions(-) diff --git a/public/locales/da/layout/modals/add-app.json b/public/locales/da/layout/modals/add-app.json index 8056ba346..9736d729d 100644 --- a/public/locales/da/layout/modals/add-app.json +++ b/public/locales/da/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "App Ikon", - "description": "Vælg et ikon der skal vises på dit dashboard. Vælg mellem {{suggestionsCount}} ikoner eller indtast din egen URL", + "description": "", "autocomplete": { "title": "Ingen resultater fundet", "text": "Prøv at bruge et mere specifikt søgeord. Hvis du ikke kan finde det ønskede ikon, kan du indsætte billedets URL ovenfor for at få et brugerdefineret ikon" diff --git a/public/locales/da/modules/common.json b/public/locales/da/modules/common.json index 2276eb91f..2a501ced2 100644 --- a/public/locales/da/modules/common.json +++ b/public/locales/da/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Der er fundet en ubrugt parameter i konfigurationen
{{key}}. Homarr kan ikke fortolke og bruge denne parameter. For at undgå uventet adfærd skal du sikkerhedskopiere din konfiguration og tilrette konfigurationen." + "text": "" } } } diff --git a/public/locales/da/modules/iframe.json b/public/locales/da/modules/iframe.json index 826d57a4c..df3f07a90 100644 --- a/public/locales/da/modules/iframe.json +++ b/public/locales/da/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Indtast URL", + "title": "", "text": "Sørg for, at du har indtastet en gyldig adresse i konfigurationen af din widget" } } diff --git a/public/locales/da/modules/rss.json b/public/locales/da/modules/rss.json index e80ae6b2a..32caf93c0 100644 --- a/public/locales/da/modules/rss.json +++ b/public/locales/da/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "RSS Widget", - "description": "Griber elementerne fra et RSS-feed og viser dem. Anvendes normalt til online-nyheder", + "description": "", "settings": { "title": "Indstillinger for RSS-widget", "rssFeedUrl": { diff --git a/public/locales/da/widgets/error-boundary.json b/public/locales/da/widgets/error-boundary.json index 377d366b9..dda1952ce 100644 --- a/public/locales/da/widgets/error-boundary.json +++ b/public/locales/da/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "Vi beklager ulejligheden! Dette burde ikke ske - rapporter venligst dette problem på GitHub.", + "text": "", "label": "Din fejl", "reportButton": "Rapportér denne fejl" } diff --git a/public/locales/de/layout/modals/add-app.json b/public/locales/de/layout/modals/add-app.json index 51bef3830..c3503d412 100644 --- a/public/locales/de/layout/modals/add-app.json +++ b/public/locales/de/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "App Symbol", - "description": "Wähle ein Symbol, das auf dem Dashboard angezeigt werden soll. Wähle aus {{suggestionsCount}} Symbolen oder gib eine URL ein", + "description": "", "autocomplete": { "title": "Die Suche ergab keine Treffer", "text": "Versuchen Sie, einen spezifischeren Suchbegriff zu verwenden. Wenn Sie das gewünschte Symbol nicht finden können, fügen Sie die obige Bild-URL für ein benutzerdefiniertes Symbol ein" diff --git a/public/locales/de/modules/common.json b/public/locales/de/modules/common.json index 966778f38..c216b43d1 100644 --- a/public/locales/de/modules/common.json +++ b/public/locales/de/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "In der Konfiguration wurde ein ungenutzter Parameter erkannt
{{key}}. Homarr kann diesen Parameter nicht interpretieren und verwenden. Um unerwartetes Verhalten zu vermeiden, machen Sie ein Backup und korrigiere deine Konfiguration." + "text": "" } } } diff --git a/public/locales/de/modules/iframe.json b/public/locales/de/modules/iframe.json index d03a3423f..a2b36924b 100644 --- a/public/locales/de/modules/iframe.json +++ b/public/locales/de/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Geben Sie eine URL ein", + "title": "", "text": "Stellen Sie sicher, dass Sie in der Konfiguration Ihres Widgets eine gültige Adresse eingegeben haben" } } diff --git a/public/locales/de/modules/rss.json b/public/locales/de/modules/rss.json index 553bd143b..488ed34ff 100644 --- a/public/locales/de/modules/rss.json +++ b/public/locales/de/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "RSS-Widget", - "description": "Nimmt die Einträge aus einem RSS-Feed und zeigt sie an. Wird üblicherweise für Online-Nachrichten verwendet", + "description": "", "settings": { "title": "Einstellungen für das RSS-Widget", "rssFeedUrl": { diff --git a/public/locales/de/widgets/error-boundary.json b/public/locales/de/widgets/error-boundary.json index 056e79b1c..22fcf5dac 100644 --- a/public/locales/de/widgets/error-boundary.json +++ b/public/locales/de/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "Wir entschuldigen uns für die Unannehmlichkeiten! Dies sollte nicht passieren - bitte melden Sie dieses Problem auf GitHub.", + "text": "", "label": "Dein Fehler", "reportButton": "Fehler melden" } diff --git a/public/locales/es/layout/modals/add-app.json b/public/locales/es/layout/modals/add-app.json index 45f342816..188a298b7 100644 --- a/public/locales/es/layout/modals/add-app.json +++ b/public/locales/es/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Icono App", - "description": "Elije un icono para ser mostrado en tu dashboard. Elige entre {{suggestionsCount}} iconos o introduce tu propia URL", + "description": "", "autocomplete": { "title": "Ningún resultado encontrado", "text": "Intenta usar un término de búsqueda más específico. Si no puedes encontrar tu icono deseado, pega la URL de la imagen encima para establecer un icono personalizado" diff --git a/public/locales/es/modules/common.json b/public/locales/es/modules/common.json index bd9682232..07775cac0 100644 --- a/public/locales/es/modules/common.json +++ b/public/locales/es/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Detectado parámetro en desuso en la configuración
{{key}}. Homarr no puede interpretar y utilizar dicho parámetro. Para evitar cualquier comportamiento inesperado, respalda y corrige tu configuración." + "text": "" } } } diff --git a/public/locales/es/modules/iframe.json b/public/locales/es/modules/iframe.json index 18e816e5d..400729f1d 100644 --- a/public/locales/es/modules/iframe.json +++ b/public/locales/es/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Introduce una URL", + "title": "", "text": "Asegúrate de que has introducido una dirección válida en la configuración del widget" } } diff --git a/public/locales/es/modules/rss.json b/public/locales/es/modules/rss.json index 8cc90cd3b..195161e23 100644 --- a/public/locales/es/modules/rss.json +++ b/public/locales/es/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Widget RSS", - "description": "Recoge los elementos de una fuente RSS, y los muestra. Comúnmente utilizado para noticias online", + "description": "", "settings": { "title": "Ajustes para el widget RSS", "rssFeedUrl": { diff --git a/public/locales/es/widgets/error-boundary.json b/public/locales/es/widgets/error-boundary.json index 5afd374b4..e6d2e9254 100644 --- a/public/locales/es/widgets/error-boundary.json +++ b/public/locales/es/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "¡Sentimos el inconveniente! Esto no debería de haber pasado - por favor, reporta el error en GitHub.", + "text": "", "label": "Tu error", "reportButton": "Reportar este error" } diff --git a/public/locales/he/layout/modals/add-app.json b/public/locales/he/layout/modals/add-app.json index 4f314247b..d59415746 100644 --- a/public/locales/he/layout/modals/add-app.json +++ b/public/locales/he/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "סמל אפליקציה", - "description": "בחר סמל שיוצג בלוח המחוונים. ניתן לבחור סמלים מ- {{suggestionsCount}} או הזן כתובת אתר משלך", + "description": "", "autocomplete": { "title": "לא נמצאו תוצאות", "text": "נא להשתמש במונח חיפוש ספציפי יותר. אם הסמל הרצוי לא נמצא ניתן להעתיק את כתובת האתר של התמונה למעלה עבור סמל מותאם אישית" diff --git a/public/locales/he/modules/common.json b/public/locales/he/modules/common.json index fba71c8c8..4ec400cde 100644 --- a/public/locales/he/modules/common.json +++ b/public/locales/he/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "זוהה פרמטר לא בשימוש
{{key}}. לא ניתן להשתמש בפרמטר זה. כדי להימנע מכל התנהגות בלתי צפויה, גבה ותקן את קובץ ההגדרות." + "text": "" } } } diff --git a/public/locales/he/modules/iframe.json b/public/locales/he/modules/iframe.json index 115df6937..3d4eb4e11 100644 --- a/public/locales/he/modules/iframe.json +++ b/public/locales/he/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "הזן כתובת אינטרנט", + "title": "", "text": "ודא שהזנת כתובת חוקית בתצורת הווידג'ט שלך" } } diff --git a/public/locales/he/modules/rss.json b/public/locales/he/modules/rss.json index 8c88666f7..8d5cb42ce 100644 --- a/public/locales/he/modules/rss.json +++ b/public/locales/he/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "וידג׳ט רסס", - "description": "תופס את הפריטים מעדכון רסס ומציג אותם. שימוש נפוץ לחדשות מקוונות", + "description": "", "settings": { "title": "הגדרות עבור וידג׳ט רסס", "rssFeedUrl": { diff --git a/public/locales/he/widgets/error-boundary.json b/public/locales/he/widgets/error-boundary.json index 001a87d17..606223f6b 100644 --- a/public/locales/he/widgets/error-boundary.json +++ b/public/locales/he/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "אנו מצטערים על אי הנוחות! זה לא אמור לקרות - אנא דווח על בעיה זו ב-GitHub.", + "text": "", "label": "השגיאה שלך", "reportButton": "דווח על שגיאה זו" } diff --git a/public/locales/it/layout/modals/add-app.json b/public/locales/it/layout/modals/add-app.json index 7f4ea37a6..ef69d972e 100644 --- a/public/locales/it/layout/modals/add-app.json +++ b/public/locales/it/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Icona App", - "description": "Scegli un'icona da visualizzare sulla tua dashboard. Scegli tra {{suggestionsCount}} icone o inserisci il tuo URL", + "description": "", "autocomplete": { "title": "Nessun risultato trovato", "text": "Prova a usare un termine di ricerca più specifico. Se non riesci a trovare l'icona desiderata, incolla l'URL dell'immagine sopra per un'icona personalizzata" diff --git a/public/locales/it/modules/common.json b/public/locales/it/modules/common.json index c5f229a8f..22b8f5848 100644 --- a/public/locales/it/modules/common.json +++ b/public/locales/it/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Parametro non utilizzato nella configurazione rilevata
{{key}}. Homarr non è in grado d'interpretare e utilizzare questo parametro. Onde evitare comportamenti imprevisti, eseguire un backup della configurazione e correggerla." + "text": "" } } } diff --git a/public/locales/it/modules/iframe.json b/public/locales/it/modules/iframe.json index 8d3888534..640afe963 100644 --- a/public/locales/it/modules/iframe.json +++ b/public/locales/it/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Inserisci un URL", + "title": "", "text": "Assicurarsi di aver inserito un indirizzo valido nella configurazione del widget" } } diff --git a/public/locales/it/modules/rss.json b/public/locales/it/modules/rss.json index ba247b73b..61a716d66 100644 --- a/public/locales/it/modules/rss.json +++ b/public/locales/it/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Widget RSS", - "description": "Ottiene gli oggetti da un feed RSS e li visualizza. Utilizzati comunemente per le notizie online", + "description": "", "settings": { "title": "Impostazioni del widget RSS", "rssFeedUrl": { diff --git a/public/locales/it/widgets/error-boundary.json b/public/locales/it/widgets/error-boundary.json index 910090362..04bea4ed9 100644 --- a/public/locales/it/widgets/error-boundary.json +++ b/public/locales/it/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "Ci dispiace per l'inconveniente! Ciò non dovrebbe accadere - si prega di segnalare questo problema su GitHub.", + "text": "", "label": "Il tuo errore", "reportButton": "Segnala questo errore" } diff --git a/public/locales/no/layout/modals/add-app.json b/public/locales/no/layout/modals/add-app.json index 2a4e702ca..2fe372abb 100644 --- a/public/locales/no/layout/modals/add-app.json +++ b/public/locales/no/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "App ikon", - "description": "Velg et ikon som skal vises på dashbordet. Velg fra {{suggestionsCount}} ikoner eller skriv inn din egen URL", + "description": "", "autocomplete": { "title": "Ingen resultater funnet", "text": "Prøv å bruke et mer spesifikt søkeord. Hvis du ikke finner det ønskede ikonet, lim inn URL adressen for et egendefinert ikon" diff --git a/public/locales/no/modules/common.json b/public/locales/no/modules/common.json index ca115f068..c595fe213 100644 --- a/public/locales/no/modules/common.json +++ b/public/locales/no/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Ubrukt parameter i konfigurasjon oppdaget
{{key}}. Homarr kan ikke tolke og bruke dette parameteret. For å unngå uventet oppførsel, sikkerhetskopier din konfigurasjon og korriger konfigurasjonen." + "text": "" } } } diff --git a/public/locales/no/modules/iframe.json b/public/locales/no/modules/iframe.json index 478d489b1..e4477d402 100644 --- a/public/locales/no/modules/iframe.json +++ b/public/locales/no/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Skriv inn en URL", + "title": "", "text": "Sørg for at du har angitt en gyldig adresse i konfigurasjonen av widgeten din" } } diff --git a/public/locales/no/modules/rss.json b/public/locales/no/modules/rss.json index da390a9e2..868b9d6c1 100644 --- a/public/locales/no/modules/rss.json +++ b/public/locales/no/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "RSS widget", - "description": "Hent gjenstander fra en RSS-feed og vise dem. Vanligvis brukt for online nyheter", + "description": "", "settings": { "title": "Innstillinger for RSS widget", "rssFeedUrl": { diff --git a/public/locales/no/widgets/error-boundary.json b/public/locales/no/widgets/error-boundary.json index cf93d278f..fa8a7484f 100644 --- a/public/locales/no/widgets/error-boundary.json +++ b/public/locales/no/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "Vi beklager forstyrrelsen! Dette skal ikke skje - vennligst rapporter dette problemet på GitHub.", + "text": "", "label": "Din feilmelding", "reportButton": "Rapporter denne feilen" } diff --git a/public/locales/sk/layout/modals/add-app.json b/public/locales/sk/layout/modals/add-app.json index 5e3c79f2f..02082d444 100644 --- a/public/locales/sk/layout/modals/add-app.json +++ b/public/locales/sk/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Ikona aplikácie", - "description": "Vyberte si ikonu, ktorá sa má zobrazovať na prístrojovej doske. Vyberte si z ikon {{suggestionsCount}} alebo zadajte vlastnú adresu URL", + "description": "", "autocomplete": { "title": "Nenašli sa žiadne výsledky", "text": "Skúste použiť konkrétnejší vyhľadávací výraz. Ak nemôžete nájsť požadovanú ikonu, vložte vyššie uvedenú adresu URL obrázka pre vlastnú ikonu" diff --git a/public/locales/sk/modules/common.json b/public/locales/sk/modules/common.json index 748c7a306..fd004e68d 100644 --- a/public/locales/sk/modules/common.json +++ b/public/locales/sk/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Zistil sa nepoužitý parameter v konfigurácii
{{key}}. Homarr nedokáže interpretovať a použiť tento parameter. Ak sa chcete vyhnúť akémukoľvek neočakávanému správaniu, zálohujte svoju konfiguráciu a opravte ju." + "text": "" } } } diff --git a/public/locales/sk/modules/iframe.json b/public/locales/sk/modules/iframe.json index 61ae0e064..703f85b85 100644 --- a/public/locales/sk/modules/iframe.json +++ b/public/locales/sk/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Zadajte adresu URL", + "title": "", "text": "Skontrolujte, či ste v konfigurácii mini aplikácie zadali platnú adresu" } } diff --git a/public/locales/sk/modules/rss.json b/public/locales/sk/modules/rss.json index 6b807af02..a7292861d 100644 --- a/public/locales/sk/modules/rss.json +++ b/public/locales/sk/modules/rss.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "RSS mini aplikácia", - "description": "Stiahne položky z informačného kanála RSS a zobrazí ich. Bežne sa používa pre online správy", + "description": "", "settings": { "title": "Nastavenia mini aplikácie RSS", "rssFeedUrl": { diff --git a/public/locales/sk/widgets/error-boundary.json b/public/locales/sk/widgets/error-boundary.json index e2edbac4c..76b1a1b6d 100644 --- a/public/locales/sk/widgets/error-boundary.json +++ b/public/locales/sk/widgets/error-boundary.json @@ -7,7 +7,7 @@ } }, "modal": { - "text": "Ospravedlňujeme sa za nepríjemnosti! Toto by sa nemalo stávať - nahláste tento problém na GitHub.", + "text": "", "label": "Vaša chyba", "reportButton": "Nahlásiť chybu" } diff --git a/public/locales/uk/modules/common.json b/public/locales/uk/modules/common.json index 6b19242b3..1963ca573 100644 --- a/public/locales/uk/modules/common.json +++ b/public/locales/uk/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "У конфігурації виявлено параметр, який не використовується
{{key}}. Homarr не може інтерпретувати та використовувати цей параметр. Щоб уникнути будь-якої несподіваної поведінки, створіть резервну копію конфігурації та виправте конфігурацію." + "text": "" } } } diff --git a/public/locales/uk/modules/iframe.json b/public/locales/uk/modules/iframe.json index bc67566f1..8da476cfa 100644 --- a/public/locales/uk/modules/iframe.json +++ b/public/locales/uk/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Введіть URL", + "title": "", "text": "Переконайтеся, що Ви ввели правильну адресу в налаштуваннях вашого віджета" } }
{t('card.table.header.session')}