From e897c21aa2a7bba2607358e408a94964ec2624b5 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Mon, 6 Feb 2023 22:59:15 +0100 Subject: [PATCH 01/23] =?UTF-8?q?=F0=9F=93=9D=20Update=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 176 +++++++++------------- docs/banner.png | Bin 0 -> 49700 bytes docs/installation-button.png | Bin 0 -> 7653 bytes docs/section-contribute.png | Bin 0 -> 28640 bytes docs/section-features.png | Bin 0 -> 19037 bytes docs/section-installation.png | Bin 0 -> 17426 bytes docs/section-preview.png | Bin 0 -> 24447 bytes docs/section-widgets-and-integrations.png | Bin 0 -> 33553 bytes 8 files changed, 75 insertions(+), 101 deletions(-) create mode 100644 docs/banner.png create mode 100644 docs/installation-button.png create mode 100644 docs/section-contribute.png create mode 100644 docs/section-features.png create mode 100644 docs/section-installation.png create mode 100644 docs/section-preview.png create mode 100644 docs/section-widgets-and-integrations.png diff --git a/README.md b/README.md index e2c16d572..707c03492 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -

Homarr

+

@@ -21,128 +21,102 @@

-Join the discord! — Don't forget to star the repo if you are enjoying the project! -

-

Read the Docs

-

- Demo ↗️ Install ➡️ + + Demo ✨ + + • + + Install 💻 + • + + Translations 🈺 + • + + Discord 👋 +

---- - - +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. -Homarr is a simple and lightweight homepage for your server, that helps you easily access all of your services in one place. +
+
-It integrates with the services you use to display information on the homepage (E.g. Show upcoming Sonarr/Radarr releases). +![](docs/section-features.png) +- 🖌️ Highly customizeable with 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 +- 📄 Detailed documentation and active community +- 🔍 Search though 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, ...) +- 💵 Free and Open-Source - your data stays on your device -For a full list of integrations, [head over to our documentation](https://homarr.dev/docs/integrations/). +
+
-If you have any questions about Homarr or want to share information with us, please go to one of the following places: +![](docs/section-widgets-and-integrations.png) -- [Github Discussions](https://github.com/ajnart/homarr/discussions) -- [Discord Server](https://discord.gg/aCsmEV5RgA) +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 will integrate with the following applications of yours: -**For more information, [read the documentation!](https://homarr.dev/docs/about)** +- 📥 Torrent clients + - [Delguge](https://homarr.dev/docs/integrations/#deluge) + - [Transmission](https://homarr.dev/docs/integrations/#transmission) + - [qBittorrent](https://homarr.dev/docs/integrations/#qbittorrent-integration) +- 📥 Usenet clients + - [SABnzbd](https://homarr.dev/docs/integrations/#sabnzbd) + - [NZBGet](https://homarr.dev/docs/integrations/#nzbget) +- 📚 Media collection managers + - [Sonarr](https://homarr.dev/docs/integrations/#sonarr) + - [Radarr](https://homarr.dev/docs/integrations/#radarr) + - [Lidarr](https://homarr.dev/docs/integrations/#lidarr) + - [Readarr](https://homarr.dev/docs/integrations/#readarr) +- 🎞️ Media request managers + - [Overseerr](https://homarr.dev/docs/integrations/#overseerr--jellyseerr) + - [Jellyseerr](https://homarr.dev/docs/integrations/#overseerr--jellyseerr) +- 🔌 [Dash.](https://homarr.dev/docs/integrations/#dash) +- 🐳 [Docker](https://homarr.dev/docs/integrations/#docker) -
- Table of Contents -

+We're constantly adding new integrations and widgets, which will enhance your experience even further. -- [✨ Features](#-features) -- [👀 Preview](#-preview) -- [🛠️ Running a dev environment](#️-running-a-dev-environment) -- [💖 Contributing](#-contributing) -- [📜 License](#-license) +
+
-

-
+![](docs/section-preview.png) ---- +https://homarr.dev/img/videos/showcase.mp4 -## ✨ Features -- Integrates with services you use. -- Search the web directly from your homepage. -- Real-time status indicator for every service. -- Automatically finds icons while you type the name of a service. -- Widgets that can display all types of information. -- Easy deployment with Docker. -- Very light-weight and fast. -- Free and Open-Source. -- And more... +
+
-**[⤴️ Back to Top](#homarr)** +![](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: -## 👀 Preview -Homarr Preview + + + -**[⤴️ Back to Top](#homarr)** +
+
---- +![](docs/section-contribute.png) +Homarr is maintained by motivated developers in their free-time. +We work for fun and learning on this project. -### 🛠️ Running a dev environment +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. -_Requirements_: -- [Git](https://git-scm.com/downloads) -- [NodeJS](https://nodejs.org/en/) _(Latest or LTS)_ -- [Yarn](https://yarnpkg.com/) +[_![](https://cdn.ko-fi.com/cdn/kofi3.png?v=3)_](https://ko-fi.com/ajnart) -**Installing** +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. -- Clone the GitHub repo: `git clone https://github.com/ajnart/homarr.git` & `cd homarr` -- Install all dependencies: `yarn install` -- Build the source: `yarn build` -- Start the NextJS web server: ``yarn start`` -- *Note: If you want to update the code in real time, launch with ``yarn dev``* - -**[⤴️ Back to Top](#homarr)** - ---- - -## 💖 Contributing **Please read our [Contribution Guidelines](/CONTRIBUTING.md)** -All contributions are highly appreciated. - -**[⤴️ Back to Top](#homarr)** - ---- - - -## 📜 License -Homarr is Licensed under [MIT](https://en.wikipedia.org/wiki/MIT_License) - -```txt -Copyright © 2022 Thomas "ajnart" Camlong - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -**[⤴️ Back to Top](#homarr)** - ---- - -

- Thank you for visiting! For more information read the documentation! -
-
-

+All contributions, regardless of their size or scope, are welcome and highly apprechiated! Thank you ❤️ diff --git a/docs/banner.png b/docs/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..823bb50b1c3f0eb1c0fb2d8e84fb32e92846a8f1 GIT binary patch literal 49700 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 Sej%+Nh{cZmI;q=i&;1XAYDMb+ literal 0 HcmV?d00001 diff --git a/docs/installation-button.png b/docs/installation-button.png new file mode 100644 index 0000000000000000000000000000000000000000..991cb9b27fe447b2d782a407941ca79bcbbe6bb4 GIT binary patch literal 7653 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 BSNZ?| literal 0 HcmV?d00001 diff --git a/docs/section-features.png b/docs/section-features.png new file mode 100644 index 0000000000000000000000000000000000000000..b1854bf3a11e5981e25bda7d881ebabfb2034967 GIT binary patch literal 19037 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 literal 0 HcmV?d00001 diff --git a/docs/section-installation.png b/docs/section-installation.png new file mode 100644 index 0000000000000000000000000000000000000000..92fa4474f832986b1877dd205a93207de40074b5 GIT binary patch literal 17426 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 literal 0 HcmV?d00001 diff --git a/docs/section-preview.png b/docs/section-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..6e43e043d5b16558fee9b34a39d530080a3d85a9 GIT binary patch literal 24447 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 literal 0 HcmV?d00001 From b3b24e48002e3e1dc32e6a42ab3ae2a12d5d618c Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Mon, 6 Feb 2023 23:10:05 +0100 Subject: [PATCH 02/23] Update README.md --- README.md | 2 +- docs/banner.xcf | Bin 0 -> 191318 bytes docs/section-template.xcf | Bin 0 -> 137153 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/banner.xcf create mode 100644 docs/section-template.xcf diff --git a/README.md b/README.md index 707c03492..e1f87c958 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ We're constantly adding new integrations and widgets, which will enhance your ex ![](docs/section-preview.png) -https://homarr.dev/img/videos/showcase.mp4 +https://user-images.githubusercontent.com/30572287/217098893-5880e7de-13d0-42c5-b505-f7921593396f.mp4

diff --git a/docs/banner.xcf b/docs/banner.xcf new file mode 100644 index 0000000000000000000000000000000000000000..f58de314c9d98dd2599fa030310d0314769ecb89 GIT binary patch literal 191318 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 z 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 HPAUEcvN%Tb literal 0 HcmV?d00001 diff --git a/docs/section-template.xcf b/docs/section-template.xcf new file mode 100644 index 0000000000000000000000000000000000000000..7c2094bd44e9b5e6f80d77a9f3abce66296b34a8 GIT binary patch literal 137153 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 literal 0 HcmV?d00001 From 0b07fdd3805f6c7f2bdb6a4331f7651e6175dc74 Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 8 Feb 2023 22:11:38 +0900 Subject: [PATCH 03/23] =?UTF-8?q?=F0=9F=8C=90=20Add=20Norwegian=20and=20Sl?= =?UTF-8?q?ovak?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- next-i18next.config.js | 2 ++ src/tools/language.ts | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/next-i18next.config.js b/next-i18next.config.js index 32d339fe9..3ce413d58 100644 --- a/next-i18next.config.js +++ b/next-i18next.config.js @@ -25,6 +25,8 @@ module.exports = { 'uk', 'zh', 'el', + 'sk', + 'nb', ], localePath: path.resolve('./public/locales'), fallbackLng: 'en', diff --git a/src/tools/language.ts b/src/tools/language.ts index f0d0e9471..fb2335cfe 100644 --- a/src/tools/language.ts +++ b/src/tools/language.ts @@ -75,6 +75,20 @@ export const languages: Language[] = [ translatedName: 'LOLCAT', emoji: '🐱', }, + // Norwegian + { + shortName: 'nb', + originalName: 'Norsk', + translatedName: 'Norwegian', + emoji: '🇳🇴', + }, + // Slovak + { + shortName: 'sk', + originalName: 'Slovenčina', + translatedName: 'Slovak', + emoji: '🇸🇰', + }, { shortName: 'nl', originalName: 'Nederlands', From ba3f841ba3f5e6aa8904d74b49cea783fbcdb1b0 Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 8 Feb 2023 22:15:44 +0900 Subject: [PATCH 04/23] Fix typos --- next-i18next.config.js | 2 +- src/tools/language.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/next-i18next.config.js b/next-i18next.config.js index 3ce413d58..7785243d3 100644 --- a/next-i18next.config.js +++ b/next-i18next.config.js @@ -26,7 +26,7 @@ module.exports = { 'zh', 'el', 'sk', - 'nb', + 'no', ], localePath: path.resolve('./public/locales'), fallbackLng: 'en', diff --git a/src/tools/language.ts b/src/tools/language.ts index fb2335cfe..8974e62a4 100644 --- a/src/tools/language.ts +++ b/src/tools/language.ts @@ -77,7 +77,7 @@ export const languages: Language[] = [ }, // Norwegian { - shortName: 'nb', + shortName: 'no', originalName: 'Norsk', translatedName: 'Norwegian', emoji: '🇳🇴', From fab018a10e5001053c65f4fcb084c0debe4632c2 Mon Sep 17 00:00:00 2001 From: Yossi Hillali Date: Wed, 8 Feb 2023 23:23:53 +0200 Subject: [PATCH 05/23] =?UTF-8?q?=E2=9C=A8=20Add=20video-stream=20widget?= =?UTF-8?q?=20(#685)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- next-i18next.config.js | 1 + package.json | 4 +- public/locales/en/modules/video-stream.json | 24 ++ src/pages/_app.tsx | 1 + src/tools/server/translation-namespaces.ts | 1 + src/widgets/index.ts | 2 + src/widgets/video/VideoFeed.tsx | 68 ++++ src/widgets/video/VideoStreamTile.tsx | 68 ++++ yarn.lock | 334 +++++++++++++++++--- 9 files changed, 452 insertions(+), 51 deletions(-) create mode 100644 public/locales/en/modules/video-stream.json create mode 100644 src/widgets/video/VideoFeed.tsx create mode 100644 src/widgets/video/VideoStreamTile.tsx diff --git a/next-i18next.config.js b/next-i18next.config.js index 32d339fe9..99a975092 100644 --- a/next-i18next.config.js +++ b/next-i18next.config.js @@ -30,6 +30,7 @@ module.exports = { fallbackLng: 'en', localeDetection: true, returnEmptyString: false, + debug: process.env.NODE_ENV === 'development', }, reloadOnPrerender: process.env.NODE_ENV === 'development', }; diff --git a/package.json b/package.json index 6a5469457..309c79323 100644 --- a/package.json +++ b/package.json @@ -81,6 +81,7 @@ "@types/ping": "^0.4.1", "@types/react": "17.0.1", "@types/uuid": "^8.3.4", + "@types/video.js": "^7.3.51", "@typescript-eslint/eslint-plugin": "^5.30.7", "@typescript-eslint/parser": "^5.30.7", "babel-loader": "^9.1.2", @@ -99,7 +100,8 @@ "jest": "^28.1.3", "prettier": "^2.7.1", "sass": "^1.56.1", - "typescript": "^4.7.4" + "typescript": "^4.7.4", + "video.js": "^8.0.3" }, "resolutions": { "@types/react": "17.0.2", diff --git a/public/locales/en/modules/video-stream.json b/public/locales/en/modules/video-stream.json new file mode 100644 index 000000000..3b84c3574 --- /dev/null +++ b/public/locales/en/modules/video-stream.json @@ -0,0 +1,24 @@ +{ + "descriptor": { + "name": "Video Stream", + "description": "Embed a video stream or video from a camera or a website", + "settings": { + "title": "Settings for video stream widget", + "cameraFeedUrl": { + "label": "Camera feed url" + }, + "autoPlay": { + "label": "Auto play" + }, + "muted": { + "label": "Muted audio" + }, + "controls": { + "label": "Video player controls" + } + } + }, + "errors": { + "invalidStream": "Invalid stream" + } +} \ No newline at end of file diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index b20595f4f..4b10110a6 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -26,6 +26,7 @@ import { ServerSidePackageAttributesType, } from '../tools/server/getPackageVersion'; import { usePackageAttributesStore } from '../tools/client/zustands/usePackageAttributesStore'; +import 'video.js/dist/video-js.css'; import '../styles/global.scss'; import '@uiw/react-textarea-code-editor/dist.css'; diff --git a/src/tools/server/translation-namespaces.ts b/src/tools/server/translation-namespaces.ts index dab3acea9..daa866df2 100644 --- a/src/tools/server/translation-namespaces.ts +++ b/src/tools/server/translation-namespaces.ts @@ -33,6 +33,7 @@ export const dashboardNamespaces = [ 'modules/dashdot', 'modules/overseerr', 'modules/common-media-cards', + 'modules/video-stream', ]; export const loginNamespaces = ['authentication/login']; diff --git a/src/widgets/index.ts b/src/widgets/index.ts index e38a2ba53..aac770ead 100644 --- a/src/widgets/index.ts +++ b/src/widgets/index.ts @@ -5,6 +5,7 @@ import usenet from './useNet/UseNetTile'; import weather from './weather/WeatherTile'; import torrent from './torrent/TorrentTile'; import torrentNetworkTraffic from './download-speed/TorrentNetworkTrafficTile'; +import videoStream from './video/VideoStreamTile'; export default { calendar, @@ -14,4 +15,5 @@ export default { 'torrents-status': torrent, dlspeed: torrentNetworkTraffic, date, + 'video-stream': videoStream, }; diff --git a/src/widgets/video/VideoFeed.tsx b/src/widgets/video/VideoFeed.tsx new file mode 100644 index 000000000..604426c70 --- /dev/null +++ b/src/widgets/video/VideoFeed.tsx @@ -0,0 +1,68 @@ +import { LoadingOverlay } from '@mantine/core'; +import { createStyles } from '@mantine/styles'; +import { useEffect, useRef, useState } from 'react'; +import videojs from 'video.js'; +import 'video.js/dist/video-js.css'; + +interface VideoFeedProps { + source: string; + muted: boolean; + autoPlay: boolean; + controls: boolean; +} + +const VideoFeed = ({ source, controls, autoPlay, muted }: VideoFeedProps) => { + const videoRef = useRef(null); + const [player, setPlayer] = useState>(); + + const { classes, cx } = useStyles(); + + useEffect(() => { + // make sure Video.js player is only initialized once + if (player) { + return; + } + + const videoElement = videoRef.current; + if (!videoElement) { + return; + } + + setPlayer(videojs(videoElement, { autoplay: autoPlay, muted, controls }, () => {})); + }, [videoRef]); + + useEffect( + () => () => { + if (!player) { + return; + } + + if (player.isDisposed()) { + return; + } + + player.dispose(); + }, + [player] + ); + + return ( + <> + + {/* eslint-disable-next-line jsx-a11y/media-has-caption */} + + + ); +}; + +const useStyles = createStyles(({ radius }) => ({ + video: { + height: '100%', + borderRadius: radius.md, + overflow: 'hidden', + }, +})); + +export default VideoFeed; diff --git a/src/widgets/video/VideoStreamTile.tsx b/src/widgets/video/VideoStreamTile.tsx new file mode 100644 index 000000000..873af47c8 --- /dev/null +++ b/src/widgets/video/VideoStreamTile.tsx @@ -0,0 +1,68 @@ +import { Center, Group, Stack, Title } from '@mantine/core'; +import { IconDeviceCctv, IconHeartBroken } from '@tabler/icons'; +import { useTranslation } from 'react-i18next'; +import { defineWidget } from '../helper'; +import { IWidget } from '../widgets'; +import VideoFeed from './VideoFeed'; + +const definition = defineWidget({ + id: 'video-stream', + icon: IconDeviceCctv, + options: { + cameraFeedUrl: { + type: 'text', + defaultValue: '', + }, + autoPlay: { + type: 'switch', + defaultValue: true, + }, + muted: { + type: 'switch', + defaultValue: true, + }, + controls: { + type: 'switch', + defaultValue: false, + }, + }, + gridstack: { + minWidth: 3, + minHeight: 2, + maxWidth: 12, + maxHeight: 12, + }, + component: VideoStreamWidget, +}); + +export type VideoStreamWidget = IWidget<(typeof definition)['id'], typeof definition>; + +interface VideoStreamWidgetProps { + widget: VideoStreamWidget; +} + +function VideoStreamWidget({ widget }: VideoStreamWidgetProps) { + const { t } = useTranslation('modules/video-stream'); + if (!widget.properties.cameraFeedUrl) { + return ( +

+ + + {t('errors.invalidStream')} + +
+ ); + } + return ( + + + + ); +} + +export default definition; diff --git a/yarn.lock b/yarn.lock index bcd5cf7e8..66dc9f29c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -371,7 +371,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.10.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.19.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7": +"@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.19.0, @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" dependencies: @@ -2268,6 +2268,13 @@ __metadata: languageName: node linkType: hard +"@types/video.js@npm:^7.3.51": + version: 7.3.51 + resolution: "@types/video.js@npm:7.3.51" + checksum: 95b8e75da82b401965bd2b31648f7917495b9f2eda3773e1c50f027ed1f457760731912c71cf2c4e8c4b3087b29844bdcc92577bb56ae5c49b771039f7da819e + languageName: node + linkType: hard + "@types/yargs-parser@npm:*": version: 21.0.0 resolution: "@types/yargs-parser@npm:21.0.0" @@ -2420,6 +2427,64 @@ __metadata: languageName: node linkType: hard +"@videojs/http-streaming@npm:3.0.0": + version: 3.0.0 + resolution: "@videojs/http-streaming@npm:3.0.0" + dependencies: + "@babel/runtime": ^7.12.5 + "@videojs/vhs-utils": 4.0.0 + aes-decrypter: 4.0.1 + global: ^4.4.0 + m3u8-parser: ^6.0.0 + mpd-parser: ^1.0.1 + mux.js: 6.2.0 + video.js: ^7 || ^8 + peerDependencies: + video.js: ^7 || ^8 + checksum: e479cd981a067e9b28c9c90f41936b5587939060690f4eabdbbe5ca54adb509515e03270297a03b545087d76dfd1ab7b9461e5e1ef62a8e0ed57d80fa52bbe2c + languageName: node + linkType: hard + +"@videojs/vhs-utils@npm:4.0.0, @videojs/vhs-utils@npm:^4.0.0": + version: 4.0.0 + resolution: "@videojs/vhs-utils@npm:4.0.0" + dependencies: + "@babel/runtime": ^7.12.5 + global: ^4.4.0 + url-toolkit: ^2.2.1 + checksum: a824900d0173478c80ee9683f67cc041e204d79ac280ae369adb03357d51d8a51b296bd6aff96b2cce66633a63f05a10d11d53da6ec063ee7c4d6e38dabd826e + languageName: node + linkType: hard + +"@videojs/vhs-utils@npm:^3.0.5": + version: 3.0.5 + resolution: "@videojs/vhs-utils@npm:3.0.5" + dependencies: + "@babel/runtime": ^7.12.5 + global: ^4.4.0 + url-toolkit: ^2.2.1 + checksum: 637dc9a8848027eab4213d6e85439d216577d0cb0346767c15bbb07a5a730aa30545f0b5d7bfd636f40212e490f34bf103e331f0bc180b4d3c245e77f30b437f + languageName: node + linkType: hard + +"@videojs/xhr@npm:2.6.0": + version: 2.6.0 + resolution: "@videojs/xhr@npm:2.6.0" + dependencies: + "@babel/runtime": ^7.5.5 + global: ~4.4.0 + is-function: ^1.0.1 + checksum: 217d3d49f8088461959840f93f0b45d713e6d03254d89352e2eb4bfca9501eee03bac25d0ad878e976c9cbec902039210a86906ef57a5f8d86bfdfa1a3999def + languageName: node + linkType: hard + +"@xmldom/xmldom@npm:^0.8.3": + version: 0.8.6 + resolution: "@xmldom/xmldom@npm:0.8.6" + checksum: f17ac6d99a971a6aeb831fcfc5cfa86f367664e45815046548814b2deb17ccc421fef4e0d5ba29e66179d112b552f6caa5680064f8e7bd8a389b788a60404c8e + languageName: node + linkType: hard + "abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -2452,6 +2517,18 @@ __metadata: languageName: node linkType: hard +"aes-decrypter@npm:4.0.1, aes-decrypter@npm:^4.0.1": + version: 4.0.1 + resolution: "aes-decrypter@npm:4.0.1" + dependencies: + "@babel/runtime": ^7.12.5 + "@videojs/vhs-utils": ^3.0.5 + global: ^4.4.0 + pkcs7: ^1.0.4 + checksum: c09f47e928d88af2387690e47e60001be74095c10007fe44ef57663db17ee8e391310c6f0b023bc63257afe442900cc916f55fba7dd27ec1c394d616b062d664 + languageName: node + linkType: hard + "agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" @@ -3327,14 +3404,14 @@ __metadata: languageName: node linkType: hard -"color-name@npm:1.1.3": +"color-name@npm:1.1.3, color-name@npm:^1.0.0": version: 1.1.3 resolution: "color-name@npm:1.1.3" checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d languageName: node linkType: hard -"color-name@npm:^1.0.0, color-name@npm:~1.1.4": +"color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 @@ -3573,14 +3650,7 @@ __metadata: languageName: node linkType: hard -"d3-format@npm:1 - 2": - version: 2.0.0 - resolution: "d3-format@npm:2.0.0" - checksum: c4d3c8f9941d097d514d3986f54f21434e08e5876dc08d1d65226447e8e167600d5b9210235bb03fd45327225f04f32d6e365f08f76d2f4b8bff81594851aaf7 - languageName: node - linkType: hard - -"d3-format@npm:^1.4.4": +"d3-format@npm:1 - 2, d3-format@npm:^1.4.4": version: 1.4.5 resolution: "d3-format@npm:1.4.5" checksum: 1b8b2c0bca182173bccd290a43e8b635a83fc8cfe52ec878c7bdabb997d47daac11f2b175cebbe73f807f782ad655f542bdfe18180ca5eb3498a3a82da1e06ab @@ -3644,7 +3714,14 @@ __metadata: languageName: node linkType: hard -"d3-time@npm:1 - 2, d3-time@npm:^2.1.1": +"d3-time@npm:1 - 2, d3-time@npm:^1.0.11": + version: 1.1.0 + resolution: "d3-time@npm:1.1.0" + checksum: 33fcfff94ff093dde2048c190ecca8b39fe0ec8b3c61e9fc39c5f6072ce5b86dd2b91823f086366995422bbbac7f74fd9abdb7efe4f292a73b1c6197c699cc78 + languageName: node + linkType: hard + +"d3-time@npm:^2.1.1": version: 2.1.1 resolution: "d3-time@npm:2.1.1" dependencies: @@ -3653,13 +3730,6 @@ __metadata: languageName: node linkType: hard -"d3-time@npm:^1.0.11": - version: 1.1.0 - resolution: "d3-time@npm:1.1.0" - checksum: 33fcfff94ff093dde2048c190ecca8b39fe0ec8b3c61e9fc39c5f6072ce5b86dd2b91823f086366995422bbbac7f74fd9abdb7efe4f292a73b1c6197c699cc78 - languageName: node - linkType: hard - "damerau-levenshtein@npm:^1.0.8": version: 1.0.8 resolution: "damerau-levenshtein@npm:1.0.8" @@ -3894,6 +3964,13 @@ __metadata: languageName: node linkType: hard +"dom-walk@npm:^0.1.0": + version: 0.1.2 + resolution: "dom-walk@npm:0.1.2" + checksum: 19eb0ce9c6de39d5e231530685248545d9cd2bd97b2cb3486e0bfc0f2a393a9addddfd5557463a932b52fdfcf68ad2a619020cd2c74a5fe46fbecaa8e80872f3 + languageName: node + linkType: hard + "domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": version: 2.3.0 resolution: "domelementtype@npm:2.3.0" @@ -4983,7 +5060,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:7.1.7": +"glob@npm:7.1.7, glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.1.7 resolution: "glob@npm:7.1.7" dependencies: @@ -4997,20 +5074,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3, glob@npm:^7.1.4": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.1.1 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 - languageName: node - linkType: hard - "glob@npm:^8.0.1": version: 8.1.0 resolution: "glob@npm:8.1.0" @@ -5024,6 +5087,16 @@ __metadata: languageName: node linkType: hard +"global@npm:4.4.0, global@npm:^4.3.1, global@npm:^4.4.0, global@npm:~4.4.0": + version: 4.4.0 + resolution: "global@npm:4.4.0" + dependencies: + min-document: ^2.19.0 + process: ^0.11.10 + checksum: 9c057557c8f5a5bcfbeb9378ba4fe2255d04679452be504608dd5f13b54edf79f7be1db1031ea06a4ec6edd3b9f5f17d2d172fb47e6c69dae57fd84b7e72b77f + languageName: node + linkType: hard + "globals@npm:^11.1.0": version: 11.12.0 resolution: "globals@npm:11.12.0" @@ -5374,6 +5447,7 @@ __metadata: "@types/ping": ^0.4.1 "@types/react": 17.0.1 "@types/uuid": ^8.3.4 + "@types/video.js": ^7.3.51 "@typescript-eslint/eslint-plugin": ^5.30.7 "@typescript-eslint/parser": ^5.30.7 "@uiw/react-textarea-code-editor": v1.4.4 @@ -5418,6 +5492,7 @@ __metadata: systeminformation: ^5.12.1 typescript: ^4.7.4 uuid: ^8.3.2 + video.js: ^8.0.3 yarn: ^1.22.19 zustand: ^4.1.4 languageName: unknown @@ -5661,6 +5736,13 @@ __metadata: languageName: node linkType: hard +"individual@npm:^2.0.0": + version: 2.0.0 + resolution: "individual@npm:2.0.0" + checksum: 34f071ade77365e2cdb9e034e7dc92930450ce427415b9ef975a2c2a455b40aa9e071ae7888972f3d2ec7d977a32cf1af46e0b8d602d70d05da5b9bbc9e23392 + languageName: node + linkType: hard + "infer-owner@npm:^1.0.4": version: 1.0.4 resolution: "infer-owner@npm:1.0.4" @@ -5857,6 +5939,13 @@ __metadata: languageName: node linkType: hard +"is-function@npm:^1.0.1": + version: 1.0.2 + resolution: "is-function@npm:1.0.2" + checksum: 7d564562e07b4b51359547d3ccc10fb93bb392fd1b8177ae2601ee4982a0ece86d952323fc172a9000743a3971f09689495ab78a1d49a9b14fc97a7e28521dc0 + languageName: node + linkType: hard + "is-generator-fn@npm:^2.0.0": version: 2.1.0 resolution: "is-generator-fn@npm:2.1.0" @@ -6665,6 +6754,13 @@ __metadata: languageName: node linkType: hard +"keycode@npm:2.2.0": + version: 2.2.0 + resolution: "keycode@npm:2.2.0" + checksum: cb91c2940a892f1444a41fc08339b8831445a6b095af9103e3061ea7d4bdbfc420135dcb5d9257020e35c374468bb7d4495ea9fcea54e5760196daff3c874fa4 + languageName: node + linkType: hard + "keyv@npm:^4.0.0, keyv@npm:^4.5.2": version: 4.5.2 resolution: "keyv@npm:4.5.2" @@ -6821,6 +6917,17 @@ __metadata: languageName: node linkType: hard +"m3u8-parser@npm:^6.0.0": + version: 6.0.0 + resolution: "m3u8-parser@npm:6.0.0" + dependencies: + "@babel/runtime": ^7.12.5 + "@videojs/vhs-utils": ^3.0.5 + global: ^4.4.0 + checksum: b305dede0595688b32ddfbafe2fc53c650eb89be4f2ceabf717596c3bf5b33e62d3c9b83264846e47f5afb2e863dc6890a2b574d09071083c6f696daa8488ec9 + languageName: node + linkType: hard + "make-dir@npm:^3.0.0, make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -6931,7 +7038,16 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"min-document@npm:^2.19.0": + version: 2.19.0 + resolution: "min-document@npm:2.19.0" + dependencies: + dom-walk: ^0.1.0 + checksum: da6437562ea2228041542a2384528e74e22d1daa1a4ec439c165abf0b9d8a63e17e3b8a6dc6e0c731845e85301198730426932a0e813d23f932ca668340c9623 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -7049,6 +7165,20 @@ __metadata: languageName: node linkType: hard +"mpd-parser@npm:^1.0.1": + version: 1.0.1 + resolution: "mpd-parser@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.12.5 + "@videojs/vhs-utils": ^3.0.5 + "@xmldom/xmldom": ^0.8.3 + global: ^4.4.0 + bin: + mpd-to-m3u8-json: bin/parse.js + checksum: a82c4ba7335d193aa248f4e39d4ad58359c5ff055a50fd574980b2a29318fbaccda9741f2106fe933a46ff5d092a6a78a542912bd3f1046e70b8ae63f80482ee + languageName: node + linkType: hard + "mrmime@npm:^1.0.0": version: 1.0.1 resolution: "mrmime@npm:1.0.1" @@ -7056,14 +7186,14 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.2": +"ms@npm:2.1.2, ms@npm:^2.1.1": version: 2.1.2 resolution: "ms@npm:2.1.2" checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f languageName: node linkType: hard -"ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:^2.0.0": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -7080,6 +7210,18 @@ __metadata: languageName: node linkType: hard +"mux.js@npm:6.2.0, mux.js@npm:^6.2.0": + version: 6.2.0 + resolution: "mux.js@npm:6.2.0" + dependencies: + "@babel/runtime": ^7.11.2 + global: ^4.4.0 + bin: + muxjs-transmux: bin/transmux.js + checksum: ecf54ead3480351967cbf6e54b57e38406b0ac5bc6dc194ae59e77e80ae6e6f6ab6fa42c15f0b0938cd0cce866fb7249c571be41d6cf78ee4531ecdfe65cfef9 + languageName: node + linkType: hard + "nan@npm:^2.15.0, nan@npm:^2.16.0": version: 2.17.0 resolution: "nan@npm:2.17.0" @@ -7675,6 +7817,17 @@ __metadata: languageName: node linkType: hard +"pkcs7@npm:^1.0.4": + version: 1.0.4 + resolution: "pkcs7@npm:1.0.4" + dependencies: + "@babel/runtime": ^7.5.5 + bin: + pkcs7: bin/cli.js + checksum: 926a713263c7656883d1fcc9fa709e08c26babc76d535dd76ccdf5ad1bc1c5931ecbbe2d7ae6075ad54897e1184be4ec304d295e28953c2ec0f1a04c27f4e838 + languageName: node + linkType: hard + "pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" @@ -7780,6 +7933,13 @@ __metadata: languageName: node linkType: hard +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 + languageName: node + linkType: hard + "promise-inflight@npm:^1.0.1": version: 1.0.1 resolution: "promise-inflight@npm:1.0.1" @@ -8295,6 +8455,15 @@ __metadata: languageName: node linkType: hard +"rust-result@npm:^1.0.0": + version: 1.0.0 + resolution: "rust-result@npm:1.0.0" + dependencies: + individual: ^2.0.0 + checksum: ccad2bdf79d3ff29e9f163db3121342b31e6d3008714851900c59da20489175f389dc3309cb92bfa5fa4d8f8842f0287567021912d37afbe5d379880af4bb95b + languageName: node + linkType: hard + "sabnzbd-api@npm:^1.5.0": version: 1.5.0 resolution: "sabnzbd-api@npm:1.5.0" @@ -8319,6 +8488,15 @@ __metadata: languageName: node linkType: hard +"safe-json-parse@npm:4.0.0": + version: 4.0.0 + resolution: "safe-json-parse@npm:4.0.0" + dependencies: + rust-result: ^1.0.0 + checksum: dab69dee6cfeeb5735447e4bb79da06054ff46954f9ef7504ade0ae8afe4984d44afb16adbd24adf89a83088fac8cdb07cf4ec0abc94422a1f54a4484cdb5c1a + languageName: node + linkType: hard + "safe-regex-test@npm:^1.0.0": version: 1.0.0 resolution: "safe-regex-test@npm:1.0.0" @@ -8902,19 +9080,7 @@ __metadata: languageName: node linkType: hard -"tar-fs@npm:^2.0.0, tar-fs@npm:^2.1.1": - version: 2.1.1 - resolution: "tar-fs@npm:2.1.1" - dependencies: - chownr: ^1.1.1 - mkdirp-classic: ^0.5.2 - pump: ^3.0.0 - tar-stream: ^2.1.4 - checksum: f5b9a70059f5b2969e65f037b4e4da2daf0fa762d3d232ffd96e819e3f94665dbbbe62f76f084f1acb4dbdcce16c6e4dac08d12ffc6d24b8d76720f4d9cf032d - languageName: node - linkType: hard - -"tar-fs@npm:~2.0.1": +"tar-fs@npm:^2.0.0, tar-fs@npm:~2.0.1": version: 2.0.1 resolution: "tar-fs@npm:2.0.1" dependencies: @@ -8926,6 +9092,18 @@ __metadata: languageName: node linkType: hard +"tar-fs@npm:^2.1.1": + version: 2.1.1 + resolution: "tar-fs@npm:2.1.1" + dependencies: + chownr: ^1.1.1 + mkdirp-classic: ^0.5.2 + pump: ^3.0.0 + tar-stream: ^2.1.4 + checksum: f5b9a70059f5b2969e65f037b4e4da2daf0fa762d3d232ffd96e819e3f94665dbbbe62f76f084f1acb4dbdcce16c6e4dac08d12ffc6d24b8d76720f4d9cf032d + languageName: node + linkType: hard + "tar-stream@npm:^2.0.0, tar-stream@npm:^2.1.4": version: 2.2.0 resolution: "tar-stream@npm:2.2.0" @@ -9334,6 +9512,13 @@ __metadata: languageName: node linkType: hard +"url-toolkit@npm:^2.2.1": + version: 2.2.5 + resolution: "url-toolkit@npm:2.2.5" + checksum: c784040bd4dbd78647a62218b6b8c1abd9a2f7fd8adce1851daf21dc2d98e2a5d69b78a628ec07dcfa112c16a112a182e109b7c872b6e8a1e4a1547b49b81f7b + languageName: node + linkType: hard + "use-composed-ref@npm:^1.3.0": version: 1.3.0 resolution: "use-composed-ref@npm:1.3.0" @@ -9437,6 +9622,55 @@ __metadata: languageName: node linkType: hard +"video.js@npm:^7 || ^8, video.js@npm:^8.0.3": + version: 8.0.3 + resolution: "video.js@npm:8.0.3" + dependencies: + "@babel/runtime": ^7.12.5 + "@videojs/http-streaming": 3.0.0 + "@videojs/vhs-utils": ^4.0.0 + "@videojs/xhr": 2.6.0 + aes-decrypter: ^4.0.1 + global: 4.4.0 + keycode: 2.2.0 + m3u8-parser: ^6.0.0 + mpd-parser: ^1.0.1 + mux.js: ^6.2.0 + safe-json-parse: 4.0.0 + videojs-contrib-quality-levels: 3.0.0 + videojs-font: 3.2.0 + videojs-vtt.js: 0.15.4 + checksum: 3bb4b334192116c8bcbe254a67fee1655cb829155845afaf274efe5bf8019f9a32081156f697b68b322af91853f0b843ffbbed572cefb307d5f47ea61c6c78b4 + languageName: node + linkType: hard + +"videojs-contrib-quality-levels@npm:3.0.0": + version: 3.0.0 + resolution: "videojs-contrib-quality-levels@npm:3.0.0" + dependencies: + global: ^4.4.0 + peerDependencies: + video.js: ^6 || ^7 || ^8 + checksum: 06635a74f4c88d7adb7c8e55687b76306432ea5921c4a03cfb9845adc0eef671c9e043706911e761366a41e6a4046cafaa619c645f25858764500e5596ce9b41 + languageName: node + linkType: hard + +"videojs-font@npm:3.2.0": + version: 3.2.0 + resolution: "videojs-font@npm:3.2.0" + checksum: 3c773d4a64123c237c26029a5d04c51919e3b6e688db0a20c6f9c647198ec815425d96a62dd24989046f27aa583c96cecae715f789f8d98452b4df419c23158a + languageName: node + linkType: hard + +"videojs-vtt.js@npm:0.15.4": + version: 0.15.4 + resolution: "videojs-vtt.js@npm:0.15.4" + dependencies: + global: ^4.3.1 + checksum: 10c6c861621d4314e7d4b60b7bef1afc60f1ac438879f6b3f22e8944d694c8e9dfc809a8187ed72f44e06c39a159044d8fa15e80695b9bf7b9bef99ea2740b70 + languageName: node + linkType: hard + "void-elements@npm:3.1.0": version: 3.1.0 resolution: "void-elements@npm:3.1.0" From 84db1aeaf7f652775cc9a9beee8b2d0f43c6a95c Mon Sep 17 00:00:00 2001 From: ajnart Date: Fri, 10 Feb 2023 12:44:31 +0900 Subject: [PATCH 06/23] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Change=20code=20edit?= =?UTF-8?q?or?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Customization/Theme/CustomCssChanger.tsx | 49 +++++++------------ src/pages/_app.tsx | 1 - src/widgets/video/VideoFeed.tsx | 3 +- src/widgets/video/VideoStreamTile.tsx | 2 +- 4 files changed, 20 insertions(+), 35 deletions(-) diff --git a/src/components/Settings/Customization/Theme/CustomCssChanger.tsx b/src/components/Settings/Customization/Theme/CustomCssChanger.tsx index 97155a688..d829570d1 100644 --- a/src/components/Settings/Customization/Theme/CustomCssChanger.tsx +++ b/src/components/Settings/Customization/Theme/CustomCssChanger.tsx @@ -1,24 +1,13 @@ -import { - Box, - createStyles, - Group, - Loader, - ScrollArea, - Stack, - Text, - useMantineTheme, -} from '@mantine/core'; +import { Box, createStyles, Group, Loader, Stack, Text, useMantineTheme } from '@mantine/core'; import { useDebouncedValue } from '@mantine/hooks'; import { useTranslation } from 'next-i18next'; -import dynamic from 'next/dynamic'; -import { ChangeEvent, useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; +import Editor from 'react-simple-code-editor'; +import { highlight, languages } from 'prismjs'; import { useConfigContext } from '../../../../config/provider'; import { useConfigStore } from '../../../../config/store'; - -const CodeEditor = dynamic( - () => import('@uiw/react-textarea-code-editor').then((mod) => mod.default), - { ssr: false } -); +import 'prismjs/components/prism-css'; +import 'prismjs/themes/prism.css'; export const CustomCssChanger = () => { const { t } = useTranslation('settings/customization/page-appearance'); @@ -53,22 +42,20 @@ export const CustomCssChanger = () => { {t('customCSS.label')} - {t('customCSS.description')} + {t('customCSS.description')}
- - ) => - setNonDebouncedCustomCSS(event.target.value.trim()) - } - language="css" - data-color-mode={colorScheme} - minHeight={codeEditorHeight} - /> - + setNonDebouncedCustomCSS(code)} + highlight={(code) => highlight(code, languages.extend('css', {}), 'css')} + padding={10} + style={{ + fontFamily: '"Fira code", "Fira Mono", monospace', + fontSize: 12, + minHeight: codeEditorHeight, + }} + /> {codeIsDirty && ( diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 4b10110a6..81107b5f4 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -29,7 +29,6 @@ import { usePackageAttributesStore } from '../tools/client/zustands/usePackageAt import 'video.js/dist/video-js.css'; import '../styles/global.scss'; -import '@uiw/react-textarea-code-editor/dist.css'; function App( this: any, diff --git a/src/widgets/video/VideoFeed.tsx b/src/widgets/video/VideoFeed.tsx index 604426c70..ab4e4744b 100644 --- a/src/widgets/video/VideoFeed.tsx +++ b/src/widgets/video/VideoFeed.tsx @@ -1,5 +1,4 @@ -import { LoadingOverlay } from '@mantine/core'; -import { createStyles } from '@mantine/styles'; +import { createStyles, LoadingOverlay } from '@mantine/core'; import { useEffect, useRef, useState } from 'react'; import videojs from 'video.js'; import 'video.js/dist/video-js.css'; diff --git a/src/widgets/video/VideoStreamTile.tsx b/src/widgets/video/VideoStreamTile.tsx index 873af47c8..028809f99 100644 --- a/src/widgets/video/VideoStreamTile.tsx +++ b/src/widgets/video/VideoStreamTile.tsx @@ -1,6 +1,6 @@ import { Center, Group, Stack, Title } from '@mantine/core'; import { IconDeviceCctv, IconHeartBroken } from '@tabler/icons'; -import { useTranslation } from 'react-i18next'; +import { useTranslation } from 'next-i18next'; import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; import VideoFeed from './VideoFeed'; From 793ab4db7a32a6d277bd9f6d46639e601491fc1a Mon Sep 17 00:00:00 2001 From: ajnart Date: Fri, 10 Feb 2023 12:44:48 +0900 Subject: [PATCH 07/23] =?UTF-8?q?=E2=9E=95=20Remove=20unsed=20dependencies?= =?UTF-8?q?=20and=20add=20new=20css=20editor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- next.config.js | 21 +- package.json | 22 +- yarn.lock | 1413 ++++++------------------------------------------ 3 files changed, 178 insertions(+), 1278 deletions(-) diff --git a/next.config.js b/next.config.js index 0abbde49c..dde3ec977 100644 --- a/next.config.js +++ b/next.config.js @@ -1,19 +1,14 @@ const { i18n } = require('./next-i18next.config'); -const removeImports = require('next-remove-imports')(); - const withBundleAnalyzer = require('@next/bundle-analyzer')({ enabled: process.env.ANALYZE === 'true', }); -module.exports = withBundleAnalyzer( - removeImports({ - experimental: { esmExternals: true }, - images: { - domains: ['cdn.jsdelivr.net'], - }, - reactStrictMode: true, - output: 'standalone', - i18n, - }) -); +module.exports = withBundleAnalyzer({ + images: { + domains: ['cdn.jsdelivr.net'], + }, + reactStrictMode: true, + output: 'standalone', + i18n, +}); diff --git a/package.json b/package.json index 309c79323..f8d6cb459 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,6 @@ "@ctrl/qbittorrent": "^4.1.0", "@ctrl/shared-torrent": "^4.1.1", "@ctrl/transmission": "^4.1.1", - "@dnd-kit/core": "^6.0.5", - "@dnd-kit/sortable": "^7.0.1", - "@dnd-kit/utilities": "^3.2.0", "@emotion/react": "^11.10.5", "@emotion/server": "^11.10.0", "@mantine/core": "^5.9.3", @@ -40,35 +37,28 @@ "@mantine/modals": "^5.9.3", "@mantine/next": "^5.9.3", "@mantine/notifications": "^5.9.3", - "@nivo/core": "^0.79.0", - "@nivo/line": "^0.79.1", + "@nivo/core": "^0.80.0", + "@nivo/line": "^0.80.0", "@tabler/icons": "^1.106.0", "@tanstack/react-query": "^4.2.1", "@tanstack/react-query-devtools": "^4.24.4", - "@uiw/react-textarea-code-editor": "v1.4.4", "axios": "^0.27.2", "consola": "^2.15.3", "cookies-next": "^2.1.1", "dayjs": "^1.11.7", "dockerode": "^3.3.2", - "embla-carousel-react": "^7.0.0", "fily-publish-gridstack": "^0.0.13", "framer-motion": "^6.5.1", "i18next": "^21.9.1", - "i18next-browser-languagedetector": "^6.1.5", - "i18next-http-backend": "^1.4.1", "js-file-download": "^0.4.12", "next": "^13.1.6", "next-i18next": "^11.3.0", - "next-remove-imports": "^1.0.8", "nzbget-api": "^0.0.3", - "ping": "^0.4.2", - "prism-react-renderer": "^1.3.5", + "prismjs": "^1.29.0", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-simple-code-editor": "^0.13.1", "sabnzbd-api": "^1.5.0", - "sharp": "^0.30.7", - "systeminformation": "^5.12.1", "uuid": "^8.3.2", "yarn": "^1.22.19", "zustand": "^4.1.4" @@ -78,14 +68,12 @@ "@next/eslint-plugin-next": "^12.1.4", "@types/dockerode": "^3.3.9", "@types/node": "17.0.1", - "@types/ping": "^0.4.1", + "@types/prismjs": "^1.26.0", "@types/react": "17.0.1", "@types/uuid": "^8.3.4", "@types/video.js": "^7.3.51", "@typescript-eslint/eslint-plugin": "^5.30.7", "@typescript-eslint/parser": "^5.30.7", - "babel-loader": "^9.1.2", - "babel-plugin-transform-remove-imports": "^1.7.0", "eslint": "^8.20.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-typescript": "^17.0.0", diff --git a/yarn.lock b/yarn.lock index 66dc9f29c..b4382fc53 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31,7 +31,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.14.3": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": version: 7.20.12 resolution: "@babel/core@npm:7.20.12" dependencies: @@ -362,16 +362,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:7.15.3": - version: 7.15.3 - resolution: "@babel/runtime@npm:7.15.3" - dependencies: - regenerator-runtime: ^0.13.4 - checksum: 2f0b8d2d4e36035ab1d84af0ec26aafa098536870f27c8e07de0a0e398f7a394fdea68a88165535ffb52ded6a68912bdc3450bdf91f229eb132e1c89470789f5 - 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.19.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7": +"@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" dependencies: @@ -516,55 +507,6 @@ __metadata: languageName: node linkType: hard -"@dnd-kit/accessibility@npm:^3.0.0": - version: 3.0.1 - resolution: "@dnd-kit/accessibility@npm:3.0.1" - dependencies: - tslib: ^2.0.0 - peerDependencies: - react: ">=16.8.0" - checksum: 0afc2c0fce9a1c107453620ca0da1778f182d340e74ffbc6e369ef0ac8943cafb929d3a6c0891d9b915aa23b2b92137ff4fad958f43118466586d8129a3359d5 - languageName: node - linkType: hard - -"@dnd-kit/core@npm:^6.0.5": - version: 6.0.7 - resolution: "@dnd-kit/core@npm:6.0.7" - dependencies: - "@dnd-kit/accessibility": ^3.0.0 - "@dnd-kit/utilities": ^3.2.1 - tslib: ^2.0.0 - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: f7abe49519da5d60f69bd36ab632ecdedc0372653763065c00b1899f3ed2c1954b5f6ab0bed14790afe11da636b405f8839dc2cad805ef61a3885141f62f9cb1 - languageName: node - linkType: hard - -"@dnd-kit/sortable@npm:^7.0.1": - version: 7.0.2 - resolution: "@dnd-kit/sortable@npm:7.0.2" - dependencies: - "@dnd-kit/utilities": ^3.2.0 - tslib: ^2.0.0 - peerDependencies: - "@dnd-kit/core": ^6.0.7 - react: ">=16.8.0" - checksum: 4ce705aceb15766a0deefe25a9d95a87e9413c3fb9088ea3eb0962e57f844895000117fcec7c0944a0d4ae4e1e889cfa69e3d3778164d4d23115fb1edb218283 - languageName: node - linkType: hard - -"@dnd-kit/utilities@npm:^3.2.0, @dnd-kit/utilities@npm:^3.2.1": - version: 3.2.1 - resolution: "@dnd-kit/utilities@npm:3.2.1" - dependencies: - tslib: ^2.0.0 - peerDependencies: - react: ">=16.8.0" - checksum: 038fd5cc1328bf4c9dca17cd48046e5a687bbf9d904c7197f851aab869ab52d9dee2734b2e255256fd6158245acd00063a23deed962c7673c0fadfbf061f04ca - languageName: node - linkType: hard - "@emotion/babel-plugin@npm:^11.10.5": version: 11.10.5 resolution: "@emotion/babel-plugin@npm:11.10.5" @@ -1263,17 +1205,6 @@ __metadata: languageName: node linkType: hard -"@mapbox/rehype-prism@npm:0.7.0": - version: 0.7.0 - resolution: "@mapbox/rehype-prism@npm:0.7.0" - dependencies: - hast-util-to-string: ^1.0.4 - refractor: ^3.4.0 - unist-util-visit: ^2.0.3 - checksum: e016f23d4a748cbbb3fb66f885c687a77929b776e6060d46befcbeaeac2f67ed48e3eab2fa13920c54c1c7c8d8c007aefcb9594beaca887237b9e74d53340691 - languageName: node - linkType: hard - "@motionone/animation@npm:^10.12.0": version: 10.15.1 resolution: "@motionone/animation@npm:10.15.1" @@ -1455,58 +1386,58 @@ __metadata: languageName: node linkType: hard -"@nivo/annotations@npm:0.79.1": - version: 0.79.1 - resolution: "@nivo/annotations@npm:0.79.1" +"@nivo/annotations@npm:0.80.0": + version: 0.80.0 + resolution: "@nivo/annotations@npm:0.80.0" dependencies: - "@nivo/colors": 0.79.1 - "@react-spring/web": 9.3.1 + "@nivo/colors": 0.80.0 + "@react-spring/web": 9.4.5 lodash: ^4.17.21 peerDependencies: - "@nivo/core": 0.79.0 - react: ">= 16.14.0 < 18.0.0" - checksum: 36b94fc65d82af3657967f8ba0a30ff888f1780e0cd17f39b3b00d5bc042bf9a66d78671baafa139c0caf804ac3c6fd8c6da41a61a0cb3f8cb0952eddb55605b + "@nivo/core": 0.80.0 + react: ">= 16.14.0 < 19.0.0" + checksum: 6b2dcc3cc443a660b10feab378b816e84f8aff4390345f8316852d88dcd893af0c8de63aad6bb6296ae13c55e4cce4a57f3f3898f5fdac03bb756df24a81d3fd languageName: node linkType: hard -"@nivo/axes@npm:0.79.0": - version: 0.79.0 - resolution: "@nivo/axes@npm:0.79.0" +"@nivo/axes@npm:0.80.0": + version: 0.80.0 + resolution: "@nivo/axes@npm:0.80.0" dependencies: - "@nivo/scales": 0.79.0 - "@react-spring/web": 9.3.1 + "@nivo/scales": 0.80.0 + "@react-spring/web": 9.4.5 d3-format: ^1.4.4 d3-time-format: ^3.0.0 peerDependencies: - "@nivo/core": 0.79.0 + "@nivo/core": 0.80.0 prop-types: ">= 15.5.10 < 16.0.0" - react: ">= 16.14.0 < 18.0.0" - checksum: 8f83a1b5623289c5e901e99b708c8326d758fcc64a8687954c95930c6f584599b0c76f8c5b5579e7208348c096a6c12a73736b0d7cb7cb8140107f0f210749ca + react: ">= 16.14.0 < 19.0.0" + checksum: 59cea2b3f2dc547f3ebbe920b4c789ac8c5dd4b3e5ba3c323d84f63d052faf813655cca8bb861a035ee064a8d71931bb35e956fc581051c0e86c4a80a1e581df languageName: node linkType: hard -"@nivo/colors@npm:0.79.1": - version: 0.79.1 - resolution: "@nivo/colors@npm:0.79.1" +"@nivo/colors@npm:0.80.0": + version: 0.80.0 + resolution: "@nivo/colors@npm:0.80.0" dependencies: d3-color: ^2.0.0 d3-scale: ^3.2.3 d3-scale-chromatic: ^2.0.0 lodash: ^4.17.21 peerDependencies: - "@nivo/core": 0.79.0 + "@nivo/core": 0.80.0 prop-types: ">= 15.5.10 < 16.0.0" - react: ">= 16.14.0 < 18.0.0" - checksum: a6ed80b2d8e03ccc1b1a5d16d6bb06150067c01b259e7cf077638cf6bffb543ae2aadd6077add84aa62d6428d48259f52e816d63a34d2c7847cc7dc12317e271 + react: ">= 16.14.0 < 19.0.0" + checksum: 0dc2044c984d8180d2f0a13fba6b6cdda0a18eec6ef71e9e523794f7ba70ed896231840f22c93f7e30b8730fde26ec07fff8e3d08fef120e91c8a9d552aa1fca languageName: node linkType: hard -"@nivo/core@npm:^0.79.0": - version: 0.79.0 - resolution: "@nivo/core@npm:0.79.0" +"@nivo/core@npm:^0.80.0": + version: 0.80.0 + resolution: "@nivo/core@npm:0.80.0" dependencies: - "@nivo/recompose": 0.79.0 - "@react-spring/web": 9.3.1 + "@nivo/recompose": 0.80.0 + "@react-spring/web": 9.4.5 d3-color: ^2.0.0 d3-format: ^1.4.4 d3-interpolate: ^2.0.1 @@ -1516,89 +1447,89 @@ __metadata: d3-time-format: ^3.0.0 lodash: ^4.17.21 peerDependencies: - "@nivo/tooltip": 0.79.0 + "@nivo/tooltip": 0.80.0 prop-types: ">= 15.5.10 < 16.0.0" - react: ">= 16.14.0 < 18.0.0" - checksum: 371fa0fd897cf1722e7705e6f58154d5e8efad1f68df2b577c6b26c9261a9f4e02afd506a77bc9041bceec539911f9dad764a8dfdd792ba694785687cd6ad1bd + react: ">= 16.14.0 < 19.0.0" + checksum: 05fd9ccc9d9876affea17498a2007f5974641c7a2bb1c12c4d8f97bdae48519dd5882c65653074b6756d14eef47dbaeaf8b8243d3e5389efd3d1e180ecbfde75 languageName: node linkType: hard -"@nivo/legends@npm:0.79.1": - version: 0.79.1 - resolution: "@nivo/legends@npm:0.79.1" +"@nivo/legends@npm:0.80.0": + version: 0.80.0 + resolution: "@nivo/legends@npm:0.80.0" peerDependencies: - "@nivo/core": 0.79.0 + "@nivo/core": 0.80.0 prop-types: ">= 15.5.10 < 16.0.0" - react: ">= 16.14.0 < 18.0.0" - checksum: 1f4bb8da28352d81771d50ce6d5929c9fefe1de9f682cd537e4a718c39828aba3df0c8a50887467571d79a36e329e41b0699c1cd9e14fd6e98f0d5771e887b8b + react: ">= 16.14.0 < 19.0.0" + checksum: 659aba35105143ac7da663a51bc6a69f815e23efd278b8b1314bd48b9c853f4c3b7e9cf61de1439390eff3983b754eaea5dd3923fa2caad97b0fca6133a05ae9 languageName: node linkType: hard -"@nivo/line@npm:^0.79.1": - version: 0.79.1 - resolution: "@nivo/line@npm:0.79.1" +"@nivo/line@npm:^0.80.0": + version: 0.80.0 + resolution: "@nivo/line@npm:0.80.0" dependencies: - "@nivo/annotations": 0.79.1 - "@nivo/axes": 0.79.0 - "@nivo/colors": 0.79.1 - "@nivo/legends": 0.79.1 - "@nivo/scales": 0.79.0 - "@nivo/tooltip": 0.79.0 - "@nivo/voronoi": 0.79.0 - "@react-spring/web": 9.3.1 + "@nivo/annotations": 0.80.0 + "@nivo/axes": 0.80.0 + "@nivo/colors": 0.80.0 + "@nivo/legends": 0.80.0 + "@nivo/scales": 0.80.0 + "@nivo/tooltip": 0.80.0 + "@nivo/voronoi": 0.80.0 + "@react-spring/web": 9.4.5 d3-shape: ^1.3.5 peerDependencies: - "@nivo/core": 0.79.0 + "@nivo/core": 0.80.0 prop-types: ">= 15.5.10 < 16.0.0" - react: ">= 16.14.0 < 18.0.0" - checksum: 3341c70df08d275c57d47e8f7f2eb89c0b584e45971188289e0d5c5a38988650c0fc4e22b2ca51ae4f1ddc4083b718f038a12f2becad7185b79b2fc1cc72a100 + react: ">= 16.14.0 < 19.0.0" + checksum: e2d83971e5d530b4465e628f926d2b311a39ce0fa137b0c942532ca58959d78ced21166e83ce9644c91bf2a2929ac539fdd4307fc7ceda986050346b662de1a3 languageName: node linkType: hard -"@nivo/recompose@npm:0.79.0": - version: 0.79.0 - resolution: "@nivo/recompose@npm:0.79.0" +"@nivo/recompose@npm:0.80.0": + version: 0.80.0 + resolution: "@nivo/recompose@npm:0.80.0" dependencies: react-lifecycles-compat: ^3.0.4 peerDependencies: - react: ">= 16.14.0 < 18.0.0" - checksum: acc0dc5bde0b67cdf8e5970cbec7788fbc91e3567b7fbeb5f470e8e0b706aeb5acae885d9413d14d845fc11032611ad1011e3a9fc4055acbc55a2baecd9e16ff + react: ">= 16.14.0 < 19.0.0" + checksum: 5495eeba137f4d3a46d1ada99948c5b097ccf00c532f10a627bb0525c6fbab14d93c9297a25d90c0041f72432efbd4e9a2ef5d408063e2c4cf25d05f33b1fcc5 languageName: node linkType: hard -"@nivo/scales@npm:0.79.0": - version: 0.79.0 - resolution: "@nivo/scales@npm:0.79.0" +"@nivo/scales@npm:0.80.0": + version: 0.80.0 + resolution: "@nivo/scales@npm:0.80.0" dependencies: d3-scale: ^3.2.3 d3-time: ^1.0.11 d3-time-format: ^3.0.0 lodash: ^4.17.21 - checksum: 4b63b85f842fd21b90252cb1a848aa9772f6a035c2f1b3541d4df795b12db44ca4ac15f59b3cca19c45b5a27042508d32ba491142a517169a580b0d5f397d20b + checksum: 75bdc838ab593306268cda2c098430cb5ff1f20ab73dd5d61845fa013e30fd85020c910c9dd0a7641d90ee04f86031af71a250f5f5992fe74a23bcf4fb954f95 languageName: node linkType: hard -"@nivo/tooltip@npm:0.79.0": - version: 0.79.0 - resolution: "@nivo/tooltip@npm:0.79.0" +"@nivo/tooltip@npm:0.80.0": + version: 0.80.0 + resolution: "@nivo/tooltip@npm:0.80.0" dependencies: - "@react-spring/web": 9.3.1 + "@react-spring/web": 9.4.5 peerDependencies: - "@nivo/core": 0.79.0 - checksum: ae74abebd077f5e77d041d0845340f1ffcbd2461e55112b8ac81fbf68f58a6d475ae30dc314ca11b99a4b85bbeaa5aecbe39191cc6ce55beddf83f43d1edab8b + "@nivo/core": 0.80.0 + checksum: bc0eec5d0d05f653186b040105d7451c823d8ee0844b7767f3d827424346d6379966452055be168994132ca8610f1956798274701a1bb948d3e8d961f23a07b7 languageName: node linkType: hard -"@nivo/voronoi@npm:0.79.0": - version: 0.79.0 - resolution: "@nivo/voronoi@npm:0.79.0" +"@nivo/voronoi@npm:0.80.0": + version: 0.80.0 + resolution: "@nivo/voronoi@npm:0.80.0" dependencies: d3-delaunay: ^5.3.0 d3-scale: ^3.2.3 peerDependencies: - "@nivo/core": 0.79.0 - react: ">= 16.14.0 < 18.0.0" - checksum: d479051850a519c328ce8dd6fbbc5998575cb2fc16351e7e516593be5ad21de0f7effe18ad09a2d596abcd90c055a560a21e125b7c8b2a859a309e7737d028e1 + "@nivo/core": 0.80.0 + react: ">= 16.14.0 < 19.0.0" + checksum: 7b4f844611f64742c5ed14e94fa7a3f813d0b6cde04c40c3d597e0d4180977db8fe957ff4f4b1c5a131e4c43e20a01e684c8b934e0b9583d726b2b13986e9efb languageName: node linkType: hard @@ -1789,69 +1720,70 @@ __metadata: languageName: node linkType: hard -"@react-spring/animated@npm:~9.3.0": - version: 9.3.2 - resolution: "@react-spring/animated@npm:9.3.2" +"@react-spring/animated@npm:~9.4.5": + version: 9.4.5 + resolution: "@react-spring/animated@npm:9.4.5" dependencies: - "@react-spring/shared": ~9.3.0 - "@react-spring/types": ~9.3.0 + "@react-spring/shared": ~9.4.5 + "@react-spring/types": ~9.4.5 peerDependencies: - react: ^16.8.0 || ^17.0.0 - checksum: e42fd174403a692d20f9cdc2511f5f4b1eed6282b4160d1eb0d8421ccce0524f4eaee968712f4e5f9b907a9f941ae3dd037ad35f13eacef8860fcfb90243a4fc + react: ^16.8.0 || >=17.0.0 || >=18.0.0 + checksum: e85c0bd65bd76e1c8ca830b22e31956401e29593cbc1df7560f5b77bd7b31acded61e1732717803cdfd993f30c2559ffbd6fb5f0d48b1c749323bee3597d7834 languageName: node linkType: hard -"@react-spring/core@npm:~9.3.0": - version: 9.3.2 - resolution: "@react-spring/core@npm:9.3.2" +"@react-spring/core@npm:~9.4.5": + version: 9.4.5 + resolution: "@react-spring/core@npm:9.4.5" dependencies: - "@react-spring/animated": ~9.3.0 - "@react-spring/shared": ~9.3.0 - "@react-spring/types": ~9.3.0 + "@react-spring/animated": ~9.4.5 + "@react-spring/rafz": ~9.4.5 + "@react-spring/shared": ~9.4.5 + "@react-spring/types": ~9.4.5 peerDependencies: - react: ^16.8.0 || ^17.0.0 - checksum: 1504143b9446d32c3877c8224c3fee3b6d18c0218b04b6766de7164ed645932808066ef12af63b06123a3da168f6bbc0fdf325c337b17d7f13d8a09f4a37f608 + react: ^16.8.0 || >=17.0.0 || >=18.0.0 + checksum: e5aee7f68f15c9d5d6f230703d22cb34edb8aae3ba0d70c01847f7c78e47f9f8177f87c095aff5ed1b98c2a218238d5ec28f9bf451f3e13bfdad6e3170a60226 languageName: node linkType: hard -"@react-spring/rafz@npm:~9.3.0": - version: 9.3.2 - resolution: "@react-spring/rafz@npm:9.3.2" - checksum: 8213d4940f23f93057dc2e7dc1e4aeca22622bfcfc9b42ab60d783e82f7ffe067e9537e7a397cfcb5634ea7e46d8ea55d06ffe4bd67a99f09ce06dde5e13957a +"@react-spring/rafz@npm:~9.4.5": + version: 9.4.5 + resolution: "@react-spring/rafz@npm:9.4.5" + checksum: 0ac722881b107baf55338a0123bc889d88faca53f034eb6d26ebab3ae6e4dc1717654b09d0e6e5e9bf587c2ba182d6aae90ca22c833dc55024ee52d88f8579a2 languageName: node linkType: hard -"@react-spring/shared@npm:~9.3.0": - version: 9.3.2 - resolution: "@react-spring/shared@npm:9.3.2" +"@react-spring/shared@npm:~9.4.5": + version: 9.4.5 + resolution: "@react-spring/shared@npm:9.4.5" dependencies: - "@react-spring/rafz": ~9.3.0 - "@react-spring/types": ~9.3.0 + "@react-spring/rafz": ~9.4.5 + "@react-spring/types": ~9.4.5 peerDependencies: - react: ^16.8.0 || ^17.0.0 - checksum: b04dc19fc6a8d585f38af74149e94fbf12b2a9ae9af6254abb02f105a7f77ce6a1e987ff7aaf4bb013786cd0959e41fca45709c4d57094abfca7b12db507a243 + react: ^16.8.0 || >=17.0.0 || >=18.0.0 + checksum: 2f20e410c03166de19b2d668d6841d24778c37da3083d37fe70acfcf2cf0cb3bd4a5cf92d42f1590b9de5d0a6603dc75cf8c319c0089df4e713226364a204b51 languageName: node linkType: hard -"@react-spring/types@npm:~9.3.0": - version: 9.3.2 - resolution: "@react-spring/types@npm:9.3.2" - checksum: 29fb2be7cd44c3de534d6b0d914b1c51fdc6ea354098727e605218b0e733c3c0ab01f54670f1b8b9b1949d984e399ce3ec153640ae9c590aee9622f33900d16b +"@react-spring/types@npm:~9.4.5": + version: 9.4.5 + resolution: "@react-spring/types@npm:9.4.5" + checksum: f8fecb54015de23899cc595d949e3676835e612d4dda05af470cab9ee20dd98c86ebca1c4ba75d2a9f63a4acba4b75febf6bab71da0b2e9556e6ff684b22f139 languageName: node linkType: hard -"@react-spring/web@npm:9.3.1": - version: 9.3.1 - resolution: "@react-spring/web@npm:9.3.1" +"@react-spring/web@npm:9.4.5": + version: 9.4.5 + resolution: "@react-spring/web@npm:9.4.5" dependencies: - "@react-spring/animated": ~9.3.0 - "@react-spring/core": ~9.3.0 - "@react-spring/shared": ~9.3.0 - "@react-spring/types": ~9.3.0 + "@react-spring/animated": ~9.4.5 + "@react-spring/core": ~9.4.5 + "@react-spring/shared": ~9.4.5 + "@react-spring/types": ~9.4.5 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: 223ce3f849df23a7c4f630ea1e5be91a12257e35e2c8c10b939568302176d3881c1037d50daca4238a6383ddaa477cdc4971163a9da181b790abe91cae4b8c50 + react: ^16.8.0 || >=17.0.0 || >=18.0.0 + react-dom: ^16.8.0 || >=17.0.0 || >=18.0.0 + checksum: 9d7eea4b8b0399c205743acade141679f3f729a64631f8480d44d14bb59781ea807977a4671cbe1d56e31389b69ef325ec975275446f08997f555f2981d220c8 languageName: node linkType: hard @@ -2082,15 +2014,6 @@ __metadata: languageName: node linkType: hard -"@types/hast@npm:^2.0.0": - version: 2.3.4 - resolution: "@types/hast@npm:2.3.4" - dependencies: - "@types/unist": "*" - checksum: fff47998f4c11e21a7454b58673f70478740ecdafd95aaf50b70a3daa7da9cdc57315545bf9c039613732c40b7b0e9e49d11d03fe9a4304721cdc3b29a88141e - 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" @@ -2133,7 +2056,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d @@ -2184,20 +2107,6 @@ __metadata: languageName: node linkType: hard -"@types/parse5@npm:^6.0.0": - version: 6.0.3 - resolution: "@types/parse5@npm:6.0.3" - checksum: ddb59ee4144af5dfcc508a8dcf32f37879d11e12559561e65788756b95b33e6f03ea027d88e1f5408f9b7bfb656bf630ace31a2169edf44151daaf8dd58df1b7 - languageName: node - linkType: hard - -"@types/ping@npm:^0.4.1": - version: 0.4.1 - resolution: "@types/ping@npm:0.4.1" - checksum: 9b94837fe66df70558c5a42b0e0c8371b4950ab56b96c42c8df809ff2cf52477dd0a7e01d2e6b38af8bb6683b3dcb54587960b96b4b1f3d40fdb529aea348ad0 - languageName: node - linkType: hard - "@types/prettier@npm:^2.1.5": version: 2.7.2 resolution: "@types/prettier@npm:2.7.2" @@ -2205,6 +2114,13 @@ __metadata: languageName: node linkType: hard +"@types/prismjs@npm:^1.26.0": + version: 1.26.0 + resolution: "@types/prismjs@npm:1.26.0" + checksum: cd5e7a6214c1f4213ec512a5fcf6d8fe37a56b813fc57ac95b5ff5ee074742bfdbd2f2730d9fd985205bf4586728e09baa97023f739e5aa1c9735a7c1ecbd11a + languageName: node + linkType: hard + "@types/prop-types@npm:*": version: 15.7.5 resolution: "@types/prop-types@npm:15.7.5" @@ -2254,13 +2170,6 @@ __metadata: languageName: node linkType: hard -"@types/unist@npm:*, @types/unist@npm:^2.0.0": - version: 2.0.6 - resolution: "@types/unist@npm:2.0.6" - checksum: 25cb860ff10dde48b54622d58b23e66214211a61c84c0f15f88d38b61aa1b53d4d46e42b557924a93178c501c166aa37e28d7f6d994aba13d24685326272d5db - languageName: node - linkType: hard - "@types/uuid@npm:^8.3.4": version: 8.3.4 resolution: "@types/uuid@npm:8.3.4" @@ -2412,21 +2321,6 @@ __metadata: languageName: node linkType: hard -"@uiw/react-textarea-code-editor@npm:v1.4.4": - version: 1.4.4 - resolution: "@uiw/react-textarea-code-editor@npm:1.4.4" - dependencies: - "@babel/runtime": 7.15.3 - "@mapbox/rehype-prism": 0.7.0 - rehype: 12.0.0 - peerDependencies: - "@babel/runtime": ">=7.10.0" - react: ">=16.9.0" - react-dom: ">=16.9.0" - checksum: 180f81482664d2f61f3d5af7fe6ddd605e10b84c74f29b42dc315a9760b097ba76f2b955a48b379061eadc4e679dedd17d52603b97d440f774d0cc8146ba74f1 - languageName: node - linkType: hard - "@videojs/http-streaming@npm:3.0.0": version: 3.0.0 resolution: "@videojs/http-streaming@npm:3.0.0" @@ -2559,40 +2453,6 @@ __metadata: languageName: node linkType: hard -"ajv-formats@npm:^2.1.1": - version: 2.1.1 - resolution: "ajv-formats@npm:2.1.1" - dependencies: - ajv: ^8.0.0 - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 - languageName: node - linkType: hard - -"ajv-keywords@npm:^3.5.2": - version: 3.5.2 - resolution: "ajv-keywords@npm:3.5.2" - peerDependencies: - ajv: ^6.9.1 - checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 - languageName: node - linkType: hard - -"ajv-keywords@npm:^5.0.0": - version: 5.1.0 - resolution: "ajv-keywords@npm:5.1.0" - dependencies: - fast-deep-equal: ^3.1.3 - peerDependencies: - ajv: ^8.8.2 - checksum: c35193940b853119242c6757787f09ecf89a2c19bcd36d03ed1a615e710d19d450cb448bfda407b939aba54b002368c8bff30529cc50a0536a8e10bcce300421 - languageName: node - linkType: hard - "ajv@npm:^6.10.0, ajv@npm:^6.12.4": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -2605,18 +2465,6 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.0, ajv@npm:^8.8.0": - version: 8.12.0 - resolution: "ajv@npm:8.12.0" - dependencies: - fast-deep-equal: ^3.1.1 - json-schema-traverse: ^1.0.0 - require-from-string: ^2.0.2 - uri-js: ^4.2.2 - checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 - languageName: node - linkType: hard - "ansi-escapes@npm:^4.2.1": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" @@ -2862,34 +2710,6 @@ __metadata: languageName: node linkType: hard -"babel-loader@npm:^8.2.2": - version: 8.3.0 - resolution: "babel-loader@npm:8.3.0" - dependencies: - find-cache-dir: ^3.3.1 - loader-utils: ^2.0.0 - make-dir: ^3.1.0 - schema-utils: ^2.6.5 - peerDependencies: - "@babel/core": ^7.0.0 - webpack: ">=2" - checksum: d48bcf9e030e598656ad3ff5fb85967db2eaaf38af5b4a4b99d25618a2057f9f100e6b231af2a46c1913206db506115ca7a8cbdf52c9c73d767070dae4352ab5 - languageName: node - linkType: hard - -"babel-loader@npm:^9.1.2": - version: 9.1.2 - resolution: "babel-loader@npm:9.1.2" - dependencies: - find-cache-dir: ^3.3.2 - schema-utils: ^4.0.0 - peerDependencies: - "@babel/core": ^7.12.0 - webpack: ">=5" - checksum: f0edb8e157f9806b810ba3f2c8ca8fa489d377ae5c2b7b00c2ace900a6925641ce4ec520b9c12f70e37b94aa5366e7003e0f6271b26821643e109966ce741cb7 - languageName: node - linkType: hard - "babel-plugin-istanbul@npm:^6.1.1": version: 6.1.1 resolution: "babel-plugin-istanbul@npm:6.1.1" @@ -2926,15 +2746,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-transform-remove-imports@npm:^1.5.4, babel-plugin-transform-remove-imports@npm:^1.7.0": - version: 1.7.0 - resolution: "babel-plugin-transform-remove-imports@npm:1.7.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d50f701edcd6832b21e73b0ed143747a50bb4982c5632c59ab8b8ed2b5163b60402a0beee70e0c5fec1fbf438c074517ff303425b5b9b7f1bee295953f638431 - 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" @@ -2969,13 +2780,6 @@ __metadata: languageName: node linkType: hard -"bail@npm:^2.0.0": - version: 2.0.2 - resolution: "bail@npm:2.0.2" - checksum: aab4e8ccdc8d762bf3fdfce8e706601695620c0c2eda256dd85088dc0be3cfd7ff126f6e99c2bee1f24f5d418414aacf09d7f9702f16d6963df2fa488cda8824 - languageName: node - linkType: hard - "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -2999,13 +2803,6 @@ __metadata: languageName: node linkType: hard -"big.js@npm:^5.2.2": - version: 5.2.2 - resolution: "big.js@npm:5.2.2" - checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e - languageName: node - linkType: hard - "binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" @@ -3214,13 +3011,6 @@ __metadata: languageName: node linkType: hard -"ccount@npm:^2.0.0": - version: 2.0.1 - resolution: "ccount@npm:2.0.1" - checksum: 48193dada54c9e260e0acf57fc16171a225305548f9ad20d5471e0f7a8c026aedd8747091dccb0d900cde7df4e4ddbd235df0d8de4a64c71b12f0d3303eeafd4 - languageName: node - linkType: hard - "chalk@npm:^2.0.0": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -3249,41 +3039,6 @@ __metadata: languageName: node linkType: hard -"character-entities-html4@npm:^2.0.0": - version: 2.1.0 - resolution: "character-entities-html4@npm:2.1.0" - checksum: 7034aa7c7fa90309667f6dd50499c8a760c3d3a6fb159adb4e0bada0107d194551cdbad0714302f62d06ce4ed68565c8c2e15fdef2e8f8764eb63fa92b34b11d - languageName: node - linkType: hard - -"character-entities-legacy@npm:^1.0.0": - version: 1.1.4 - resolution: "character-entities-legacy@npm:1.1.4" - checksum: fe03a82c154414da3a0c8ab3188e4237ec68006cbcd681cf23c7cfb9502a0e76cd30ab69a2e50857ca10d984d57de3b307680fff5328ccd427f400e559c3a811 - languageName: node - linkType: hard - -"character-entities-legacy@npm:^3.0.0": - version: 3.0.0 - resolution: "character-entities-legacy@npm:3.0.0" - checksum: 7582af055cb488b626d364b7d7a4e46b06abd526fb63c0e4eb35bcb9c9799cc4f76b39f34fdccef2d1174ac95e53e9ab355aae83227c1a2505877893fce77731 - languageName: node - linkType: hard - -"character-entities@npm:^1.0.0": - version: 1.2.4 - resolution: "character-entities@npm:1.2.4" - checksum: e1545716571ead57beac008433c1ff69517cd8ca5b336889321c5b8ff4a99c29b65589a701e9c086cda8a5e346a67295e2684f6c7ea96819fe85cbf49bf8686d - languageName: node - linkType: hard - -"character-reference-invalid@npm:^1.0.0": - version: 1.1.4 - resolution: "character-reference-invalid@npm:1.1.4" - checksum: 20274574c70e05e2f81135f3b93285536bc8ff70f37f0809b0d17791a832838f1e49938382899ed4cb444e5bbd4314ca1415231344ba29f4222ce2ccf24fea0b - languageName: node - linkType: hard - "chokidar@npm:>=3.0.0 <4.0.0": version: 3.5.3 resolution: "chokidar@npm:3.5.3" @@ -3404,7 +3159,7 @@ __metadata: languageName: node linkType: hard -"color-name@npm:1.1.3, color-name@npm:^1.0.0": +"color-name@npm:1.1.3": version: 1.1.3 resolution: "color-name@npm:1.1.3" checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d @@ -3418,16 +3173,6 @@ __metadata: languageName: node linkType: hard -"color-string@npm:^1.9.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" - dependencies: - color-name: ^1.0.0 - simple-swizzle: ^0.2.2 - checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 - languageName: node - linkType: hard - "color-support@npm:^1.1.3": version: 1.1.3 resolution: "color-support@npm:1.1.3" @@ -3437,16 +3182,6 @@ __metadata: languageName: node linkType: hard -"color@npm:^4.2.3": - version: 4.2.3 - resolution: "color@npm:4.2.3" - dependencies: - color-convert: ^2.0.1 - color-string: ^1.9.0 - checksum: 0579629c02c631b426780038da929cca8e8d80a40158b09811a0112a107c62e10e4aad719843b791b1e658ab4e800558f2e87ca4522c8b32349d497ecb6adeb4 - languageName: node - linkType: hard - "combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" @@ -3456,20 +3191,6 @@ __metadata: languageName: node linkType: hard -"comma-separated-tokens@npm:^1.0.0": - version: 1.0.8 - resolution: "comma-separated-tokens@npm:1.0.8" - checksum: 0adcb07174fa4d08cf0f5c8e3aec40a36b5ff0c2c720e5e23f50fe02e6789d1d00a67036c80e0c1e1539f41d3e7f0101b074039dd833b4e4a59031b659d6ca0d - languageName: node - linkType: hard - -"comma-separated-tokens@npm:^2.0.0": - version: 2.0.3 - resolution: "comma-separated-tokens@npm:2.0.3" - checksum: e3bf9e0332a5c45f49b90e79bcdb4a7a85f28d6a6f0876a94f1bb9b2bfbdbbb9292aac50e1e742d8c0db1e62a0229a106f57917e2d067fca951d81737651700d - languageName: node - linkType: hard - "commander@npm:^6.2.0": version: 6.2.1 resolution: "commander@npm:6.2.1" @@ -3477,13 +3198,6 @@ __metadata: languageName: node linkType: hard -"commondir@npm:^1.0.1": - version: 1.0.1 - resolution: "commondir@npm:1.0.1" - checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb - languageName: node - linkType: hard - "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -3584,15 +3298,6 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:3.1.5": - 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.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -3806,13 +3511,6 @@ __metadata: languageName: node linkType: hard -"deep-extend@npm:^0.6.0": - version: 0.6.0 - resolution: "deep-extend@npm:0.6.0" - checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 - languageName: node - linkType: hard - "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -3872,13 +3570,6 @@ __metadata: languageName: node linkType: hard -"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.1": - version: 2.0.1 - resolution: "detect-libc@npm:2.0.1" - checksum: ccb05fcabbb555beb544d48080179c18523a343face9ee4e1a86605a8715b4169f94d663c21a03c310ac824592f2ba9a5270218819bb411ad7be578a527593d7 - languageName: node - linkType: hard - "detect-newline@npm:^3.0.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" @@ -4021,24 +3712,6 @@ __metadata: languageName: node linkType: hard -"embla-carousel-react@npm:^7.0.0": - version: 7.0.9 - resolution: "embla-carousel-react@npm:7.0.9" - dependencies: - embla-carousel: 7.0.9 - peerDependencies: - react: ^16.8.0 || ^17.0.1 || ^18.0.0 - checksum: 440157b5187428a214c4db25afff296d26ed2412cfcd424bafcccb2c12b468216534b31939486eef24f96e785b24732fb9084ab1a2a06e427b8f958a0e08cd8e - languageName: node - linkType: hard - -"embla-carousel@npm:7.0.9": - version: 7.0.9 - resolution: "embla-carousel@npm:7.0.9" - checksum: dabb371a44c2d67f21aa7a0ff3f452a5c2678b79e80cb251e0a83b707c4b684fbdbe010927142cdcae3d1c9711a269e05655bd05c39608337fd1b6f5d2c20371 - languageName: node - linkType: hard - "emittery@npm:^0.10.2": version: 0.10.2 resolution: "emittery@npm:0.10.2" @@ -4060,13 +3733,6 @@ __metadata: languageName: node linkType: hard -"emojis-list@npm:^3.0.0": - version: 3.0.0 - resolution: "emojis-list@npm:3.0.0" - checksum: ddaaa02542e1e9436c03970eeed445f4ed29a5337dfba0fe0c38dfdd2af5da2429c2a0821304e8a8d1cadf27fdd5b22ff793571fa803ae16852a6975c65e8e70 - languageName: node - linkType: hard - "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -4638,13 +4304,6 @@ __metadata: languageName: node linkType: hard -"expand-template@npm:^2.0.3": - version: 2.0.3 - resolution: "expand-template@npm:2.0.3" - checksum: 588c19847216421ed92befb521767b7018dc88f88b0576df98cb242f20961425e96a92cbece525ef28cc5becceae5d544ae0f5b9b5e2aa05acb13716ca5b3099 - languageName: node - linkType: hard - "expect@npm:^28.1.3": version: 28.1.3 resolution: "expect@npm:28.1.3" @@ -4658,13 +4317,6 @@ __metadata: languageName: node linkType: hard -"extend@npm:^3.0.0": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 - 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" @@ -4751,17 +4403,6 @@ __metadata: languageName: node linkType: hard -"find-cache-dir@npm:^3.3.1, find-cache-dir@npm:^3.3.2": - version: 3.3.2 - resolution: "find-cache-dir@npm:3.3.2" - dependencies: - commondir: ^1.0.1 - make-dir: ^3.0.2 - pkg-dir: ^4.1.0 - checksum: 1e61c2e64f5c0b1c535bd85939ae73b0e5773142713273818cc0b393ee3555fb0fd44e1a5b161b8b6c3e03e98c2fcc9c227d784850a13a90a8ab576869576817 - languageName: node - linkType: hard - "find-root@npm:^1.1.0": version: 1.1.0 resolution: "find-root@npm:1.1.0" @@ -5035,13 +4676,6 @@ __metadata: languageName: node linkType: hard -"github-from-package@npm:0.0.0": - version: 0.0.0 - resolution: "github-from-package@npm:0.0.0" - checksum: 14e448192a35c1e42efee94c9d01a10f42fe790375891a24b25261246ce9336ab9df5d274585aedd4568f7922246c2a78b8a8cd2571bfe99c693a9718e7dd0e3 - languageName: node - linkType: hard - "glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -5275,129 +4909,6 @@ __metadata: languageName: node linkType: hard -"hast-util-from-parse5@npm:^7.0.0": - version: 7.1.1 - resolution: "hast-util-from-parse5@npm:7.1.1" - dependencies: - "@types/hast": ^2.0.0 - "@types/unist": ^2.0.0 - hastscript: ^7.0.0 - property-information: ^6.0.0 - vfile: ^5.0.0 - vfile-location: ^4.0.0 - web-namespaces: ^2.0.0 - checksum: 79431243b65d6fb327988614b3d8addd805cdf620599ce194dce91c1a1c99dc356bfb25494821445ecff49edc3ec3f2ce0b151f5e401e2984fed81a4178b7e79 - languageName: node - linkType: hard - -"hast-util-parse-selector@npm:^2.0.0": - version: 2.2.5 - resolution: "hast-util-parse-selector@npm:2.2.5" - checksum: 22ee4afbd11754562144cb3c4f3ec52524dafba4d90ee52512902d17cf11066d83b38f7bdf6ca571bbc2541f07ba30db0d234657b6ecb8ca4631587466459605 - languageName: node - linkType: hard - -"hast-util-parse-selector@npm:^3.0.0": - version: 3.1.1 - resolution: "hast-util-parse-selector@npm:3.1.1" - dependencies: - "@types/hast": ^2.0.0 - checksum: 511d373465f60dd65e924f88bf0954085f4fb6e3a2b062a4b5ac43b93cbfd36a8dce6234b5d1e3e63499d936375687e83fc5da55628b22bd6b581b5ee167d1c4 - languageName: node - linkType: hard - -"hast-util-raw@npm:^7.0.0": - version: 7.2.3 - resolution: "hast-util-raw@npm:7.2.3" - dependencies: - "@types/hast": ^2.0.0 - "@types/parse5": ^6.0.0 - hast-util-from-parse5: ^7.0.0 - hast-util-to-parse5: ^7.0.0 - html-void-elements: ^2.0.0 - parse5: ^6.0.0 - unist-util-position: ^4.0.0 - unist-util-visit: ^4.0.0 - vfile: ^5.0.0 - web-namespaces: ^2.0.0 - zwitch: ^2.0.0 - checksum: 21857eea3ffb8fd92d2d9be7793b56d0b2c40db03c4cfa14828855ae41d7c584917aa83efb7157220b2e41e25e95f81f24679ac342c35145e5f1c1d39015f81f - languageName: node - linkType: hard - -"hast-util-to-html@npm:^8.0.0": - version: 8.0.4 - resolution: "hast-util-to-html@npm:8.0.4" - dependencies: - "@types/hast": ^2.0.0 - "@types/unist": ^2.0.0 - ccount: ^2.0.0 - comma-separated-tokens: ^2.0.0 - hast-util-raw: ^7.0.0 - hast-util-whitespace: ^2.0.0 - html-void-elements: ^2.0.0 - property-information: ^6.0.0 - space-separated-tokens: ^2.0.0 - stringify-entities: ^4.0.0 - zwitch: ^2.0.4 - checksum: 8f2ae071df2ced5afb4f19f76af8fd3a2f837dc47bcc1c0e0c1578d29dafcd28738f9617505d13c4a2adf13d70e043143e2ad8f130d5554ab4fc11bfa8f74094 - languageName: node - linkType: hard - -"hast-util-to-parse5@npm:^7.0.0": - version: 7.1.0 - resolution: "hast-util-to-parse5@npm:7.1.0" - dependencies: - "@types/hast": ^2.0.0 - comma-separated-tokens: ^2.0.0 - property-information: ^6.0.0 - space-separated-tokens: ^2.0.0 - web-namespaces: ^2.0.0 - zwitch: ^2.0.0 - checksum: 3a7f2175a3db599bbae7e49ba73d3e5e688e5efca7590ff50130ba108ad649f728402815d47db49146f6b94c14c934bf119915da9f6964e38802c122bcc8af6b - languageName: node - linkType: hard - -"hast-util-to-string@npm:^1.0.4": - version: 1.0.4 - resolution: "hast-util-to-string@npm:1.0.4" - checksum: 8132508d5c08d542b64979ad558e474f481011c29d5fce9b1a1fe779fc97e151b734b5c6d94f4937c4ec978b1d641977ee7f9f5ed61ea0611600764abdff7cbb - languageName: node - linkType: hard - -"hast-util-whitespace@npm:^2.0.0": - version: 2.0.1 - resolution: "hast-util-whitespace@npm:2.0.1" - checksum: 431be6b2f35472f951615540d7a53f69f39461e5e080c0190268bdeb2be9ab9b1dddfd1f467dd26c1de7e7952df67beb1307b6ee940baf78b24a71b5e0663868 - languageName: node - linkType: hard - -"hastscript@npm:^6.0.0": - version: 6.0.0 - resolution: "hastscript@npm:6.0.0" - dependencies: - "@types/hast": ^2.0.0 - comma-separated-tokens: ^1.0.0 - hast-util-parse-selector: ^2.0.0 - property-information: ^5.0.0 - space-separated-tokens: ^1.0.0 - checksum: 5e50b85af0d2cb7c17979cb1ddca75d6b96b53019dd999b39e7833192c9004201c3cee6445065620ea05d0087d9ae147a4844e582d64868be5bc6b0232dfe52d - languageName: node - linkType: hard - -"hastscript@npm:^7.0.0": - version: 7.2.0 - resolution: "hastscript@npm:7.2.0" - dependencies: - "@types/hast": ^2.0.0 - comma-separated-tokens: ^2.0.0 - hast-util-parse-selector: ^3.0.0 - property-information: ^6.0.0 - space-separated-tokens: ^2.0.0 - checksum: 928a21576ff7b9a8c945e7940bcbf2d27f770edb4279d4d04b33dc90753e26ca35c1172d626f54afebd377b2afa32331e399feb3eb0f7b91a399dca5927078ae - languageName: node - linkType: hard - "hey-listen@npm:^1.0.8": version: 1.0.8 resolution: "hey-listen@npm:1.0.8" @@ -5422,9 +4933,6 @@ __metadata: "@ctrl/qbittorrent": ^4.1.0 "@ctrl/shared-torrent": ^4.1.1 "@ctrl/transmission": ^4.1.1 - "@dnd-kit/core": ^6.0.5 - "@dnd-kit/sortable": ^7.0.1 - "@dnd-kit/utilities": ^3.2.0 "@emotion/react": ^11.10.5 "@emotion/server": ^11.10.0 "@mantine/core": ^5.9.3 @@ -5437,28 +4945,24 @@ __metadata: "@mantine/notifications": ^5.9.3 "@next/bundle-analyzer": ^12.1.4 "@next/eslint-plugin-next": ^12.1.4 - "@nivo/core": ^0.79.0 - "@nivo/line": ^0.79.1 + "@nivo/core": ^0.80.0 + "@nivo/line": ^0.80.0 "@tabler/icons": ^1.106.0 "@tanstack/react-query": ^4.2.1 "@tanstack/react-query-devtools": ^4.24.4 "@types/dockerode": ^3.3.9 "@types/node": 17.0.1 - "@types/ping": ^0.4.1 + "@types/prismjs": ^1.26.0 "@types/react": 17.0.1 "@types/uuid": ^8.3.4 "@types/video.js": ^7.3.51 "@typescript-eslint/eslint-plugin": ^5.30.7 "@typescript-eslint/parser": ^5.30.7 - "@uiw/react-textarea-code-editor": v1.4.4 axios: ^0.27.2 - babel-loader: ^9.1.2 - babel-plugin-transform-remove-imports: ^1.7.0 consola: ^2.15.3 cookies-next: ^2.1.1 dayjs: ^1.11.7 dockerode: ^3.3.2 - embla-carousel-react: ^7.0.0 eslint: ^8.20.0 eslint-config-airbnb: ^19.0.4 eslint-config-airbnb-typescript: ^17.0.0 @@ -5473,23 +4977,18 @@ __metadata: fily-publish-gridstack: ^0.0.13 framer-motion: ^6.5.1 i18next: ^21.9.1 - i18next-browser-languagedetector: ^6.1.5 - i18next-http-backend: ^1.4.1 jest: ^28.1.3 js-file-download: ^0.4.12 next: ^13.1.6 next-i18next: ^11.3.0 - next-remove-imports: ^1.0.8 nzbget-api: ^0.0.3 - ping: ^0.4.2 prettier: ^2.7.1 - prism-react-renderer: ^1.3.5 + prismjs: ^1.29.0 react: ^18.2.0 react-dom: ^18.2.0 + react-simple-code-editor: ^0.13.1 sabnzbd-api: ^1.5.0 sass: ^1.56.1 - sharp: ^0.30.7 - systeminformation: ^5.12.1 typescript: ^4.7.4 uuid: ^8.3.2 video.js: ^8.0.3 @@ -5553,13 +5052,6 @@ __metadata: languageName: node linkType: hard -"html-void-elements@npm:^2.0.0": - version: 2.0.1 - resolution: "html-void-elements@npm:2.0.1" - checksum: 06d41f13b9d5d6e0f39861c4bec9a9196fa4906d56cd5cf6cf54ad2e52a85bf960cca2bf9600026bde16c8331db171bedba5e5a35e2e43630c8f1d497b2fb658 - languageName: node - linkType: hard - "htmlparser2@npm:7.2.0": version: 7.2.0 resolution: "htmlparser2@npm:7.2.0" @@ -5636,15 +5128,6 @@ __metadata: languageName: node linkType: hard -"i18next-browser-languagedetector@npm:^6.1.5": - version: 6.1.8 - resolution: "i18next-browser-languagedetector@npm:6.1.8" - dependencies: - "@babel/runtime": ^7.19.0 - checksum: dd84d3c9cb693a70662436b06f5554898815df33b7641249a64876c74c38960f11ef17b4d7f49ee2da7262abe0f3ae73abe7f3a3b435a344d0d07e4ca7cb24c6 - languageName: node - linkType: hard - "i18next-fs-backend@npm:^1.1.4": version: 1.2.0 resolution: "i18next-fs-backend@npm:1.2.0" @@ -5652,15 +5135,6 @@ __metadata: languageName: node linkType: hard -"i18next-http-backend@npm:^1.4.1": - version: 1.4.5 - resolution: "i18next-http-backend@npm:1.4.5" - dependencies: - cross-fetch: 3.1.5 - checksum: 1978a9d7970cc711e96133553e5f3815cf16c3e2f8db7982036f8c913c5a64eb20953e85e0ab48a88ad3c754f51184b67a778655ed65aeaae46430cdc1f673da - languageName: node - linkType: hard - "i18next@npm:^21.8.13, i18next@npm:^21.9.1": version: 21.10.0 resolution: "i18next@npm:21.10.0" @@ -5767,13 +5241,6 @@ __metadata: languageName: node linkType: hard -"ini@npm:~1.3.0": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 - languageName: node - linkType: hard - "inline-style-parser@npm:0.1.1": version: 0.1.1 resolution: "inline-style-parser@npm:0.1.1" @@ -5806,23 +5273,6 @@ __metadata: languageName: node linkType: hard -"is-alphabetical@npm:^1.0.0": - version: 1.0.4 - resolution: "is-alphabetical@npm:1.0.4" - checksum: 6508cce44fd348f06705d377b260974f4ce68c74000e7da4045f0d919e568226dc3ce9685c5a2af272195384df6930f748ce9213fc9f399b5d31b362c66312cb - languageName: node - linkType: hard - -"is-alphanumerical@npm:^1.0.0": - version: 1.0.4 - resolution: "is-alphanumerical@npm:1.0.4" - dependencies: - is-alphabetical: ^1.0.0 - is-decimal: ^1.0.0 - checksum: e2e491acc16fcf5b363f7c726f666a9538dba0a043665740feb45bba1652457a73441e7c5179c6768a638ed396db3437e9905f403644ec7c468fb41f4813d03f - languageName: node - linkType: hard - "is-arguments@npm:^1.1.1": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" @@ -5851,13 +5301,6 @@ __metadata: languageName: node linkType: hard -"is-arrayish@npm:^0.3.1": - version: 0.3.2 - resolution: "is-arrayish@npm:0.3.2" - checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f - languageName: node - linkType: hard - "is-bigint@npm:^1.0.1": version: 1.0.4 resolution: "is-bigint@npm:1.0.4" @@ -5886,13 +5329,6 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:^2.0.0": - version: 2.0.5 - resolution: "is-buffer@npm:2.0.5" - checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 - languageName: node - linkType: hard - "is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" @@ -5918,13 +5354,6 @@ __metadata: languageName: node linkType: hard -"is-decimal@npm:^1.0.0": - version: 1.0.4 - resolution: "is-decimal@npm:1.0.4" - checksum: ed483a387517856dc395c68403a10201fddcc1b63dc56513fbe2fe86ab38766120090ecdbfed89223d84ca8b1cd28b0641b93cb6597b6e8f4c097a7c24e3fb96 - languageName: node - linkType: hard - "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -5962,13 +5391,6 @@ __metadata: languageName: node linkType: hard -"is-hexadecimal@npm:^1.0.0": - version: 1.0.4 - resolution: "is-hexadecimal@npm:1.0.4" - checksum: a452e047587b6069332d83130f54d30da4faf2f2ebaa2ce6d073c27b5703d030d58ed9e0b729c8e4e5b52c6f1dab26781bb77b7bc6c7805f14f320e328ff8cd5 - languageName: node - linkType: hard - "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" @@ -6013,13 +5435,6 @@ __metadata: languageName: node linkType: hard -"is-plain-obj@npm:^4.0.0": - version: 4.1.0 - resolution: "is-plain-obj@npm:4.1.0" - checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce - languageName: node - linkType: hard - "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -6710,13 +6125,6 @@ __metadata: languageName: node linkType: hard -"json-schema-traverse@npm:^1.0.0": - version: 1.0.0 - resolution: "json-schema-traverse@npm:1.0.0" - checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad - languageName: node - linkType: hard - "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -6735,7 +6143,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2, json5@npm:^2.2.2": +"json5@npm:^2.2.2": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -6824,17 +6232,6 @@ __metadata: languageName: node linkType: hard -"loader-utils@npm:^2.0.0": - version: 2.0.4 - resolution: "loader-utils@npm:2.0.4" - dependencies: - big.js: ^5.2.2 - emojis-list: ^3.0.0 - json5: ^2.1.2 - checksum: a5281f5fff1eaa310ad5e1164095689443630f3411e927f95031ab4fb83b4a98f388185bb1fe949e8ab8d4247004336a625e9255c22122b815bb9a4c5d8fc3b7 - languageName: node - linkType: hard - "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -6928,7 +6325,7 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.0.0, make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": +"make-dir@npm:^3.0.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" dependencies: @@ -7065,13 +6462,20 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6, minimist@npm:~1.2.5": +"minimist@npm:^1.2.0, minimist@npm:^1.2.6": version: 1.2.7 resolution: "minimist@npm:1.2.7" checksum: 7346574a1038ca23c32e02252f603801f09384dd1d78b69a943a4e8c2c28730b80e96193882d3d3b22a063445f460e48316b29b8a25addca2d7e5e8f75478bec languageName: node linkType: hard +"minimist@npm:~1.2.5": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" @@ -7149,7 +6553,7 @@ __metadata: languageName: node linkType: hard -"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": +"mkdirp-classic@npm:^0.5.2": version: 0.5.3 resolution: "mkdirp-classic@npm:0.5.3" checksum: 3f4e088208270bbcc148d53b73e9a5bd9eef05ad2cbf3b3d0ff8795278d50dd1d11a8ef1875ff5aea3fa888931f95bfcb2ad5b7c1061cfefd6284d199e6776ac @@ -7240,13 +6644,6 @@ __metadata: languageName: node linkType: hard -"napi-build-utils@npm:^1.0.1": - version: 1.0.2 - resolution: "napi-build-utils@npm:1.0.2" - checksum: 06c14271ee966e108d55ae109f340976a9556c8603e888037145d6522726aebe89dd0c861b4b83947feaf6d39e79e08817559e8693deedc2c94e82c5cbd090c7 - languageName: node - linkType: hard - "natural-compare-lite@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare-lite@npm:1.4.0" @@ -7286,17 +6683,6 @@ __metadata: languageName: node linkType: hard -"next-remove-imports@npm:^1.0.8": - version: 1.0.8 - resolution: "next-remove-imports@npm:1.0.8" - dependencies: - "@babel/core": ^7.14.3 - babel-loader: ^8.2.2 - babel-plugin-transform-remove-imports: ^1.5.4 - checksum: e13b1ccd3836803658936d5dc90470877b614147446a57643247478956cf3c4d47ecc4dc5fe2f6ee3c6f69d378b09ef17e0b26fbbfaa47f34a6a04263441d1d6 - languageName: node - linkType: hard - "next@npm:^13.1.6": version: 13.1.6 resolution: "next@npm:13.1.6" @@ -7365,24 +6751,6 @@ __metadata: languageName: node linkType: hard -"node-abi@npm:^3.3.0": - version: 3.31.0 - resolution: "node-abi@npm:3.31.0" - dependencies: - semver: ^7.3.5 - checksum: 38fa63c689ef50b4b8f576d5f843107e2d25bd7e7d4ed56dc0adb9db7eda945fc433a7a432beca4b9decf62ff05395f0e84f46e7ab7f275f85e5fde213353950 - languageName: node - linkType: hard - -"node-addon-api@npm:^5.0.0": - version: 5.1.0 - resolution: "node-addon-api@npm:5.1.0" - dependencies: - node-gyp: latest - checksum: 2508bd2d2981945406243a7bd31362fc7af8b70b8b4d65f869c61731800058fb818cc2fd36c8eac714ddd0e568cc85becf5e165cebbdf7b5024d5151bbc75ea1 - languageName: node - linkType: hard - "node-domexception@npm:1.0.0": version: 1.0.0 resolution: "node-domexception@npm:1.0.0" @@ -7390,20 +6758,6 @@ __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" @@ -7718,20 +7072,6 @@ __metadata: languageName: node linkType: hard -"parse-entities@npm:^2.0.0": - version: 2.0.0 - resolution: "parse-entities@npm:2.0.0" - dependencies: - character-entities: ^1.0.0 - character-entities-legacy: ^1.0.0 - character-reference-invalid: ^1.0.0 - is-alphanumerical: ^1.0.0 - is-decimal: ^1.0.0 - is-hexadecimal: ^1.0.0 - checksum: 7addfd3e7d747521afac33c8121a5f23043c6973809756920d37e806639b4898385d386fcf4b3c8e2ecf1bc28aac5ae97df0b112d5042034efbe80f44081ebce - languageName: node - linkType: hard - "parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" @@ -7744,13 +7084,6 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^6.0.0": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd - languageName: node - linkType: hard - "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -7800,16 +7133,6 @@ __metadata: languageName: node linkType: hard -"ping@npm:^0.4.2": - version: 0.4.2 - resolution: "ping@npm:0.4.2" - dependencies: - q: 1.x - underscore: ^1.12.0 - checksum: 43992c76fb3294734248753f2028d9fab3b919dbfae79a5ea6df7e81fc2d6d555dd0b195d6c3dbc5c89aa9dba1cd8eb58d5ecedad103ecfee64df516e5f3665b - languageName: node - linkType: hard - "pirates@npm:^4.0.4": version: 4.0.5 resolution: "pirates@npm:4.0.5" @@ -7828,7 +7151,7 @@ __metadata: languageName: node linkType: hard -"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": +"pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" dependencies: @@ -7860,28 +7183,6 @@ __metadata: languageName: node linkType: hard -"prebuild-install@npm:^7.1.1": - version: 7.1.1 - resolution: "prebuild-install@npm:7.1.1" - dependencies: - detect-libc: ^2.0.0 - expand-template: ^2.0.3 - github-from-package: 0.0.0 - minimist: ^1.2.3 - mkdirp-classic: ^0.5.3 - napi-build-utils: ^1.0.1 - node-abi: ^3.3.0 - pump: ^3.0.0 - rc: ^1.2.7 - simple-get: ^4.0.0 - tar-fs: ^2.0.0 - tunnel-agent: ^0.6.0 - bin: - prebuild-install: bin.js - checksum: dbf96d0146b6b5827fc8f67f72074d2e19c69628b9a7a0a17d0fad1bf37e9f06922896972e074197fc00a52eae912993e6ef5a0d471652f561df5cb516f3f467 - languageName: node - linkType: hard - "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -7910,19 +7211,10 @@ __metadata: languageName: node linkType: hard -"prism-react-renderer@npm:^1.3.5": - version: 1.3.5 - resolution: "prism-react-renderer@npm:1.3.5" - peerDependencies: - react: ">=0.14.9" - checksum: c18806dcbc4c0b4fd6fd15bd06b4f7c0a6da98d93af235c3e970854994eb9b59e23315abb6cfc29e69da26d36709a47e25da85ab27fed81b6812f0a52caf6dfa - languageName: node - linkType: hard - -"prismjs@npm:~1.27.0": - version: 1.27.0 - resolution: "prismjs@npm:1.27.0" - checksum: 85c7f4a3e999073502cc9e1882af01e3709706369ec254b60bff1149eda701f40d02512acab956012dc7e61cfd61743a3a34c1bd0737e8dbacd79141e5698bbc +"prismjs@npm:^1.29.0": + version: 1.29.0 + resolution: "prismjs@npm:1.29.0" + checksum: 007a8869d4456ff8049dc59404e32d5666a07d99c3b0e30a18bd3b7676dfa07d1daae9d0f407f20983865fd8da56de91d09cb08e6aa61f5bc420a27c0beeaf93 languageName: node linkType: hard @@ -7978,22 +7270,6 @@ __metadata: languageName: node linkType: hard -"property-information@npm:^5.0.0": - version: 5.6.0 - resolution: "property-information@npm:5.6.0" - dependencies: - xtend: ^4.0.0 - checksum: fcf87c6542e59a8bbe31ca0b3255a4a63ac1059b01b04469680288998bcfa97f341ca989566adbb63975f4d85339030b82320c324a511532d390910d1c583893 - languageName: node - linkType: hard - -"property-information@npm:^6.0.0": - version: 6.2.0 - resolution: "property-information@npm:6.2.0" - checksum: 23afce07ba821cbe7d926e63cdd680991961c82be4bbb6c0b17c47f48894359c1be6e51cd74485fc10a9d3fd361b475388e1e39311ed2b53127718f72aab1955 - languageName: node - linkType: hard - "psl@npm:^1.1.33": version: 1.9.0 resolution: "psl@npm:1.9.0" @@ -8018,7 +7294,7 @@ __metadata: languageName: node linkType: hard -"q@npm:1.x, q@npm:^1.4.1": +"q@npm:^1.4.1": version: 1.5.1 resolution: "q@npm:1.5.1" checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12 @@ -8046,20 +7322,6 @@ __metadata: languageName: node linkType: hard -"rc@npm:^1.2.7": - version: 1.2.8 - resolution: "rc@npm:1.2.8" - dependencies: - deep-extend: ^0.6.0 - ini: ~1.3.0 - minimist: ^1.2.0 - strip-json-comments: ~2.0.1 - bin: - rc: ./cli.js - checksum: 2e26e052f8be2abd64e6d1dabfbd7be03f80ec18ccbc49562d31f617d0015fbdbcf0f9eed30346ea6ab789e0fdfe4337f033f8016efdbee0df5354751842080e - languageName: node - linkType: hard - "react-dom@npm:^18.2.0": version: 18.2.0 resolution: "react-dom@npm:18.2.0" @@ -8131,6 +7393,16 @@ __metadata: 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" + peerDependencies: + react: "*" + react-dom: "*" + checksum: 1d223e34ccac5d7f91318f28d5edab6ccb13c51b1afb502094b8475214321263bb44258d355978e1714e9360c9081fb9f38d3ae89071a06628407627c362cc45 + languageName: node + linkType: hard + "react-textarea-autosize@npm:8.3.4": version: 8.3.4 resolution: "react-textarea-autosize@npm:8.3.4" @@ -8215,18 +7487,7 @@ __metadata: languageName: node linkType: hard -"refractor@npm:^3.4.0": - version: 3.6.0 - resolution: "refractor@npm:3.6.0" - dependencies: - hastscript: ^6.0.0 - parse-entities: ^2.0.0 - prismjs: ~1.27.0 - checksum: 39b01c4168c77c5c8486f9bf8907bbb05f257f15026057ba5728535815a2d90eed620468a4bfbb2b8ceefbb3ce3931a1be8b17152dbdbc8b0eef92450ff750a2 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.13.11, regenerator-runtime@npm:^0.13.4": +"regenerator-runtime@npm:^0.13.11": version: 0.13.11 resolution: "regenerator-runtime@npm:0.13.11" checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 @@ -8251,41 +7512,6 @@ __metadata: languageName: node linkType: hard -"rehype-parse@npm:^8.0.0": - version: 8.0.4 - resolution: "rehype-parse@npm:8.0.4" - dependencies: - "@types/hast": ^2.0.0 - hast-util-from-parse5: ^7.0.0 - parse5: ^6.0.0 - unified: ^10.0.0 - checksum: e678a5f9fa7cb91d5957f5f38bc37bc9fb90b8011a1ed6a90541ba6fff9f243c752c88b7f422cba8f5ba83ccb22942b1825654e8c3040970c703b85a6037efdf - languageName: node - linkType: hard - -"rehype-stringify@npm:^9.0.0": - version: 9.0.3 - resolution: "rehype-stringify@npm:9.0.3" - dependencies: - "@types/hast": ^2.0.0 - hast-util-to-html: ^8.0.0 - unified: ^10.0.0 - checksum: ff4b1f3f88f2747a9f88d84f8cd9811e892a7309574480547ddfd94022725a62e17a9ccc69f9d909620a20f2a6ad750ea74b317f06ab50955209b5c0ede5cd3f - languageName: node - linkType: hard - -"rehype@npm:12.0.0": - version: 12.0.0 - resolution: "rehype@npm:12.0.0" - dependencies: - "@types/hast": ^2.0.0 - rehype-parse: ^8.0.0 - rehype-stringify: ^9.0.0 - unified: ^10.0.0 - checksum: 469a3c040ce315a3f58663d558930a20fa65356dd653d2adefe8e1a0adbcd728adf050ccad3f046141daca7e538fe27b2fcfb96722b83cbe5d78b61862fade96 - languageName: node - linkType: hard - "remove-accents@npm:0.4.2": version: 0.4.2 resolution: "remove-accents@npm:0.4.2" @@ -8300,13 +7526,6 @@ __metadata: languageName: node linkType: hard -"require-from-string@npm:^2.0.2": - version: 2.0.2 - resolution: "require-from-string@npm:2.0.2" - checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b - languageName: node - linkType: hard - "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -8474,13 +7693,6 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:^5.0.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" @@ -8488,6 +7700,13 @@ __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" @@ -8537,29 +7756,6 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^2.6.5": - version: 2.7.1 - resolution: "schema-utils@npm:2.7.1" - dependencies: - "@types/json-schema": ^7.0.5 - ajv: ^6.12.4 - ajv-keywords: ^3.5.2 - checksum: 32c62fc9e28edd101e1bd83453a4216eb9bd875cc4d3775e4452b541908fa8f61a7bbac8ffde57484f01d7096279d3ba0337078e85a918ecbeb72872fb09fb2b - languageName: node - linkType: hard - -"schema-utils@npm:^4.0.0": - version: 4.0.0 - resolution: "schema-utils@npm:4.0.0" - dependencies: - "@types/json-schema": ^7.0.9 - ajv: ^8.8.0 - ajv-formats: ^2.1.1 - ajv-keywords: ^5.0.0 - checksum: c843e92fdd1a5c145dbb6ffdae33e501867f9703afac67bdf35a685e49f85b1dcc10ea250033175a64bd9d31f0555bc6785b8359da0c90bcea30cf6dfbb55a8f - languageName: node - linkType: hard - "semver@npm:^6.0.0, semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" @@ -8587,23 +7783,6 @@ __metadata: languageName: node linkType: hard -"sharp@npm:^0.30.7": - version: 0.30.7 - resolution: "sharp@npm:0.30.7" - dependencies: - color: ^4.2.3 - detect-libc: ^2.0.1 - node-addon-api: ^5.0.0 - node-gyp: latest - prebuild-install: ^7.1.1 - semver: ^7.3.7 - simple-get: ^4.0.1 - tar-fs: ^2.1.1 - tunnel-agent: ^0.6.0 - checksum: bbc63ca3c7ea8a5bff32cd77022cfea30e25a03f5bd031e935924bf6cf0e11e3388e8b0e22b3137bf8816aa73407f1e4fbeb190f3a35605c27ffca9f32b91601 - languageName: node - linkType: hard - "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -8638,33 +7817,6 @@ __metadata: languageName: node linkType: hard -"simple-concat@npm:^1.0.0": - version: 1.0.1 - resolution: "simple-concat@npm:1.0.1" - checksum: 4d211042cc3d73a718c21ac6c4e7d7a0363e184be6a5ad25c8a1502e49df6d0a0253979e3d50dbdd3f60ef6c6c58d756b5d66ac1e05cda9cacd2e9fc59e3876a - languageName: node - linkType: hard - -"simple-get@npm:^4.0.0, simple-get@npm:^4.0.1": - version: 4.0.1 - resolution: "simple-get@npm:4.0.1" - dependencies: - decompress-response: ^6.0.0 - once: ^1.3.1 - simple-concat: ^1.0.0 - checksum: e4132fd27cf7af230d853fa45c1b8ce900cb430dd0a3c6d3829649fe4f2b26574c803698076c4006450efb0fad2ba8c5455fbb5755d4b0a5ec42d4f12b31d27e - languageName: node - linkType: hard - -"simple-swizzle@npm:^0.2.2": - version: 0.2.2 - resolution: "simple-swizzle@npm:0.2.2" - dependencies: - is-arrayish: ^0.3.1 - checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0 - languageName: node - linkType: hard - "sirv@npm:^1.0.7": version: 1.0.19 resolution: "sirv@npm:1.0.19" @@ -8749,20 +7901,6 @@ __metadata: languageName: node linkType: hard -"space-separated-tokens@npm:^1.0.0": - version: 1.1.5 - resolution: "space-separated-tokens@npm:1.1.5" - checksum: 8ef68f1cfa8ccad316b7f8d0df0919d0f1f6d32101e8faeee34ea3a923ce8509c1ad562f57388585ee4951e92d27afa211ed0a077d3d5995b5ba9180331be708 - languageName: node - linkType: hard - -"space-separated-tokens@npm:^2.0.0": - version: 2.0.2 - resolution: "space-separated-tokens@npm:2.0.2" - checksum: 202e97d7ca1ba0758a0aa4fe226ff98142073bcceeff2da3aad037968878552c3bbce3b3231970025375bbba5aee00c5b8206eda408da837ab2dc9c0f26be990 - languageName: node - linkType: hard - "split-ca@npm:^1.0.1": version: 1.0.1 resolution: "split-ca@npm:1.0.1" @@ -8905,16 +8043,6 @@ __metadata: languageName: node linkType: hard -"stringify-entities@npm:^4.0.0": - version: 4.0.3 - resolution: "stringify-entities@npm:4.0.3" - dependencies: - character-entities-html4: ^2.0.0 - character-entities-legacy: ^3.0.0 - checksum: 59e8f523b403bf7d415690e72ae52982decd6ea5426bd8b3f5c66225ddde73e766c0c0d91627df082d0794e30b19dd907ffb5864cef3602e4098d6777d7ca3c2 - languageName: node - linkType: hard - "strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -8952,13 +8080,6 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:~2.0.1": - version: 2.0.1 - resolution: "strip-json-comments@npm:2.0.1" - checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 - languageName: node - linkType: hard - "style-to-js@npm:1.1.0": version: 1.1.0 resolution: "style-to-js@npm:1.1.0" @@ -9063,16 +8184,6 @@ __metadata: languageName: node linkType: hard -"systeminformation@npm:^5.12.1": - version: 5.17.8 - resolution: "systeminformation@npm:5.17.8" - bin: - systeminformation: lib/cli.js - checksum: faea46485d646c304e1cf19956155345e1e2e644b605c40189851846b544e58a9937467b3e577151b54a54ed5310b625cca49665aa7ef1eb1bf8a8e3d7282d8d - conditions: (os=darwin | os=linux | os=win32 | os=freebsd | os=openbsd | os=netbsd | os=sunos | os=android) - languageName: node - linkType: hard - "tabbable@npm:^6.0.1": version: 6.0.1 resolution: "tabbable@npm:6.0.1" @@ -9080,7 +8191,7 @@ __metadata: languageName: node linkType: hard -"tar-fs@npm:^2.0.0, tar-fs@npm:~2.0.1": +"tar-fs@npm:~2.0.1": version: 2.0.1 resolution: "tar-fs@npm:2.0.1" dependencies: @@ -9092,19 +8203,7 @@ __metadata: languageName: node linkType: hard -"tar-fs@npm:^2.1.1": - version: 2.1.1 - resolution: "tar-fs@npm:2.1.1" - dependencies: - chownr: ^1.1.1 - mkdirp-classic: ^0.5.2 - pump: ^3.0.0 - tar-stream: ^2.1.4 - checksum: f5b9a70059f5b2969e65f037b4e4da2daf0fa762d3d232ffd96e819e3f94665dbbbe62f76f084f1acb4dbdcce16c6e4dac08d12ffc6d24b8d76720f4d9cf032d - languageName: node - linkType: hard - -"tar-stream@npm:^2.0.0, tar-stream@npm:^2.1.4": +"tar-stream@npm:^2.0.0": version: 2.2.0 resolution: "tar-stream@npm:2.2.0" dependencies: @@ -9218,20 +8317,6 @@ __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 - -"trough@npm:^2.0.0": - version: 2.1.0 - resolution: "trough@npm:2.1.0" - checksum: a577bb561c2b401cc0e1d9e188fcfcdf63b09b151ff56a668da12197fe97cac15e3d77d5b51f426ccfd94255744a9118e9e9935afe81a3644fa1be9783c82886 - languageName: node - linkType: hard - "tsconfig-paths@npm:^3.14.1": version: 3.14.1 resolution: "tsconfig-paths@npm:3.14.1" @@ -9269,15 +8354,6 @@ __metadata: languageName: node linkType: hard -"tunnel-agent@npm:^0.6.0": - version: 0.6.0 - resolution: "tunnel-agent@npm:0.6.0" - dependencies: - safe-buffer: ^5.0.1 - checksum: 05f6510358f8afc62a057b8b692f05d70c1782b70db86d6a1e0d5e28a32389e52fa6e7707b6c5ecccacc031462e4bc35af85ecfe4bbc341767917b7cf6965711 - languageName: node - linkType: hard - "tweetnacl@npm:^0.14.3": version: 0.14.5 resolution: "tweetnacl@npm:0.14.5" @@ -9358,28 +8434,6 @@ __metadata: languageName: node linkType: hard -"underscore@npm:^1.12.0": - version: 1.13.6 - resolution: "underscore@npm:1.13.6" - checksum: d5cedd14a9d0d91dd38c1ce6169e4455bb931f0aaf354108e47bd46d3f2da7464d49b2171a5cf786d61963204a42d01ea1332a903b7342ad428deaafaf70ec36 - languageName: node - linkType: hard - -"unified@npm:^10.0.0": - version: 10.1.2 - resolution: "unified@npm:10.1.2" - dependencies: - "@types/unist": ^2.0.0 - bail: ^2.0.0 - extend: ^3.0.0 - is-buffer: ^2.0.0 - is-plain-obj: ^4.0.0 - trough: ^2.0.0 - vfile: ^5.0.0 - checksum: 053e7c65ede644607f87bd625a299e4b709869d2f76ec8138569e6e886903b6988b21cd9699e471eda42bee189527be0a9dac05936f1d069a5e65d0125d5d756 - languageName: node - linkType: hard - "unique-filename@npm:^2.0.0": version: 2.0.1 resolution: "unique-filename@npm:2.0.1" @@ -9398,80 +8452,6 @@ __metadata: languageName: node linkType: hard -"unist-util-is@npm:^4.0.0": - version: 4.1.0 - resolution: "unist-util-is@npm:4.1.0" - checksum: 726484cd2adc9be75a939aeedd48720f88294899c2e4a3143da413ae593f2b28037570730d5cf5fd910ff41f3bc1501e3d636b6814c478d71126581ef695f7ea - languageName: node - linkType: hard - -"unist-util-is@npm:^5.0.0": - version: 5.2.0 - resolution: "unist-util-is@npm:5.2.0" - checksum: b80debe1ce5d40a8d685c510f597e5c8b8f7089540e9e268bda1b05bcce735c10bf36d5b0e4ecded50c63fa43b8a11b0e4b784beecf1559f153a2f2855e8526c - languageName: node - linkType: hard - -"unist-util-position@npm:^4.0.0": - version: 4.0.4 - resolution: "unist-util-position@npm:4.0.4" - dependencies: - "@types/unist": ^2.0.0 - checksum: e7487b6cec9365299695e3379ded270a1717074fa11fd2407c9b934fb08db6fe1d9077ddeaf877ecf1813665f8ccded5171693d3d9a7a01a125ec5cdd5e88691 - languageName: node - linkType: hard - -"unist-util-stringify-position@npm:^3.0.0": - version: 3.0.3 - resolution: "unist-util-stringify-position@npm:3.0.3" - dependencies: - "@types/unist": ^2.0.0 - checksum: dbd66c15183607ca942a2b1b7a9f6a5996f91c0d30cf8966fb88955a02349d9eefd3974e9010ee67e71175d784c5a9fea915b0aa0b0df99dcb921b95c4c9e124 - languageName: node - linkType: hard - -"unist-util-visit-parents@npm:^3.0.0": - version: 3.1.1 - resolution: "unist-util-visit-parents@npm:3.1.1" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^4.0.0 - checksum: 1170e397dff88fab01e76d5154981666eb0291019d2462cff7a2961a3e76d3533b42eaa16b5b7e2d41ad42a5ea7d112301458283d255993e660511387bf67bc3 - languageName: node - linkType: hard - -"unist-util-visit-parents@npm:^5.1.1": - version: 5.1.3 - resolution: "unist-util-visit-parents@npm:5.1.3" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - checksum: 8ecada5978994f846b64658cf13b4092cd78dea39e1ba2f5090a5de842ba4852712c02351a8ae95250c64f864635e7b02aedf3b4a093552bb30cf1bd160efbaa - languageName: node - linkType: hard - -"unist-util-visit@npm:^2.0.3": - version: 2.0.3 - resolution: "unist-util-visit@npm:2.0.3" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^4.0.0 - unist-util-visit-parents: ^3.0.0 - checksum: 1fe19d500e212128f96d8c3cfa3312846e586b797748a1fd195fe6479f06bc90a6f6904deb08eefc00dd58e83a1c8a32fb8677252d2273ad7a5e624525b69b8f - languageName: node - linkType: hard - -"unist-util-visit@npm:^4.0.0": - version: 4.1.2 - resolution: "unist-util-visit@npm:4.1.2" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - unist-util-visit-parents: ^5.1.1 - checksum: 95a34e3f7b5b2d4b68fd722b6229972099eb97b6df18913eda44a5c11df8b1e27efe7206dd7b88c4ed244a48c474a5b2e2629ab79558ff9eb936840295549cee - languageName: node - linkType: hard - "universalify@npm:^0.2.0": version: 0.2.0 resolution: "universalify@npm:0.2.0" @@ -9590,38 +8570,6 @@ __metadata: languageName: node linkType: hard -"vfile-location@npm:^4.0.0": - version: 4.0.1 - resolution: "vfile-location@npm:4.0.1" - dependencies: - "@types/unist": ^2.0.0 - vfile: ^5.0.0 - checksum: cc0df62075c741beee699e651374aeb56c4c1f4333398c0ba924281c2b51d4b7669c69c5b837ea395775626ad030d6f1bd27fd0a7eaf3f9f1bbd55393948ad6c - languageName: node - linkType: hard - -"vfile-message@npm:^3.0.0": - version: 3.1.3 - resolution: "vfile-message@npm:3.1.3" - dependencies: - "@types/unist": ^2.0.0 - unist-util-stringify-position: ^3.0.0 - checksum: f5ec2afbc1d5589fc45729209bdcaf01e3fc520fdac693557e62bd91cc8d6f915a6397c2f4d5f7a129ffc6c7511cb77eaf9e0932be1a70e39bed584ef7c86dbd - languageName: node - linkType: hard - -"vfile@npm:^5.0.0": - version: 5.3.6 - resolution: "vfile@npm:5.3.6" - dependencies: - "@types/unist": ^2.0.0 - is-buffer: ^2.0.0 - unist-util-stringify-position: ^3.0.0 - vfile-message: ^3.0.0 - checksum: 1aa5efff510bc6621ff8a7dc6513110529a11a8d665b44f169cc2a2b6bfa4f312efa00bfe86ca20e506538ff2915c8e538a664bd02a06419421ff964844fbe94 - languageName: node - linkType: hard - "video.js@npm:^7 || ^8, video.js@npm:^8.0.3": version: 8.0.3 resolution: "video.js@npm:8.0.3" @@ -9687,13 +8635,6 @@ __metadata: languageName: node linkType: hard -"web-namespaces@npm:^2.0.0": - version: 2.0.1 - resolution: "web-namespaces@npm:2.0.1" - checksum: b6d9f02f1a43d0ef0848a812d89c83801d5bbad57d8bb61f02eb6d7eb794c3736f6cc2e1191664bb26136594c8218ac609f4069722c6f56d9fc2d808fa9271c6 - 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" @@ -9701,13 +8642,6 @@ __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 - "webpack-bundle-analyzer@npm:4.3.0": version: 4.3.0 resolution: "webpack-bundle-analyzer@npm:4.3.0" @@ -9727,16 +8661,6 @@ __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" @@ -9945,10 +8869,3 @@ __metadata: checksum: fc443abf5bc9deac0d4e375847e7914e44c7ffc9f7f09b60e466cb9bbbcf5a46706bf2f9c8b9e6e6c9a1c5aea0bd6123cbf9fbcd39788ae27d8494d505969ae8 languageName: node linkType: hard - -"zwitch@npm:^2.0.0, zwitch@npm:^2.0.4": - version: 2.0.4 - resolution: "zwitch@npm:2.0.4" - checksum: f22ec5fc2d5f02c423c93d35cdfa83573a3a3bd98c66b927c368ea4d0e7252a500df2a90a6b45522be536a96a73404393c958e945fdba95e6832c200791702b6 - languageName: node - linkType: hard From edb13ae716c1801c8f842ae64cf95c8c9ad8d69f Mon Sep 17 00:00:00 2001 From: ajnart Date: Fri, 10 Feb 2023 13:20:38 +0900 Subject: [PATCH 08/23] =?UTF-8?q?=F0=9F=9A=A7=20=20WIP=20on=20dynamic=20im?= =?UTF-8?q?ports?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/locales/en/modules/video-stream.json | 4 ++-- src/widgets/video/VideoStreamTile.tsx | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/public/locales/en/modules/video-stream.json b/public/locales/en/modules/video-stream.json index 3b84c3574..a35c740a3 100644 --- a/public/locales/en/modules/video-stream.json +++ b/public/locales/en/modules/video-stream.json @@ -4,8 +4,8 @@ "description": "Embed a video stream or video from a camera or a website", "settings": { "title": "Settings for video stream widget", - "cameraFeedUrl": { - "label": "Camera feed url" + "FeedUrl": { + "label": "Feed url" }, "autoPlay": { "label": "Auto play" diff --git a/src/widgets/video/VideoStreamTile.tsx b/src/widgets/video/VideoStreamTile.tsx index 028809f99..7db8a2c80 100644 --- a/src/widgets/video/VideoStreamTile.tsx +++ b/src/widgets/video/VideoStreamTile.tsx @@ -1,15 +1,17 @@ import { Center, Group, Stack, Title } from '@mantine/core'; import { IconDeviceCctv, IconHeartBroken } from '@tabler/icons'; import { useTranslation } from 'next-i18next'; +import dynamic from 'next/dynamic'; import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; -import VideoFeed from './VideoFeed'; + +const VideoFeed = dynamic(() => import('./VideoFeed'), { ssr: false }); const definition = defineWidget({ id: 'video-stream', icon: IconDeviceCctv, options: { - cameraFeedUrl: { + FeedUrl: { type: 'text', defaultValue: '', }, @@ -43,7 +45,7 @@ interface VideoStreamWidgetProps { function VideoStreamWidget({ widget }: VideoStreamWidgetProps) { const { t } = useTranslation('modules/video-stream'); - if (!widget.properties.cameraFeedUrl) { + if (!widget.properties.FeedUrl) { return (
@@ -56,7 +58,7 @@ function VideoStreamWidget({ widget }: VideoStreamWidgetProps) { return ( Date: Fri, 10 Feb 2023 13:20:43 +0900 Subject: [PATCH 09/23] =?UTF-8?q?=F0=9F=9A=A7=20=20WIP=20on=20dynamic=20im?= =?UTF-8?q?ports?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widgets/download-speed/Tile.tsx | 274 +++++++++++++++++ .../TorrentNetworkTrafficTile.tsx | 282 +----------------- 2 files changed, 282 insertions(+), 274 deletions(-) create mode 100644 src/widgets/download-speed/Tile.tsx diff --git a/src/widgets/download-speed/Tile.tsx b/src/widgets/download-speed/Tile.tsx new file mode 100644 index 000000000..1926b1c8d --- /dev/null +++ b/src/widgets/download-speed/Tile.tsx @@ -0,0 +1,274 @@ +import { + Avatar, + Box, + Card, + Group, + Stack, + Title, + Text, + Tooltip, + useMantineTheme, +} from '@mantine/core'; +import { useElementSize, useListState } from '@mantine/hooks'; +import { linearGradientDef } from '@nivo/core'; +import { Serie, Datum, ResponsiveLine } from '@nivo/line'; +import { IconDownload, IconUpload } from '@tabler/icons'; +import { useTranslation } from 'next-i18next'; +import { useEffect } from 'react'; +import { useConfigContext } from '../../config/provider'; +import { useGetDownloadClientsQueue } from '../../hooks/widgets/download-speed/useGetNetworkSpeed'; +import { useColorTheme } from '../../tools/color'; +import { humanFileSize } from '../../tools/humanFileSize'; +import { + NormalizedDownloadQueueResponse, + TorrentTotalDownload, +} from '../../types/api/downloads/queue/NormalizedDownloadQueueResponse'; +import definition, { ITorrentNetworkTraffic } from './TorrentNetworkTrafficTile'; + +interface TorrentNetworkTrafficTileProps { + widget: ITorrentNetworkTraffic; +} + +export default function TorrentNetworkTrafficTile({ widget }: TorrentNetworkTrafficTileProps) { + const { config } = useConfigContext(); + const { ref: refRoot, height: heightRoot } = useElementSize(); + const { ref: refTitle, height: heightTitle } = useElementSize(); + const { ref: refFooter, height: heightFooter } = useElementSize(); + const { primaryColor, secondaryColor } = useColorTheme(); + const { t } = useTranslation(`modules/${definition.id}`); + + const [clientDataHistory, setClientDataHistory] = useListState(); + + const { data, dataUpdatedAt } = useGetDownloadClientsQueue(); + + useEffect(() => { + if (data) { + setClientDataHistory.append(data); + } + + if (clientDataHistory.length < 30) { + return; + } + setClientDataHistory.remove(0); + }, [dataUpdatedAt]); + + if (!data) { + return null; + } + + const recoredAppsOverTime = clientDataHistory.flatMap((x) => x.apps.map((app) => app)); + + // removing duplicates the "naive" way: https://stackoverflow.com/a/9229821/15257712 + const uniqueRecordedAppsOverTime = recoredAppsOverTime + .map((x) => x.appId) + .filter((item, position) => recoredAppsOverTime.map((y) => y.appId).indexOf(item) === position); + + const lineChartData: Serie[] = uniqueRecordedAppsOverTime.flatMap((appId) => { + const records = recoredAppsOverTime.filter((x) => x.appId === appId); + + const series: Serie[] = [ + { + id: `download_${appId}`, + data: records.map((record, index) => ({ + x: index, + y: record.totalDownload, + })), + }, + ]; + + if (records.some((x) => x.type === 'torrent')) { + const torrentRecords = records.map((record, index): Datum | null => { + if (record.type !== 'torrent') { + return null; + } + + return { + x: index, + y: record.totalUpload, + }; + }); + const filteredRecords = torrentRecords.filter((x) => x !== null) as Datum[]; + series.push({ + id: `upload_${appId}`, + data: filteredRecords, + }); + } + + return series; + }); + + const totalDownload = uniqueRecordedAppsOverTime + .map((appId) => { + const records = recoredAppsOverTime.filter((x) => x.appId === appId); + const lastRecord = records.at(-1); + return lastRecord?.totalDownload ?? 0; + }) + .reduce((acc, n) => acc + n, 0); + + const totalUpload = uniqueRecordedAppsOverTime + .map((appId) => { + const records = recoredAppsOverTime.filter((x) => x.appId === appId && x.type === 'torrent'); + const lastRecord = records.at(-1) as TorrentTotalDownload; + return lastRecord?.totalUpload ?? 0; + }) + .reduce((acc, n) => acc + n, 0); + + const graphHeight = heightRoot - heightFooter - heightTitle; + + const { colors } = useMantineTheme(); + + return ( + + + + {t('card.lineChart.title')} + + + + { + const { points } = slice; + + const recordsFromPoints = uniqueRecordedAppsOverTime.map((appId) => { + const records = recoredAppsOverTime.filter((x) => x.appId === appId); + const point = points.find((x) => x.id.includes(appId)); + const pointIndex = Number(point?.data.x) ?? 0; + const color = point?.serieColor; + return { + record: records[pointIndex], + color, + }; + }); + + return ( + + + + {recordsFromPoints.map((entry, index) => { + const app = config?.apps.find((x) => x.id === entry.record.appId); + + if (!app) { + return null; + } + + return ( + + + + + {app.name} + + + + + {humanFileSize(entry.record.totalDownload, false)} + + + + {entry.record.type === 'torrent' && ( + + + + {humanFileSize(entry.record.totalUpload, false)} + + + )} + + + + ); + })} + + + + ); + }} + data={lineChartData} + curve="monotoneX" + yFormat=" >-.2f" + axisLeft={null} + axisBottom={null} + axisRight={null} + enablePoints={false} + enableGridX={false} + enableGridY={false} + enableArea + defs={[ + linearGradientDef('gradientA', [ + { offset: 0, color: 'inherit' }, + { offset: 100, color: 'inherit', opacity: 0 }, + ]), + ]} + colors={lineChartData.flatMap((data) => + data.id.toString().startsWith('upload_') + ? colors[secondaryColor][5] + : colors[primaryColor][5] + )} + fill={[{ match: '*', id: 'gradientA' }]} + margin={{ bottom: 5 }} + animate={false} + /> + + + + + + + + + {humanFileSize(totalDownload, false)} + + + + + + {humanFileSize(totalUpload, false)} + + + + + {uniqueRecordedAppsOverTime.map((appId, index) => { + const app = config?.apps.find((x) => x.id === appId); + + if (!app) { + return null; + } + + return ( + + + + ); + })} + + + + ); +} + +const AppAvatar = ({ iconUrl }: { iconUrl: string }) => { + const { colors, colorScheme } = useMantineTheme(); + + return ( + + ); +}; diff --git a/src/widgets/download-speed/TorrentNetworkTrafficTile.tsx b/src/widgets/download-speed/TorrentNetworkTrafficTile.tsx index 4a0feff0a..85d579a74 100644 --- a/src/widgets/download-speed/TorrentNetworkTrafficTile.tsx +++ b/src/widgets/download-speed/TorrentNetworkTrafficTile.tsx @@ -1,31 +1,13 @@ -import { - Avatar, - Box, - Card, - Group, - Stack, - Text, - Title, - Tooltip, - useMantineTheme, -} from '@mantine/core'; -import { useElementSize, useListState } from '@mantine/hooks'; -import { linearGradientDef } from '@nivo/core'; -import { Datum, ResponsiveLine, Serie } from '@nivo/line'; -import { IconArrowsUpDown, IconDownload, IconUpload } from '@tabler/icons'; -import { useTranslation } from 'next-i18next'; -import { useEffect } from 'react'; -import { useConfigContext } from '../../config/provider'; -import { useGetDownloadClientsQueue } from '../../hooks/widgets/download-speed/useGetNetworkSpeed'; -import { useColorTheme } from '../../tools/color'; -import { humanFileSize } from '../../tools/humanFileSize'; -import { - NormalizedDownloadQueueResponse, - TorrentTotalDownload, -} from '../../types/api/downloads/queue/NormalizedDownloadQueueResponse'; +import { IconArrowsUpDown } from '@tabler/icons'; + +import dynamic from 'next/dynamic'; import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; +const torrentNetworkTrafficTile = dynamic(() => import('./Tile'), { + ssr: false, +}); + const definition = defineWidget({ id: 'dlspeed', icon: IconArrowsUpDown, @@ -37,257 +19,9 @@ const definition = defineWidget({ maxWidth: 12, maxHeight: 6, }, - component: TorrentNetworkTrafficTile, + component: torrentNetworkTrafficTile, }); export type ITorrentNetworkTraffic = IWidget<(typeof definition)['id'], typeof definition>; -interface TorrentNetworkTrafficTileProps { - widget: ITorrentNetworkTraffic; -} - -function TorrentNetworkTrafficTile({ widget }: TorrentNetworkTrafficTileProps) { - const { config } = useConfigContext(); - const { ref: refRoot, height: heightRoot } = useElementSize(); - const { ref: refTitle, height: heightTitle } = useElementSize(); - const { ref: refFooter, height: heightFooter } = useElementSize(); - const { primaryColor, secondaryColor } = useColorTheme(); - const { t } = useTranslation(`modules/${definition.id}`); - - const [clientDataHistory, setClientDataHistory] = useListState(); - - const { data, dataUpdatedAt } = useGetDownloadClientsQueue(); - - useEffect(() => { - if (data) { - setClientDataHistory.append(data); - } - - if (clientDataHistory.length < 30) { - return; - } - setClientDataHistory.remove(0); - }, [dataUpdatedAt]); - - if (!data) { - return null; - } - - const recoredAppsOverTime = clientDataHistory.flatMap((x) => x.apps.map((app) => app)); - - // removing duplicates the "naive" way: https://stackoverflow.com/a/9229821/15257712 - const uniqueRecordedAppsOverTime = recoredAppsOverTime - .map((x) => x.appId) - .filter((item, position) => recoredAppsOverTime.map((y) => y.appId).indexOf(item) === position); - - const lineChartData: Serie[] = uniqueRecordedAppsOverTime.flatMap((appId) => { - const records = recoredAppsOverTime.filter((x) => x.appId === appId); - - const series: Serie[] = [ - { - id: `download_${appId}`, - data: records.map((record, index) => ({ - x: index, - y: record.totalDownload, - })), - }, - ]; - - if (records.some((x) => x.type === 'torrent')) { - const torrentRecords = records.map((record, index): Datum | null => { - if (record.type !== 'torrent') { - return null; - } - - return { - x: index, - y: record.totalUpload, - }; - }); - const filteredRecords = torrentRecords.filter((x) => x !== null) as Datum[]; - series.push({ - id: `upload_${appId}`, - data: filteredRecords, - }); - } - - return series; - }); - - const totalDownload = uniqueRecordedAppsOverTime - .map((appId) => { - const records = recoredAppsOverTime.filter((x) => x.appId === appId); - const lastRecord = records.at(-1); - return lastRecord?.totalDownload ?? 0; - }) - .reduce((acc, n) => acc + n, 0); - - const totalUpload = uniqueRecordedAppsOverTime - .map((appId) => { - const records = recoredAppsOverTime.filter((x) => x.appId === appId && x.type === 'torrent'); - const lastRecord = records.at(-1) as TorrentTotalDownload; - return lastRecord?.totalUpload ?? 0; - }) - .reduce((acc, n) => acc + n, 0); - - const graphHeight = heightRoot - heightFooter - heightTitle; - - const { colors } = useMantineTheme(); - - return ( - - - - {t('card.lineChart.title')} - - - - { - const { points } = slice; - - const recordsFromPoints = uniqueRecordedAppsOverTime.map((appId) => { - const records = recoredAppsOverTime.filter((x) => x.appId === appId); - const point = points.find((x) => x.id.includes(appId)); - const pointIndex = Number(point?.data.x) ?? 0; - const color = point?.serieColor; - return { - record: records[pointIndex], - color, - }; - }); - - return ( - - - - {recordsFromPoints.map((entry, index) => { - const app = config?.apps.find((x) => x.id === entry.record.appId); - - if (!app) { - return null; - } - - return ( - - - - - {app.name} - - - - - {humanFileSize(entry.record.totalDownload, false)} - - - - {entry.record.type === 'torrent' && ( - - - - {humanFileSize(entry.record.totalUpload, false)} - - - )} - - - - ); - })} - - - - ); - }} - data={lineChartData} - curve="monotoneX" - yFormat=" >-.2f" - axisLeft={null} - axisBottom={null} - axisRight={null} - enablePoints={false} - enableGridX={false} - enableGridY={false} - enableArea - defs={[ - linearGradientDef('gradientA', [ - { offset: 0, color: 'inherit' }, - { offset: 100, color: 'inherit', opacity: 0 }, - ]), - ]} - colors={lineChartData.flatMap((data) => - data.id.toString().startsWith('upload_') - ? colors[secondaryColor][5] - : colors[primaryColor][5] - )} - fill={[{ match: '*', id: 'gradientA' }]} - margin={{ bottom: 5 }} - animate={false} - /> - - - - - - - - - {humanFileSize(totalDownload, false)} - - - - - - {humanFileSize(totalUpload, false)} - - - - - {uniqueRecordedAppsOverTime.map((appId, index) => { - const app = config?.apps.find((x) => x.id === appId); - - if (!app) { - return null; - } - - return ( - - - - ); - })} - - - - ); -} - -const AppAvatar = ({ iconUrl }: { iconUrl: string }) => { - const { colors, colorScheme } = useMantineTheme(); - - return ( - - ); -}; - export default definition; From fef47b96eed323850fa7963ffc4e86f05e824f24 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Fri, 10 Feb 2023 23:37:08 +0100 Subject: [PATCH 10/23] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Add=20static=20CSS?= =?UTF-8?q?=20class=20names=20(#699)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dashboard/Tiles/Apps/AppTile.tsx | 3 ++- src/components/Dashboard/Tiles/HomarrCardWrapper.tsx | 2 +- src/components/Dashboard/Wrappers/Category/Category.tsx | 4 ++-- src/components/layout/Layout.tsx | 1 + src/components/layout/Logo.tsx | 2 ++ src/components/layout/header/Header.tsx | 8 ++++---- src/components/layout/header/Search.tsx | 5 +++-- 7 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/components/Dashboard/Tiles/Apps/AppTile.tsx b/src/components/Dashboard/Tiles/Apps/AppTile.tsx index b11604187..1c9edd328 100644 --- a/src/components/Dashboard/Tiles/Apps/AppTile.tsx +++ b/src/components/Dashboard/Tiles/Apps/AppTile.tsx @@ -33,9 +33,10 @@ export const AppTile = ({ className, app }: AppTileProps) => { justify="space-around" align="center" style={{ height: '100%', width: '100%' }} + className="dashboard-tile-app" > diff --git a/src/components/Dashboard/Tiles/HomarrCardWrapper.tsx b/src/components/Dashboard/Tiles/HomarrCardWrapper.tsx index 8958667fc..1a4211fdf 100644 --- a/src/components/Dashboard/Tiles/HomarrCardWrapper.tsx +++ b/src/components/Dashboard/Tiles/HomarrCardWrapper.tsx @@ -18,7 +18,7 @@ export const HomarrCardWrapper = ({ ...props }: HomarrCardWrapperProps) => { return ( { const { refs, apps, widgets } = useGridstack('category', category.id); const isEditMode = useEditModeStore((x) => x.enabled); const { config } = useConfigContext(); - const { classes: cardClasses } = useCardStyles(true); + const { classes: cardClasses, cx } = useCardStyles(true); const categoryList = config?.categories.map((x) => x.name) ?? []; const [toggledCategories, setToggledCategories] = useLocalStorage({ @@ -28,7 +28,7 @@ export const DashboardCategory = ({ category }: DashboardCategoryProps) => { return ( diff --git a/src/components/layout/Logo.tsx b/src/components/layout/Logo.tsx index a943f5866..b7d7536bd 100644 --- a/src/components/layout/Logo.tsx +++ b/src/components/layout/Logo.tsx @@ -17,12 +17,14 @@ export function Logo({ size = 'md', withoutText = false }: LogoProps) { width={size === 'md' ? 50 : 12} src={config?.settings.customization.logoImageUrl || '/imgs/logo/logo-color.svg'} alt="Homarr Logo" + className="dashboard-header-logo-image" /> {withoutText ? null : ( {config?.settings.customization.pageTitle || 'Homarr'} diff --git a/src/components/layout/header/Header.tsx b/src/components/layout/header/Header.tsx index 8955edf78..52c47bc17 100644 --- a/src/components/layout/header/Header.tsx +++ b/src/components/layout/header/Header.tsx @@ -13,7 +13,7 @@ export const HeaderHeight = 64; export function Header(props: any) { const { classes } = useStyles(); - const { classes: cardClasses } = useCardStyles(false); + const { classes: cardClasses, cx } = useCardStyles(false); const { attributes } = usePackageAttributesStore(); const { isLoading, error, data } = useQuery({ @@ -27,12 +27,12 @@ export function Header(props: any) { data?.tag_name > `v${attributes.packageVersion}` ? data?.tag_name : undefined; return ( - + - + - + diff --git a/src/components/layout/header/Search.tsx b/src/components/layout/header/Search.tsx index 00d9bd38d..a4a1dc70a 100644 --- a/src/components/layout/header/Search.tsx +++ b/src/components/layout/header/Search.tsx @@ -57,7 +57,7 @@ export function Search() { const { config } = useConfigContext(); const [searchQuery, setSearchQuery] = useState(''); const [debounced] = useDebouncedValue(searchQuery, 250); - const { classes: cardClasses } = useCardStyles(true); + const { classes: cardClasses, cx } = useCardStyles(true); const isOverseerrEnabled = config?.apps.some( (x) => x.integration.type === 'overseerr' || x.integration.type === 'jellyseerr' @@ -216,7 +216,8 @@ export function Search() { } }} classNames={{ - input: cardClasses.card, + input: cx(cardClasses.card, 'dashboard-header-search-input'), + root: 'dashboard-header-search-root', }} radius="lg" size="md" From 10e3718cb8450eed557a1851a128dcf48295cf6c Mon Sep 17 00:00:00 2001 From: ajnart Date: Sat, 11 Feb 2023 08:01:45 +0900 Subject: [PATCH 11/23] =?UTF-8?q?=F0=9F=9A=A8=20Fix=20build=20for=20404=20?= =?UTF-8?q?page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/404.tsx | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/pages/404.tsx b/src/pages/404.tsx index aadf66175..17c5b6966 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -9,7 +9,6 @@ import { } from '@mantine/core'; import React from 'react'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import Link from 'next/link'; const useStyles = createStyles((theme) => ({ @@ -94,12 +93,3 @@ export default function Custom404() { ); } - -export async function getStaticProps({ locale }: { locale: string }) { - return { - props: { - ...(await serverSideTranslations(locale, ['common'])), - // Will be passed to the page component as props - }, - }; -} From 023e44f52311e35e1e0316b83fccac0e3b457d47 Mon Sep 17 00:00:00 2001 From: Thomas Camlong <49837342+ajnart@users.noreply.github.com> Date: Sat, 11 Feb 2023 08:38:52 +0900 Subject: [PATCH 12/23] New Crowdin updates (#693) * New translations dashdot.json (Russian) * New translations dashdot.json (French) * New translations dashdot.json (Spanish) * New translations dashdot.json (Danish) * New translations dashdot.json (German) * New translations dashdot.json (Hebrew) * New translations dashdot.json (Italian) * New translations dashdot.json (Japanese) * New translations dashdot.json (Korean) * New translations dashdot.json (Dutch) * New translations dashdot.json (Polish) * New translations dashdot.json (Slovenian) * New translations dashdot.json (Swedish) * New translations dashdot.json (Ukrainian) * New translations dashdot.json (Chinese Simplified) * New translations dashdot.json (Vietnamese) * New translations dashdot.json (Portuguese, Brazilian) * New translations dashdot.json (LOLCAT) * New translations dashdot.json (Greek) * New translations dashdot.json (Spanish) * New translations dashdot.json (Danish) * New translations dashdot.json (Italian) * New translations general.json (Spanish) * New translations common.json (French) * New translations dashdot.json (French) * New translations page-appearance.json (French) * New translations about.json (French) * New translations general.json (French) * New translations gridstack.json (French) * New translations dashdot.json (Hebrew) * New translations dashdot.json (German) * New translations common.json (Norwegian) * New translations calendar.json (Norwegian) * New translations common-media-cards.json (Norwegian) * New translations common.json (Norwegian) * New translations dashdot.json (Norwegian) * New translations date.json (Norwegian) * New translations dlspeed.json (Norwegian) * New translations docker.json (Norwegian) * New translations overseerr.json (Norwegian) * New translations ping.json (Norwegian) * New translations search.json (Norwegian) * New translations weather.json (Norwegian) * New translations common.json (Norwegian) * New translations app-width.json (Norwegian) * New translations color-selector.json (Norwegian) * New translations opacity-selector.json (Norwegian) * New translations page-appearance.json (Norwegian) * New translations shade-selector.json (Norwegian) * New translations color-schema.json (Norwegian) * New translations config-changer.json (Norwegian) * New translations internationalization.json (Norwegian) * New translations search-engine.json (Norwegian) * New translations theme-selector.json (Norwegian) * New translations widget-positions.json (Norwegian) * New translations usenet.json (Norwegian) * New translations login.json (Norwegian) * New translations selector.json (Norwegian) * New translations toggle-edit-mode.json (Norwegian) * New translations add-app.json (Norwegian) * New translations about.json (Norwegian) * New translations change-position.json (Norwegian) * New translations drawer.json (Norwegian) * New translations torrents-status.json (Norwegian) * New translations icon-picker.json (Norwegian) * New translations general.json (Norwegian) * New translations gridstack.json (Norwegian) * New translations dlspeed.json (Norwegian) * New translations docker.json (Norwegian) * New translations overseerr.json (Norwegian) * New translations ping.json (Norwegian) * New translations search.json (Norwegian) * New translations weather.json (Norwegian) * New translations common.json (Norwegian) * New translations app-width.json (Norwegian) * New translations color-selector.json (Norwegian) * New translations opacity-selector.json (Norwegian) * New translations page-appearance.json (Norwegian) * New translations shade-selector.json (Norwegian) * New translations color-schema.json (Norwegian) * New translations config-changer.json (Norwegian) * New translations internationalization.json (Norwegian) * New translations search-engine.json (Norwegian) * New translations theme-selector.json (Norwegian) * New translations widget-positions.json (Norwegian) * New translations usenet.json (Norwegian) * New translations login.json (Norwegian) * New translations selector.json (Norwegian) * New translations toggle-edit-mode.json (Norwegian) * New translations add-app.json (Norwegian) * New translations about.json (Norwegian) * New translations change-position.json (Norwegian) * New translations drawer.json (Norwegian) * New translations torrents-status.json (Norwegian) * New translations icon-picker.json (Norwegian) * New translations general.json (Norwegian) * New translations gridstack.json (Norwegian) * New translations common.json (Slovak) * New translations calendar.json (Slovak) * New translations common-media-cards.json (Slovak) * New translations common.json (Slovak) * New translations dashdot.json (Slovak) * New translations date.json (Slovak) * New translations dlspeed.json (Slovak) * New translations docker.json (Slovak) * New translations overseerr.json (Slovak) * New translations ping.json (Slovak) * New translations search.json (Slovak) * New translations weather.json (Slovak) * New translations common.json (Slovak) * New translations app-width.json (Slovak) * New translations color-selector.json (Slovak) * New translations opacity-selector.json (Slovak) * New translations page-appearance.json (Slovak) * New translations shade-selector.json (Slovak) * New translations color-schema.json (Slovak) * New translations config-changer.json (Slovak) * New translations internationalization.json (Slovak) * New translations search-engine.json (Slovak) * New translations theme-selector.json (Slovak) * New translations widget-positions.json (Slovak) * New translations usenet.json (Slovak) * New translations login.json (Slovak) * New translations selector.json (Slovak) * New translations toggle-edit-mode.json (Slovak) * New translations add-app.json (Slovak) * New translations about.json (Slovak) * New translations change-position.json (Slovak) * New translations drawer.json (Slovak) * New translations torrents-status.json (Slovak) * New translations icon-picker.json (Slovak) * New translations general.json (Slovak) * New translations gridstack.json (Slovak) * New translations common.json (Slovak) * New translations calendar.json (Slovak) * New translations common.json (Slovak) * New translations about.json (Slovak) * New translations dashdot.json (Russian) * New translations general.json (Russian) * New translations common.json (Russian) * New translations page-appearance.json (Russian) * New translations general.json (Russian) * New translations dashdot.json (Swedish) * New translations calendar.json (Vietnamese) * New translations dlspeed.json (Vietnamese) * New translations weather.json (Vietnamese) * New translations color-selector.json (Vietnamese) * New translations widget-positions.json (Vietnamese) * New translations search.json (Vietnamese) * New translations common.json (Vietnamese) * New translations common.json (Vietnamese) * New translations common.json (Vietnamese) * New translations dashdot.json (Vietnamese) * New translations docker.json (Vietnamese) * New translations overseerr.json (Vietnamese) * New translations ping.json (Vietnamese) * New translations page-appearance.json (Vietnamese) * New translations config-changer.json (Vietnamese) * New translations search-engine.json (Vietnamese) * New translations usenet.json (Vietnamese) * New translations about.json (Vietnamese) * New translations torrents-status.json (Vietnamese) * New translations general.json (Vietnamese) * New translations gridstack.json (Vietnamese) * New translations common.json (Slovak) * New translations calendar.json (Slovak) * New translations common-media-cards.json (Slovak) * New translations common.json (Slovak) * New translations dashdot.json (Slovak) * New translations date.json (Slovak) * New translations dlspeed.json (Slovak) * New translations docker.json (Slovak) * New translations overseerr.json (Slovak) * New translations ping.json (Slovak) * New translations search.json (Slovak) * New translations weather.json (Slovak) * New translations common.json (Slovak) * New translations app-width.json (Slovak) * New translations color-selector.json (Slovak) * New translations opacity-selector.json (Slovak) * New translations page-appearance.json (Slovak) * New translations shade-selector.json (Slovak) * New translations color-schema.json (Slovak) * New translations config-changer.json (Slovak) * New translations internationalization.json (Slovak) * New translations search-engine.json (Slovak) * New translations theme-selector.json (Slovak) * New translations widget-positions.json (Slovak) * New translations usenet.json (Slovak) * New translations login.json (Slovak) * New translations selector.json (Slovak) * New translations toggle-edit-mode.json (Slovak) * New translations add-app.json (Slovak) * New translations about.json (Slovak) * New translations change-position.json (Slovak) * New translations drawer.json (Slovak) * New translations torrents-status.json (Slovak) * New translations icon-picker.json (Slovak) * New translations general.json (Slovak) * New translations gridstack.json (Slovak) --- public/locales/da/modules/dashdot.json | 6 +- public/locales/de/modules/dashdot.json | 6 +- public/locales/el/modules/dashdot.json | 6 +- public/locales/es/modules/dashdot.json | 6 +- .../es/settings/customization/general.json | 2 +- public/locales/fr/layout/modals/about.json | 8 +- public/locales/fr/modules/dashdot.json | 6 +- public/locales/fr/settings/common.json | 6 +- .../fr/settings/customization/general.json | 6 +- .../fr/settings/customization/gridstack.json | 2 +- .../customization/page-appearance.json | 2 +- public/locales/he/modules/dashdot.json | 6 +- public/locales/it/modules/dashdot.json | 6 +- public/locales/ja/modules/dashdot.json | 6 +- public/locales/ko/modules/dashdot.json | 6 +- public/locales/lol/modules/dashdot.json | 6 +- public/locales/nl/modules/dashdot.json | 6 +- public/locales/no/authentication/login.json | 27 ++++++ public/locales/no/common.json | 34 ++++++++ .../no/layout/element-selector/selector.json | 11 +++ .../header/actions/toggle-edit-mode.json | 11 +++ public/locales/no/layout/mobile/drawer.json | 3 + public/locales/no/layout/modals/about.json | 13 +++ public/locales/no/layout/modals/add-app.json | 68 +++++++++++++++ .../no/layout/modals/change-position.json | 8 ++ .../locales/no/layout/modals/icon-picker.json | 7 ++ public/locales/no/modules/calendar.json | 18 ++++ .../no/modules/common-media-cards.json | 6 ++ public/locales/no/modules/common.json | 10 +++ public/locales/no/modules/dashdot.json | 61 +++++++++++++ public/locales/no/modules/date.json | 12 +++ public/locales/no/modules/dlspeed.json | 35 ++++++++ public/locales/no/modules/docker.json | 83 ++++++++++++++++++ public/locales/no/modules/overseerr.json | 30 +++++++ public/locales/no/modules/ping.json | 11 +++ public/locales/no/modules/search.json | 30 +++++++ .../locales/no/modules/torrents-status.json | 72 ++++++++++++++++ public/locales/no/modules/usenet.json | 49 +++++++++++ public/locales/no/modules/weather.json | 33 +++++++ public/locales/no/settings/common.json | 38 ++++++++ .../no/settings/customization/app-width.json | 3 + .../customization/color-selector.json | 4 + .../no/settings/customization/general.json | 21 +++++ .../no/settings/customization/gridstack.json | 10 +++ .../customization/opacity-selector.json | 3 + .../customization/page-appearance.json | 30 +++++++ .../customization/shade-selector.json | 3 + .../no/settings/general/color-schema.json | 3 + .../no/settings/general/config-changer.json | 86 +++++++++++++++++++ .../general/internationalization.json | 3 + .../no/settings/general/search-engine.json | 19 ++++ .../no/settings/general/theme-selector.json | 3 + .../no/settings/general/widget-positions.json | 3 + public/locales/pl/modules/dashdot.json | 6 +- public/locales/pt/modules/dashdot.json | 6 +- public/locales/ru/modules/dashdot.json | 6 +- public/locales/ru/settings/common.json | 2 +- .../ru/settings/customization/general.json | 6 +- .../customization/page-appearance.json | 8 +- public/locales/sk/authentication/login.json | 27 ++++++ public/locales/sk/common.json | 34 ++++++++ .../sk/layout/element-selector/selector.json | 11 +++ .../header/actions/toggle-edit-mode.json | 11 +++ public/locales/sk/layout/mobile/drawer.json | 3 + public/locales/sk/layout/modals/about.json | 13 +++ public/locales/sk/layout/modals/add-app.json | 68 +++++++++++++++ .../sk/layout/modals/change-position.json | 8 ++ .../locales/sk/layout/modals/icon-picker.json | 7 ++ public/locales/sk/modules/calendar.json | 18 ++++ .../sk/modules/common-media-cards.json | 6 ++ public/locales/sk/modules/common.json | 10 +++ public/locales/sk/modules/dashdot.json | 61 +++++++++++++ public/locales/sk/modules/date.json | 12 +++ public/locales/sk/modules/dlspeed.json | 35 ++++++++ public/locales/sk/modules/docker.json | 83 ++++++++++++++++++ public/locales/sk/modules/overseerr.json | 30 +++++++ public/locales/sk/modules/ping.json | 11 +++ public/locales/sk/modules/search.json | 30 +++++++ .../locales/sk/modules/torrents-status.json | 72 ++++++++++++++++ public/locales/sk/modules/usenet.json | 49 +++++++++++ public/locales/sk/modules/weather.json | 33 +++++++ public/locales/sk/settings/common.json | 38 ++++++++ .../sk/settings/customization/app-width.json | 3 + .../customization/color-selector.json | 4 + .../sk/settings/customization/general.json | 21 +++++ .../sk/settings/customization/gridstack.json | 10 +++ .../customization/opacity-selector.json | 3 + .../customization/page-appearance.json | 30 +++++++ .../customization/shade-selector.json | 3 + .../sk/settings/general/color-schema.json | 3 + .../sk/settings/general/config-changer.json | 86 +++++++++++++++++++ .../general/internationalization.json | 3 + .../sk/settings/general/search-engine.json | 19 ++++ .../sk/settings/general/theme-selector.json | 3 + .../sk/settings/general/widget-positions.json | 3 + public/locales/sl/modules/dashdot.json | 6 +- public/locales/sv/modules/dashdot.json | 6 +- public/locales/uk/modules/dashdot.json | 6 +- public/locales/vi/common.json | 14 +-- public/locales/vi/layout/modals/about.json | 2 +- public/locales/vi/modules/calendar.json | 2 +- public/locales/vi/modules/common.json | 2 +- public/locales/vi/modules/dashdot.json | 8 +- public/locales/vi/modules/dlspeed.json | 2 +- public/locales/vi/modules/docker.json | 10 +-- public/locales/vi/modules/overseerr.json | 4 +- public/locales/vi/modules/ping.json | 2 +- public/locales/vi/modules/search.json | 6 +- .../locales/vi/modules/torrents-status.json | 36 ++++---- public/locales/vi/modules/usenet.json | 4 +- public/locales/vi/modules/weather.json | 4 +- public/locales/vi/settings/common.json | 2 +- .../customization/color-selector.json | 1 + .../vi/settings/customization/general.json | 6 +- .../vi/settings/customization/gridstack.json | 4 +- .../customization/page-appearance.json | 4 +- .../vi/settings/general/config-changer.json | 22 ++--- .../vi/settings/general/search-engine.json | 2 +- .../vi/settings/general/widget-positions.json | 4 +- public/locales/zh/modules/dashdot.json | 6 +- 120 files changed, 1907 insertions(+), 106 deletions(-) create mode 100644 public/locales/no/authentication/login.json create mode 100644 public/locales/no/common.json create mode 100644 public/locales/no/layout/element-selector/selector.json create mode 100644 public/locales/no/layout/header/actions/toggle-edit-mode.json create mode 100644 public/locales/no/layout/mobile/drawer.json create mode 100644 public/locales/no/layout/modals/about.json create mode 100644 public/locales/no/layout/modals/add-app.json create mode 100644 public/locales/no/layout/modals/change-position.json create mode 100644 public/locales/no/layout/modals/icon-picker.json create mode 100644 public/locales/no/modules/calendar.json create mode 100644 public/locales/no/modules/common-media-cards.json create mode 100644 public/locales/no/modules/common.json create mode 100644 public/locales/no/modules/dashdot.json create mode 100644 public/locales/no/modules/date.json create mode 100644 public/locales/no/modules/dlspeed.json create mode 100644 public/locales/no/modules/docker.json create mode 100644 public/locales/no/modules/overseerr.json create mode 100644 public/locales/no/modules/ping.json create mode 100644 public/locales/no/modules/search.json create mode 100644 public/locales/no/modules/torrents-status.json create mode 100644 public/locales/no/modules/usenet.json create mode 100644 public/locales/no/modules/weather.json create mode 100644 public/locales/no/settings/common.json create mode 100644 public/locales/no/settings/customization/app-width.json create mode 100644 public/locales/no/settings/customization/color-selector.json create mode 100644 public/locales/no/settings/customization/general.json create mode 100644 public/locales/no/settings/customization/gridstack.json create mode 100644 public/locales/no/settings/customization/opacity-selector.json create mode 100644 public/locales/no/settings/customization/page-appearance.json create mode 100644 public/locales/no/settings/customization/shade-selector.json create mode 100644 public/locales/no/settings/general/color-schema.json create mode 100644 public/locales/no/settings/general/config-changer.json create mode 100644 public/locales/no/settings/general/internationalization.json create mode 100644 public/locales/no/settings/general/search-engine.json create mode 100644 public/locales/no/settings/general/theme-selector.json create mode 100644 public/locales/no/settings/general/widget-positions.json create mode 100644 public/locales/sk/authentication/login.json create mode 100644 public/locales/sk/common.json create mode 100644 public/locales/sk/layout/element-selector/selector.json create mode 100644 public/locales/sk/layout/header/actions/toggle-edit-mode.json create mode 100644 public/locales/sk/layout/mobile/drawer.json create mode 100644 public/locales/sk/layout/modals/about.json create mode 100644 public/locales/sk/layout/modals/add-app.json create mode 100644 public/locales/sk/layout/modals/change-position.json create mode 100644 public/locales/sk/layout/modals/icon-picker.json create mode 100644 public/locales/sk/modules/calendar.json create mode 100644 public/locales/sk/modules/common-media-cards.json create mode 100644 public/locales/sk/modules/common.json create mode 100644 public/locales/sk/modules/dashdot.json create mode 100644 public/locales/sk/modules/date.json create mode 100644 public/locales/sk/modules/dlspeed.json create mode 100644 public/locales/sk/modules/docker.json create mode 100644 public/locales/sk/modules/overseerr.json create mode 100644 public/locales/sk/modules/ping.json create mode 100644 public/locales/sk/modules/search.json create mode 100644 public/locales/sk/modules/torrents-status.json create mode 100644 public/locales/sk/modules/usenet.json create mode 100644 public/locales/sk/modules/weather.json create mode 100644 public/locales/sk/settings/common.json create mode 100644 public/locales/sk/settings/customization/app-width.json create mode 100644 public/locales/sk/settings/customization/color-selector.json create mode 100644 public/locales/sk/settings/customization/general.json create mode 100644 public/locales/sk/settings/customization/gridstack.json create mode 100644 public/locales/sk/settings/customization/opacity-selector.json create mode 100644 public/locales/sk/settings/customization/page-appearance.json create mode 100644 public/locales/sk/settings/customization/shade-selector.json create mode 100644 public/locales/sk/settings/general/color-schema.json create mode 100644 public/locales/sk/settings/general/config-changer.json create mode 100644 public/locales/sk/settings/general/internationalization.json create mode 100644 public/locales/sk/settings/general/search-engine.json create mode 100644 public/locales/sk/settings/general/theme-selector.json create mode 100644 public/locales/sk/settings/general/widget-positions.json diff --git a/public/locales/da/modules/dashdot.json b/public/locales/da/modules/dashdot.json index f78fd8a3f..5842ba00b 100644 --- a/public/locales/da/modules/dashdot.json +++ b/public/locales/da/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Ingen Dash. service fundet. Tilføj venligst en til dit Homarr-dashboard eller indstil en Dash. URL i modulindstillingerne", - "noInformation": "Kan ikke hente information fra dash. - kører du den nyeste version?" + "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)." + } }, "graphs": { "storage": { diff --git a/public/locales/de/modules/dashdot.json b/public/locales/de/modules/dashdot.json index 4a95cf060..eda1d7840 100644 --- a/public/locales/de/modules/dashdot.json +++ b/public/locales/de/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Kein Dash. Dienst gefunden. Bitte fügen Sie einen zu Ihrem Homarr Dashboard hinzu oder setzen Sie eine Dash. URL in den Moduloptionen", - "noInformation": "Es können keine Informationen vom Dash. abgerufen werden. - Verwenden Sie die neueste Version?" + "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)." + } }, "graphs": { "storage": { diff --git a/public/locales/el/modules/dashdot.json b/public/locales/el/modules/dashdot.json index 0124ec1f1..047c3fb3a 100644 --- a/public/locales/el/modules/dashdot.json +++ b/public/locales/el/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Δεν βρέθηκε υπηρεσία Dash. Παρακαλούμε προσθέστε μία στο ταμπλό Homarr ή ορίστε μια Dash. URL στις επιλογές της ενότητας", - "noInformation": "Δεν μπορεί να αποκτήσει πληροφορίες από το dash. - τρέχετε την τελευταία έκδοση;" + "noInformation": "Δεν μπορεί να αποκτήσει πληροφορίες από το dash. - τρέχετε την τελευταία έκδοση;", + "protocolDowngrade": { + "title": "", + "text": "" + } }, "graphs": { "storage": { diff --git a/public/locales/es/modules/dashdot.json b/public/locales/es/modules/dashdot.json index 67d24a73c..f70aad204 100644 --- a/public/locales/es/modules/dashdot.json +++ b/public/locales/es/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "No se ha encontrado el servicio Dash. Por favor, añade uno al Panel de Control de Homarr o indica una URL de Dash. en las opciones del módulo", - "noInformation": "No se puede obtener información de Dash. - ¿estás utilizando la última versión?" + "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)." + } }, "graphs": { "storage": { diff --git a/public/locales/es/settings/customization/general.json b/public/locales/es/settings/customization/general.json index e35dc4588..40c675e83 100644 --- a/public/locales/es/settings/customization/general.json +++ b/public/locales/es/settings/customization/general.json @@ -6,7 +6,7 @@ "description": "Activar y desactivar elementos de tu cabecera y tarjetas del dashboard" }, "gridstack": { - "name": "", + "name": "Gridstack", "description": "Personalizar el comportamiento y columnas del área de tu dashboard" }, "pageMetadata": { diff --git a/public/locales/fr/layout/modals/about.json b/public/locales/fr/layout/modals/about.json index 7a8fdbe0e..3fd307bdb 100644 --- a/public/locales/fr/layout/modals/about.json +++ b/public/locales/fr/layout/modals/about.json @@ -3,11 +3,11 @@ "contact": "Vous avez des problèmes ou des questions ? Dites-le-nous !", "addToDashboard": "Ajouter au tableau de bord", "metrics": { - "configurationSchemaVersion": "", + "configurationSchemaVersion": "Version de schéma de configuration", "configurationsCount": "Configurations disponibles", "version": "Version", - "nodeEnvironment": "", - "i18n": "", - "locales": "" + "nodeEnvironment": "Environnement Node", + "i18n": "Traductions I18n chargées", + "locales": "Locales I18n configurées" } } \ No newline at end of file diff --git a/public/locales/fr/modules/dashdot.json b/public/locales/fr/modules/dashdot.json index 1ff833147..0ef538f2f 100644 --- a/public/locales/fr/modules/dashdot.json +++ b/public/locales/fr/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Aucun service Dash. trouvé. Veuillez en ajouter un à votre tableau de bord Homarr ou définir l'URL du service Dash. dans les options du module", - "noInformation": "Impossible d'acquérir des informations de Dash. - Utilisez-vous la dernière version ?" + "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é)." + } }, "graphs": { "storage": { diff --git a/public/locales/fr/settings/common.json b/public/locales/fr/settings/common.json index 069646fb8..d87442cbb 100644 --- a/public/locales/fr/settings/common.json +++ b/public/locales/fr/settings/common.json @@ -10,7 +10,7 @@ }, "credits": { "madeWithLove": "Fait avec ❤️ par @", - "thirdPartyContent": "Voir le contenu tiers", + "thirdPartyContent": "Voir le contenu de tierce partie", "thirdPartyContentTable": { "dependencyName": "Dépendance", "dependencyVersion": "Version" @@ -20,9 +20,9 @@ "layout": { "preview": { "title": "Aperçu", - "subtitle": "Les changements seront sauvegarder automatiquement" + "subtitle": "Les changements seront sauvegardés automatiquement" }, - "divider": "Option de mise en page", + "divider": "Options de mise en page", "main": "Principal", "sidebar": "Barre latérale", "cannotturnoff": "Ne peut être désactivé", diff --git a/public/locales/fr/settings/customization/general.json b/public/locales/fr/settings/customization/general.json index 1b8be25e6..e35622f92 100644 --- a/public/locales/fr/settings/customization/general.json +++ b/public/locales/fr/settings/customization/general.json @@ -1,12 +1,12 @@ { - "text": "", + "text": "Les personnalisations vous permettent de configurer et d'ajuster votre expérience utilisateur dans Homarr.", "accordeon": { "layout": { - "name": "", + "name": "Mise en page", "description": "Activer et désactiver les éléments sur l'en-tête et le titre du tableau de bord" }, "gridstack": { - "name": "", + "name": "Grille", "description": "Personnaliser le comportement et les colonnes de la zone de votre tableau de bord" }, "pageMetadata": { diff --git a/public/locales/fr/settings/customization/gridstack.json b/public/locales/fr/settings/customization/gridstack.json index eb5909393..eee241074 100644 --- a/public/locales/fr/settings/customization/gridstack.json +++ b/public/locales/fr/settings/customization/gridstack.json @@ -1,6 +1,6 @@ { "columnsCount": { - "labelPreset": "", + "labelPreset": "Colonnes de taille {{size}}", "descriptionPreset": "Nombre de colonnes lorsque l'écran a une largeur inférieure à {{pixels}} pixels", "descriptionExceedsPreset": "Nombre de colonnes lorsque la taille de l'écran dépasse {{pixels}} pixels" }, diff --git a/public/locales/fr/settings/customization/page-appearance.json b/public/locales/fr/settings/customization/page-appearance.json index 8dfc947de..201d5e007 100644 --- a/public/locales/fr/settings/customization/page-appearance.json +++ b/public/locales/fr/settings/customization/page-appearance.json @@ -22,7 +22,7 @@ "label": "CSS personnalisé", "description": "Personnaliser tous les éléments du tableau de bord, recommandé seulement pour les utilisateurs expérimentés", "placeholder": "Le CSS personnalisé sera appliqué en dernier", - "applying": "Appliquation du CSS..." + "applying": "Application du code CSS..." }, "buttons": { "submit": "Soumettre" diff --git a/public/locales/he/modules/dashdot.json b/public/locales/he/modules/dashdot.json index b4fffea61..36552683b 100644 --- a/public/locales/he/modules/dashdot.json +++ b/public/locales/he/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "לא נמצא שירות Dash. בבקשה הוסף ל- Homarr או הגדר כתובת באפשרויות המודול ", - "noInformation": "אין מידע מ- Dash. האם אתה משתמש בגירסה העדכנית" + "noInformation": "אין מידע מ- Dash. האם אתה משתמש בגירסה העדכנית", + "protocolDowngrade": { + "title": "זוהה שדרוג לאחור של פרוטוקול", + "text": "הפרוטוקול ל-Dash שלך. המופע נמצא בדירוג לאחור. זהו סיכון אבטחה, מכיוון ש-HTTP אינו מוצפן ותוקפים עלולים לעשות שימוש לרעה בחיבור זה. ודא ש-Dash. פועל גם ב-HTTPS או שדרוג לאחור של Homarr ל-HTTP (לא מומלץ)." + } }, "graphs": { "storage": { diff --git a/public/locales/it/modules/dashdot.json b/public/locales/it/modules/dashdot.json index 02c325dac..68be4c2bb 100644 --- a/public/locales/it/modules/dashdot.json +++ b/public/locales/it/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Nessun servizio Dash. trovato. Aggiungine uno alla dashboard di Homarr o imposta un URL nelle impostazioni del modulo", - "noInformation": "Impossibile reperire informazioni da dash. - è in esecuzione l'ultima versione?" + "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)." + } }, "graphs": { "storage": { diff --git a/public/locales/ja/modules/dashdot.json b/public/locales/ja/modules/dashdot.json index b4221a29e..88b64c660 100644 --- a/public/locales/ja/modules/dashdot.json +++ b/public/locales/ja/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "ダッシュ", "errors": { "noService": "Dash.サービスが見当たりません。HOMARダッシュボードに追加するか、モジュールオプションでDash.サービスを設定してください。のURLをモジュールオプションで設定してください。", - "noInformation": "dashから情報を取得できません。- は最新版ですか?" + "noInformation": "dashから情報を取得できません。- は最新版ですか?", + "protocolDowngrade": { + "title": "", + "text": "" + } }, "graphs": { "storage": { diff --git a/public/locales/ko/modules/dashdot.json b/public/locales/ko/modules/dashdot.json index c14078538..29b39ffd1 100644 --- a/public/locales/ko/modules/dashdot.json +++ b/public/locales/ko/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Dash. 서비스를 찾을 수 없습니다. Homarr 대시보드에 추가하거나 모듈 옵션에서 Dash. URL을 설정해 주세요.", - "noInformation": "Dash. 에서 정보를 얻을 수 없습니다. 최신 버전을 사용 중인가요?" + "noInformation": "Dash. 에서 정보를 얻을 수 없습니다. 최신 버전을 사용 중인가요?", + "protocolDowngrade": { + "title": "", + "text": "" + } }, "graphs": { "storage": { diff --git a/public/locales/lol/modules/dashdot.json b/public/locales/lol/modules/dashdot.json index ddbefa7fa..5c58b8e2e 100644 --- a/public/locales/lol/modules/dashdot.json +++ b/public/locales/lol/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "No Dash. survis findz. plz add wan 2 ur Homarr dashboard or set Dash. URL in teh moduel opshuns", - "noInformation": "Cannot acquier informashun frum dash. - r u runnin teh latest vershun?" + "noInformation": "Cannot acquier informashun frum dash. - r u runnin teh latest vershun?", + "protocolDowngrade": { + "title": "", + "text": "" + } }, "graphs": { "storage": { diff --git a/public/locales/nl/modules/dashdot.json b/public/locales/nl/modules/dashdot.json index 64f740d71..e40b1330a 100644 --- a/public/locales/nl/modules/dashdot.json +++ b/public/locales/nl/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Geen Dash. service gevonden. Voeg er een toe aan uw Homarr dashboard of stel een Dashdot URL in in de opties van de module", - "noInformation": "Kan geen informatie verkrijgen van dash. - gebruikt u de laatste versie?" + "noInformation": "Kan geen informatie verkrijgen van dash. - gebruikt u de laatste versie?", + "protocolDowngrade": { + "title": "", + "text": "" + } }, "graphs": { "storage": { diff --git a/public/locales/no/authentication/login.json b/public/locales/no/authentication/login.json new file mode 100644 index 000000000..a2f47329a --- /dev/null +++ b/public/locales/no/authentication/login.json @@ -0,0 +1,27 @@ +{ + "title": "Velkommen tilbake!", + "text": "Skriv inn passord", + "form": { + "fields": { + "password": { + "label": "Passord", + "placeholder": "Ditt passord" + } + }, + "buttons": { + "submit": "Logg inn" + } + }, + "notifications": { + "checking": { + "title": "Sjekker passordet ditt", + "message": "Ditt passord blir sjekket..." + }, + "correct": { + "title": "Innlogging vellykket, omdirigerer..." + }, + "wrong": { + "title": "Passordet du skrev inn er feil, prøv igjen." + } + } +} diff --git a/public/locales/no/common.json b/public/locales/no/common.json new file mode 100644 index 000000000..0a3c89969 --- /dev/null +++ b/public/locales/no/common.json @@ -0,0 +1,34 @@ +{ + "save": "Lagre", + "about": "Info", + "cancel": "Avbryt", + "close": "Lukk", + "delete": "Slett", + "ok": "OK", + "edit": "Rediger", + "version": "Versjon", + "changePosition": "Endre posisjon", + "remove": "Fjern", + "removeConfirm": "Er du sikker på at du vil fjerne {{item}}?", + "sections": { + "settings": "Innstillinger", + "dangerZone": "Faresonen" + }, + "secrets": { + "apiKey": "API-nøkkel", + "username": "Brukernavn", + "password": "Passord" + }, + "tip": "Tips: ", + "time": { + "seconds": "sekunder", + "minutes": "minutter", + "hours": "timer" + }, + "loading": "Laster inn...", + "breakPoints": { + "small": "liten", + "medium": "middels", + "large": "stor" + } +} \ No newline at end of file diff --git a/public/locales/no/layout/element-selector/selector.json b/public/locales/no/layout/element-selector/selector.json new file mode 100644 index 000000000..13c2fb908 --- /dev/null +++ b/public/locales/no/layout/element-selector/selector.json @@ -0,0 +1,11 @@ +{ + "modal": { + "title": "Legg til en ny flis", + "text": "Fliser er det viktigste elementet i Homarr. De brukes til å vise appene og annen informasjon. Du kan legge til så mange fliser som du vil." + }, + "widgetDescription": "Widgets samhandler med appene dine for å gi deg mer kontroll over applikasjonene. De krever vanligvis ekstra konfigurasjon før bruk.", + "goBack": "Gå tilbake til forrige steg", + "actionIcon": { + "tooltip": "Legg til en flis" + } +} diff --git a/public/locales/no/layout/header/actions/toggle-edit-mode.json b/public/locales/no/layout/header/actions/toggle-edit-mode.json new file mode 100644 index 000000000..d7d6a2e48 --- /dev/null +++ b/public/locales/no/layout/header/actions/toggle-edit-mode.json @@ -0,0 +1,11 @@ +{ + "description": "I Redigeringsmodus kan du justere fliser og konfigurere apper. Endringer lagres ikke før du avslutter Redigeringsmodus.", + "button": { + "disabled": "Gå inn i Redigeringsmodus", + "enabled": "Avslutt og lagre" + }, + "popover": { + "title": "Redigeringsmodus er aktivert for <1>{{size}} størrelse", + "text": "Du kan justere og konfigurere appene nå. Endringer er ikke lagret før du avslutter redigeringsmodus" + } +} diff --git a/public/locales/no/layout/mobile/drawer.json b/public/locales/no/layout/mobile/drawer.json new file mode 100644 index 000000000..225fe6415 --- /dev/null +++ b/public/locales/no/layout/mobile/drawer.json @@ -0,0 +1,3 @@ +{ + "title": "{{position}} sidepanel" +} diff --git a/public/locales/no/layout/modals/about.json b/public/locales/no/layout/modals/about.json new file mode 100644 index 000000000..f6b3b4a07 --- /dev/null +++ b/public/locales/no/layout/modals/about.json @@ -0,0 +1,13 @@ +{ + "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", + "metrics": { + "configurationSchemaVersion": "Konfigurasjonsskjema versjon", + "configurationsCount": "Tilgjengelige konfigurasjoner", + "version": "Versjon", + "nodeEnvironment": "Node miljø", + "i18n": "Lastet I18n oversettelsesnavneområder", + "locales": "Konfigurerte I18n-lokasjoner" + } +} \ 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 new file mode 100644 index 000000000..af92d50d6 --- /dev/null +++ b/public/locales/no/layout/modals/add-app.json @@ -0,0 +1,68 @@ +{ + "tabs": { + "general": "Generelt", + "behaviour": "Oppførsel", + "network": "Nettverk", + "appearance": "Utseende", + "integration": "Integrasjon" + }, + "general": { + "appname": { + "label": "Navn på app", + "description": "Brukes til å vise appen på dashbordet." + }, + "internalAddress": { + "label": "Intern adresse", + "description": "Intern IP-adresse til appen." + }, + "externalAddress": { + "label": "Ekstern adresse", + "description": "URL som vil åpnes når du klikker på appen." + } + }, + "behaviour": { + "isOpeningNewTab": { + "label": "Åpne i ny fane", + "description": "Åpne appen i en ny fane i stedet for denne." + } + }, + "network": { + "statusChecker": { + "label": "Statussjekk", + "description": "Sjekker om appen er online med en enkel HTTP(S) forespørsel." + }, + "statusCodes": { + "label": "HTTP statuskoder", + "description": "HTTP-statuskoder som regnes som online." + } + }, + "appearance": { + "icon": { + "label": "App ikon", + "description": "Ikonet som vises på dashbordet." + } + }, + "integration": { + "type": { + "label": "Integrasjons konfigurasjon", + "description": "Integrasjonskonfigurasjonen som blir brukt til å koble til appen din.", + "placeholder": "Velg en integrasjon", + "defined": "Definert", + "undefined": "Undefined", + "public": "Offentlig", + "private": "Privat", + "explanationPrivate": "En privat hemmelighet sendes bare til serveren én gang. Når nettleseren har oppdatert siden, sendes den aldri igjen.", + "explanationPublic": "En offentlig hemmelighet vil alltid sendes til klienten og er tilgjengelig over API-et. Det bør ikke inneholde noen konfidensielle verdier som brukernavn, passord, tokens, sertifikater og lignende!" + }, + "secrets": { + "description": "For å oppdatere en hemmelig, skriv inn en verdi og klikk på Lagre-knappen for å fjerne en hemmelighet, bruk fjern knappen.", + "warning": "Din legitimasjon fungerer som tilgang for dine integrasjoner, og du bør aldri dele dem med noen andre. Homarr teamet vil aldri be om legitimasjon. Sørg for å lagre og behandle hemmeligheter trygt.", + "clear": "Fjern hemmelighet", + "save": "Lagre hemmelighet", + "update": "Oppdater hemmelighet" + } + }, + "validation": { + "popover": "Skjemaet inneholder ugyldig data. Derfor kan den ikke lagres. Vennligst løs alle problemer og klikk på denne knappen igjen for å lagre endringene dine" + } +} diff --git a/public/locales/no/layout/modals/change-position.json b/public/locales/no/layout/modals/change-position.json new file mode 100644 index 000000000..ce60017bb --- /dev/null +++ b/public/locales/no/layout/modals/change-position.json @@ -0,0 +1,8 @@ +{ + "xPosition": "Posisjon for X akse", + "width": "Bredde", + "height": "Høyde", + "yPosition": "Posisjon for Y akse", + "zeroOrHigher": "0 eller høyere", + "betweenXandY": "Mellom {{min}} og {{max}}" +} \ No newline at end of file diff --git a/public/locales/no/layout/modals/icon-picker.json b/public/locales/no/layout/modals/icon-picker.json new file mode 100644 index 000000000..bfd3a8033 --- /dev/null +++ b/public/locales/no/layout/modals/icon-picker.json @@ -0,0 +1,7 @@ +{ + "iconPicker": { + "textInputPlaceholder": "Søk noe...", + "searchLimitationTitle": "Begrenset til 30 resultater", + "searchLimitationMessage": "Søkeresultatene ble begrenset til 30 fordi det var for mange treff" + } +} \ No newline at end of file diff --git a/public/locales/no/modules/calendar.json b/public/locales/no/modules/calendar.json new file mode 100644 index 000000000..e0ded0fe2 --- /dev/null +++ b/public/locales/no/modules/calendar.json @@ -0,0 +1,18 @@ +{ + "descriptor": { + "name": "Kalender", + "description": "Viser en kalender med kommende utgivelser, fra støttede integrasjoner.", + "settings": { + "title": "Innstillinger for Kalender widget", + "useSonarrv4": { + "label": "Bruk Sonarr v4 API" + }, + "sundayStart": { + "label": "Start uken på søndag" + }, + "radarrReleaseType": { + "label": "Radarr utgivelsestype" + } + } + } +} diff --git a/public/locales/no/modules/common-media-cards.json b/public/locales/no/modules/common-media-cards.json new file mode 100644 index 000000000..23a78e936 --- /dev/null +++ b/public/locales/no/modules/common-media-cards.json @@ -0,0 +1,6 @@ +{ + "buttons": { + "play": "Spill", + "request": "Forespørsel" + } +} \ No newline at end of file diff --git a/public/locales/no/modules/common.json b/public/locales/no/modules/common.json new file mode 100644 index 000000000..ca115f068 --- /dev/null +++ b/public/locales/no/modules/common.json @@ -0,0 +1,10 @@ +{ + "settings": { + "label": "Innstillinger" + }, + "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." + } + } +} diff --git a/public/locales/no/modules/dashdot.json b/public/locales/no/modules/dashdot.json new file mode 100644 index 000000000..7c7f752bf --- /dev/null +++ b/public/locales/no/modules/dashdot.json @@ -0,0 +1,61 @@ +{ + "descriptor": { + "name": "Dash.", + "description": "Viser grafene til en ekstern Dash. Eksempel inni av Homarr.", + "settings": { + "title": "Innstillinger for Dash. widget", + "cpuMultiView": { + "label": "CPU flerkjernevisning" + }, + "storageMultiView": { + "label": "Lagring flerdiskvisning" + }, + "useCompactView": { + "label": "Bruk kompakt visning" + }, + "graphs": { + "label": "Grafer" + }, + "url": { + "label": "Dash. URL" + }, + "usePercentages": { + "label": "Vis prosentandel" + } + } + }, + "card": { + "title": "Dash.", + "errors": { + "noService": "Ingen Dash.-tjeneste funnet. Vennligst legg til en Homarr dashbordet eller angi en Dash. URL i modulalternativene", + "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)." + } + }, + "graphs": { + "storage": { + "title": "Lagring", + "label": "Lagring:" + }, + "network": { + "title": "Nettverk", + "label": "Nettverk:", + "metrics": { + "download": "Ned", + "upload": "Opp" + } + }, + "cpu": { + "title": "CPU" + }, + "memory": { + "title": "RAM" + }, + "gpu": { + "title": "GPU" + } + } + } +} diff --git a/public/locales/no/modules/date.json b/public/locales/no/modules/date.json new file mode 100644 index 000000000..8f1a9d66b --- /dev/null +++ b/public/locales/no/modules/date.json @@ -0,0 +1,12 @@ +{ + "descriptor": { + "name": "Dato og klokkeslett", + "description": "Viser gjeldende dato og klokkeslett.", + "settings": { + "title": "Innstillinger for dato og klokkeslett widget", + "display24HourFormat": { + "label": "Vis 24 timers formatering" + } + } + } +} diff --git a/public/locales/no/modules/dlspeed.json b/public/locales/no/modules/dlspeed.json new file mode 100644 index 000000000..0f175e30e --- /dev/null +++ b/public/locales/no/modules/dlspeed.json @@ -0,0 +1,35 @@ +{ + "descriptor": { + "name": "Nedlastingshastighet", + "description": "Viser nedlastingshastighet og opplastingshastighet av støttede integrasjoner." + }, + "card": { + "table": { + "header": { + "name": "Navn", + "size": "Størrelse", + "download": "Ned", + "upload": "Opp", + "estimatedTimeOfArrival": "Gjenstående tid (estimat)", + "progress": "Fremgang" + }, + "body": { + "nothingFound": "Ingen torrenter funnet" + } + }, + "lineChart": { + "title": "Gjeldende nedlastingshastighet", + "download": "Nedlasting: {{download}}", + "upload": "Opplasting: {{upload}}", + "timeSpan": "{{seconds}} sekunder siden", + "totalDownload": "Nedlasting: {{download}}/s", + "totalUpload": "Opplasting: {{upload}}/s" + }, + "errors": { + "noDownloadClients": { + "title": "Ingen støttede nedlastingsklienter funnet!", + "text": "Legg til en nedlastingstjeneste for å se pågående nedlastinger" + } + } + } +} diff --git a/public/locales/no/modules/docker.json b/public/locales/no/modules/docker.json new file mode 100644 index 000000000..766a62b60 --- /dev/null +++ b/public/locales/no/modules/docker.json @@ -0,0 +1,83 @@ +{ + "descriptor": { + "name": "Docker", + "description": "Lar deg enkelt se og administrere alle dine Docker containere." + }, + "search": { + "placeholder": "Søk etter container eller imagenavn" + }, + "table": { + "header": { + "name": "Navn", + "image": "Image", + "ports": "Porter", + "state": "Status" + }, + "body": { + "portCollapse": "{{ports}} flere" + }, + "states": { + "running": "Kjører", + "created": "Opprettet", + "stopped": "Stoppet", + "unknown": "Ukjent" + } + }, + "actionBar": { + "addService": { + "title": "Legg til app", + "message": "Legg til app i Homarr" + }, + "restart": { + "title": "Omstart" + }, + "stop": { + "title": "Stopp" + }, + "start": { + "title": "Start" + }, + "refreshData": { + "title": "Oppdater data" + }, + "remove": { + "title": "Fjern" + }, + "addToHomarr": { + "title": "Legg til i Homarr" + } + }, + "actions": { + "start": { + "start": "Starter", + "end": "Startet" + }, + "stop": { + "start": "Stopper", + "end": "Stoppet" + }, + "restart": { + "start": "Starter på nytt", + "end": "Startet på nytt" + }, + "remove": { + "start": "Fjerner", + "end": "Fjernet" + } + }, + "errors": { + "integrationFailed": { + "title": "Docker-integrasjonen mislyktes", + "message": "Har du glemt å koble til Docker socket?" + }, + "unknownError": { + "title": "Det oppstod en feil" + }, + "oneServiceAtATime": { + "title": "Legg bare til en app eller en tjeneste om gangen!" + } + }, + "actionIcon": { + "tooltip": "Docker" + } +} diff --git a/public/locales/no/modules/overseerr.json b/public/locales/no/modules/overseerr.json new file mode 100644 index 000000000..754d95992 --- /dev/null +++ b/public/locales/no/modules/overseerr.json @@ -0,0 +1,30 @@ +{ + "descriptor": { + "name": "Overseerr", + "description": "Lar deg søke og legge til media fra Overseerr eller Jellyseerr." + }, + "popup": { + "item": { + "buttons": { + "askFor": "Be om {{title}}", + "cancel": "Avbryt", + "request": "Forespørsel" + }, + "alerts": { + "automaticApproval": { + "title": "Bruker API-nøkkel", + "text": "Denne forespørselen blir automatisk godkjent" + } + } + }, + "seasonSelector": { + "caption": "Marker sesongen du vil laste ned", + "table": { + "header": { + "season": "Sesong", + "numberOfEpisodes": "Antall episoder" + } + } + } + } +} diff --git a/public/locales/no/modules/ping.json b/public/locales/no/modules/ping.json new file mode 100644 index 000000000..da858b28e --- /dev/null +++ b/public/locales/no/modules/ping.json @@ -0,0 +1,11 @@ +{ + "descriptor": { + "name": "Ping", + "description": "Viser en statusindikator avhengig av HTTP responskoden mottatt fra en URL." + }, + "states": { + "online": "Online {{response}}", + "offline": "Frakoblet {{response}}", + "loading": "Laster inn..." + } +} diff --git a/public/locales/no/modules/search.json b/public/locales/no/modules/search.json new file mode 100644 index 000000000..8a4417f15 --- /dev/null +++ b/public/locales/no/modules/search.json @@ -0,0 +1,30 @@ +{ + "descriptor": { + "name": "Søkefelt", + "description": "Et søkefelt som lar deg søke i din egendefinerte søkemotor, Youtube, og støttede integrasjoner." + }, + "input": { + "placeholder": "Søk på nettet..." + }, + "switched-to": "Endret til", + "searchEngines": { + "search": { + "name": "Web", + "description": "Søk..." + }, + "youtube": { + "name": "Youtube", + "description": "Søk på Youtube" + }, + "torrents": { + "name": "Torrenter", + "description": "Søk etter torrents" + }, + "overseerr": { + "name": "Overseerr", + "description": "Søk etter filmer og TV-serier på Overseerr" + } + }, + "tip": "Du kan velge søkefeltet med snarveien ", + "switchedSearchEngine": "Byttet til å søke med {{searchEngine}}" +} diff --git a/public/locales/no/modules/torrents-status.json b/public/locales/no/modules/torrents-status.json new file mode 100644 index 000000000..ac374403a --- /dev/null +++ b/public/locales/no/modules/torrents-status.json @@ -0,0 +1,72 @@ +{ + "descriptor": { + "name": "Torrent", + "description": "Viser en liste over torrenter fra støttede Torrent-klienter.", + "settings": { + "title": "Innstillinger for Torrent widget", + "refreshInterval": { + "label": "Oppdaterings intervall (i sekunder)" + }, + "displayCompletedTorrents": { + "label": "Vis fullførte torrenter" + }, + "displayStaleTorrents": { + "label": "Vis gamle torrenter" + } + } + }, + "card": { + "footer": { + "error": "Feil", + "lastUpdated": "Sist oppdatert for {{time}} siden" + }, + "table": { + "header": { + "name": "Navn", + "size": "Størrelse", + "download": "Ned", + "upload": "Opp", + "estimatedTimeOfArrival": "Gjenstående tid (estimat)", + "progress": "Fremgang" + }, + "item": { + "text": "Styrt med {{appName}}, {{ratio}} forhold" + }, + "body": { + "nothingFound": "Ingen torrenter funnet" + } + }, + "lineChart": { + "title": "Gjeldende nedlastingshastighet", + "download": "Nedlasting: {{download}}", + "upload": "Opplasting: {{upload}}", + "timeSpan": "{{seconds}} sekunder siden", + "totalDownload": "Nedlasting: {{download}}/s", + "totalUpload": "Opplasting: {{upload}}/s" + }, + "errors": { + "noDownloadClients": { + "title": "Ingen støttede Torrent-klienter funnet!", + "text": "Legg til en støttet Torrent-klient for å se de nåværende nedlastingene" + }, + "generic": { + "title": "En uventet feil har oppstått", + "text": "Homarr kunne ikke kommunisere med dine Torrent-klienter. Kontroller konfigurasjonen" + } + }, + "loading": { + "title": "Laster inn..." + }, + "popover": { + "introductionPrefix": "Administrert av", + "metrics": { + "queuePosition": "Kø posisjon - {{position}}", + "progress": "Fremgang - {{progress}}%", + "totalSelectedSize": "Totalt - {{totalSize}}", + "state": "Status – {{state}}", + "ratio": "Forhold -", + "completed": "Fullført" + } + } + } +} diff --git a/public/locales/no/modules/usenet.json b/public/locales/no/modules/usenet.json new file mode 100644 index 000000000..c034bbac1 --- /dev/null +++ b/public/locales/no/modules/usenet.json @@ -0,0 +1,49 @@ +{ + "descriptor": { + "name": "Usenet", + "description": "Lar deg se og administrere din Usenet-forekomst." + }, + "card": { + "errors": { + "noDownloadClients": { + "title": "Ingen støttede nedlastingsklienter funnet!", + "text": "Legg til en støttet Usenet Nedlastings-klient for å se de gjeldende nedlastingene" + } + } + }, + "tabs": { + "queue": "Kø", + "history": "Logg" + }, + "info": { + "sizeLeft": "Størrelse til venstre", + "paused": "Pauset" + }, + "queue": { + "header": { + "name": "Navn", + "size": "Størrelse", + "eta": "Gjenstående tid (estimat)", + "progress": "Fremgang" + }, + "empty": "Tøm", + "error": { + "title": "Feil", + "message": "Det oppstod en feil" + }, + "paused": "Pauset" + }, + "history": { + "header": { + "name": "Navn", + "size": "Størrelse", + "duration": "Varighet" + }, + "empty": "Tøm", + "error": { + "title": "Feil", + "message": "Feil under lasting av historikk" + }, + "paused": "Pauset" + } +} diff --git a/public/locales/no/modules/weather.json b/public/locales/no/modules/weather.json new file mode 100644 index 000000000..b884e85d6 --- /dev/null +++ b/public/locales/no/modules/weather.json @@ -0,0 +1,33 @@ +{ + "descriptor": { + "name": "Vær", + "description": "Viser gjeldende værinformasjon for en angitt plassering.", + "settings": { + "title": "Innstillinger for vær widget", + "displayInFahrenheit": { + "label": "Vis i Fahrenheit" + }, + "location": { + "label": "Vær plassering" + } + } + }, + "card": { + "weatherDescriptions": { + "clear": "Tøm", + "mainlyClear": "Klar himmel", + "fog": "Tåke", + "drizzle": "Yr", + "freezingDrizzle": "Underkjølt yr", + "rain": "Regn", + "freezingRain": "Underkjølt regn", + "snowFall": "Snø", + "snowGrains": "Snø korn", + "rainShowers": "Regnbyger", + "snowShowers": "Snøbyger", + "thunderstorm": "Tordenvær", + "thunderstormWithHail": "Tordenvær med hagl", + "unknown": "Ukjent" + } + } +} diff --git a/public/locales/no/settings/common.json b/public/locales/no/settings/common.json new file mode 100644 index 000000000..67820677c --- /dev/null +++ b/public/locales/no/settings/common.json @@ -0,0 +1,38 @@ +{ + "title": "Innstillinger", + "tooltip": "Innstillinger", + "tabs": { + "common": "Generelt", + "customizations": "Tilpasninger" + }, + "tips": { + "configTip": "Last opp konfigurasjonsfilen ved å dra og slippe den på siden!" + }, + "credits": { + "madeWithLove": "Laget med ❤️ av @", + "thirdPartyContent": "Se tredjepartsinnhold", + "thirdPartyContentTable": { + "dependencyName": "Avhengighet", + "dependencyVersion": "Versjon" + } + }, + "grow": "Forstørr rutenett (ta all plass)", + "layout": { + "preview": { + "title": "Forhåndsvis", + "subtitle": "Endringer lagres automatisk" + }, + "divider": "Alternativer for layout", + "main": "Hoved", + "sidebar": "Sidepanel", + "cannotturnoff": "Kan ikke slås av", + "dashboardlayout": "Dashbord layout", + "enablersidebar": "Aktiver høyre sidepanel", + "enablelsidebar": "Aktiver venstre sidepanel", + "enablesearchbar": "Aktiver søkefelt", + "enabledocker": "Aktiver dockerintegrering", + "enableping": "Aktiver ping", + "enablelsidebardesc": "Valgfritt. Kan kun brukes for apper og integrasjoner", + "enablersidebardesc": "Valgfritt. Kan kun brukes for apper og integrasjoner" + } +} diff --git a/public/locales/no/settings/customization/app-width.json b/public/locales/no/settings/customization/app-width.json new file mode 100644 index 000000000..e2da7dd11 --- /dev/null +++ b/public/locales/no/settings/customization/app-width.json @@ -0,0 +1,3 @@ +{ + "label": "App bredde" +} \ No newline at end of file diff --git a/public/locales/no/settings/customization/color-selector.json b/public/locales/no/settings/customization/color-selector.json new file mode 100644 index 000000000..8f1505005 --- /dev/null +++ b/public/locales/no/settings/customization/color-selector.json @@ -0,0 +1,4 @@ +{ + "colors": "Farger", + "suffix": "{{color}} farge" +} \ No newline at end of file diff --git a/public/locales/no/settings/customization/general.json b/public/locales/no/settings/customization/general.json new file mode 100644 index 000000000..01370b40f --- /dev/null +++ b/public/locales/no/settings/customization/general.json @@ -0,0 +1,21 @@ +{ + "text": "Med tilpasninger kan du konfigurere og justere din opplevelse med Homarr etter dine preferanser.", + "accordeon": { + "layout": { + "name": "Oppsett", + "description": "Aktiver og deaktiver elementer i headeren din og dashbord fliser" + }, + "gridstack": { + "name": "Gridstack", + "description": "Tilpass oppførselen og kolonnene i ditt dashbordområde" + }, + "pageMetadata": { + "name": "Side metadata", + "description": "Juster titler, logo og PWA" + }, + "appereance": { + "name": "Utseende", + "description": "Tilpass både bakgrunn, farger og apper" + } + } +} \ No newline at end of file diff --git a/public/locales/no/settings/customization/gridstack.json b/public/locales/no/settings/customization/gridstack.json new file mode 100644 index 000000000..94d2bcdf2 --- /dev/null +++ b/public/locales/no/settings/customization/gridstack.json @@ -0,0 +1,10 @@ +{ + "columnsCount": { + "labelPreset": "Kolonner i {{size}} størrelse", + "descriptionPreset": "Antall kolonner når skjermen er mindre enn {{pixels}} piksler bred", + "descriptionExceedsPreset": "Antall kolonner når størrelsen på skjermen overstiger {{pixels}} piksler" + }, + "unsavedChanges": "Du har ulagrede endringer. Klikk på Ta i bruk endringer nedenfor for å bruke og lagre.", + "applyChanges": "Ta i bruk endringer", + "defaultValues": "Standardverdi" +} \ No newline at end of file diff --git a/public/locales/no/settings/customization/opacity-selector.json b/public/locales/no/settings/customization/opacity-selector.json new file mode 100644 index 000000000..2f6d4ac49 --- /dev/null +++ b/public/locales/no/settings/customization/opacity-selector.json @@ -0,0 +1,3 @@ +{ + "label": "App Gjennomsiktighet" +} \ No newline at end of file diff --git a/public/locales/no/settings/customization/page-appearance.json b/public/locales/no/settings/customization/page-appearance.json new file mode 100644 index 000000000..b71148926 --- /dev/null +++ b/public/locales/no/settings/customization/page-appearance.json @@ -0,0 +1,30 @@ +{ + "pageTitle": { + "label": "Sidetittel", + "description": "Tittel på dashbordet øverst til venstre" + }, + "metaTitle": { + "label": "Meta tittel", + "description": "Tittelen som vises som fanenavn" + }, + "logo": { + "label": "Logo", + "description": "Dashbord logoen øverst til venstre" + }, + "favicon": { + "label": "Favicon", + "description": "Ikonet som brukes foran fanenavnet" + }, + "background": { + "label": "Bakgrunn" + }, + "customCSS": { + "label": "Egendefinert CSS", + "description": "Tilpass alle elementer på dashbordet, anbefales bare for erfarne brukere", + "placeholder": "Egendefinert CSS vil bli brukt sist", + "applying": "Tar i bruk CSS..." + }, + "buttons": { + "submit": "Legg til" + } +} diff --git a/public/locales/no/settings/customization/shade-selector.json b/public/locales/no/settings/customization/shade-selector.json new file mode 100644 index 000000000..d969294ba --- /dev/null +++ b/public/locales/no/settings/customization/shade-selector.json @@ -0,0 +1,3 @@ +{ + "label": "Skygge" +} \ No newline at end of file diff --git a/public/locales/no/settings/general/color-schema.json b/public/locales/no/settings/general/color-schema.json new file mode 100644 index 000000000..7c6d0c9e2 --- /dev/null +++ b/public/locales/no/settings/general/color-schema.json @@ -0,0 +1,3 @@ +{ + "label": "Bytt til {{scheme}} -modus" +} \ No newline at end of file diff --git a/public/locales/no/settings/general/config-changer.json b/public/locales/no/settings/general/config-changer.json new file mode 100644 index 000000000..7cb25eb33 --- /dev/null +++ b/public/locales/no/settings/general/config-changer.json @@ -0,0 +1,86 @@ +{ + "configSelect": { + "label": "Konfigurasjonsendrer", + "description": "{{configCount}} konfigurasjoner er tilgjengelige", + "loadingNew": "Laster inn din konfigurasjon...", + "pleaseWait": "Vennligst vent til den nye konfigurasjonen er lastet!" + }, + "modal": { + "copy": { + "title": "Velg navnet på den nye konfigurasjonen", + "form": { + "configName": { + "label": "Navn på konfigurasjon", + "validation": { + "required": "Navn på konfigurasjon er påkrevd", + "notUnique": "Navnet på konfigurasjonen er allerede i bruk" + }, + "placeholder": "Ditt nye konfigurasjonsnavn" + }, + "submitButton": "Bekreft" + }, + "events": { + "configSaved": { + "title": "Konfigurasjon lagret", + "message": "Konfigurasjon lagret som {{configName}}" + }, + "configCopied": { + "title": "Konfigurasjon kopiert", + "message": "Konfigurasjon kopiert som {{configName}}" + }, + "configNotCopied": { + "title": "Kan ikke kopiere konfigurasjon", + "message": "Din konfigurasjon ble ikke kopiert som {{configName}}" + } + } + }, + "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.", + "buttons": { + "confirm": "Ja, slett '{{configName}}'" + } + } + }, + "buttons": { + "download": "Last ned konfigurasjon", + "delete": { + "text": "Slett konfigurasjon", + "notifications": { + "deleted": { + "title": "Konfigurasjon slettet", + "message": "Konfigurasjon slettet" + }, + "deleteFailed": { + "title": "Sletting av konfigurasjon mislyktes", + "message": "Sletting av konfigurasjon mislyktes" + }, + "deleteFailedDefaultConfig": { + "title": "Standard konfigurasjon kan ikke slettes", + "message": "Konfigurasjonen ble ikke slettet fra filsystemet" + } + } + }, + "saveCopy": "Lagre en kopi" + }, + "dropzone": { + "notifications": { + "invalidConfig": { + "title": "Kan ikke laste konfigurasjonen", + "message": "Kunne ikke laste inn config. Ugyldig JSON-format." + }, + "loadedSuccessfully": { + "title": "Konfigurasjon {{configName}} er lastet inn" + } + }, + "accept": { + "title": "Konfigurasjon Opplasting", + "text": "Dra filer her for å laste opp en config. Støtter kun JSON-filer." + }, + "reject": { + "title": "Dra og slipp opplasting avvist", + "text": "Dette filformatet støttes ikke. Last bare opp JSON-filer." + } + } +} diff --git a/public/locales/no/settings/general/internationalization.json b/public/locales/no/settings/general/internationalization.json new file mode 100644 index 000000000..0a479d3fe --- /dev/null +++ b/public/locales/no/settings/general/internationalization.json @@ -0,0 +1,3 @@ +{ + "label": "Språk" +} \ No newline at end of file diff --git a/public/locales/no/settings/general/search-engine.json b/public/locales/no/settings/general/search-engine.json new file mode 100644 index 000000000..a896ed864 --- /dev/null +++ b/public/locales/no/settings/general/search-engine.json @@ -0,0 +1,19 @@ +{ + "title": "Søkemotor", + "configurationName": "Søkemotor konfigurasjon", + "tips": { + "generalTip": "Det finnes flere prefikser du kan bruke! Å legge til disse før spørringen vil filtrere resultatene. !s (Web), !t (Torrents), !y (YouTube), og !m (Media).", + "placeholderTip": "%s kan brukes som plassholder for spørringen." + }, + "customEngine": { + "title": "Egendefinert søkemotor", + "label": "SpørringsURL", + "placeholder": "Egendefinert spørrings URL" + }, + "searchNewTab": { + "label": "Åpne søkeresultater i ny fane" + }, + "searchEnabled": { + "label": "Søk aktivert" + } +} diff --git a/public/locales/no/settings/general/theme-selector.json b/public/locales/no/settings/general/theme-selector.json new file mode 100644 index 000000000..de3a598ab --- /dev/null +++ b/public/locales/no/settings/general/theme-selector.json @@ -0,0 +1,3 @@ +{ + "label": "Bytt til {{theme}} -modus" +} \ No newline at end of file diff --git a/public/locales/no/settings/general/widget-positions.json b/public/locales/no/settings/general/widget-positions.json new file mode 100644 index 000000000..6b39c9c20 --- /dev/null +++ b/public/locales/no/settings/general/widget-positions.json @@ -0,0 +1,3 @@ +{ + "label": "Plasser widgets til venstre" +} diff --git a/public/locales/pl/modules/dashdot.json b/public/locales/pl/modules/dashdot.json index 9f9b690eb..766f4eaf4 100644 --- a/public/locales/pl/modules/dashdot.json +++ b/public/locales/pl/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "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?" + "noInformation": "Nie można uzyskać informacji z dash. - używasz najnowszej wersji?", + "protocolDowngrade": { + "title": "", + "text": "" + } }, "graphs": { "storage": { diff --git a/public/locales/pt/modules/dashdot.json b/public/locales/pt/modules/dashdot.json index fec0b1751..69d8cdda8 100644 --- a/public/locales/pt/modules/dashdot.json +++ b/public/locales/pt/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Nenhum serviço Dash. encontrado. Por favor, adicione um ao seu painel Homarr ou defina uma URL para o Dash. nas opções do módulo", - "noInformation": "Não é possível obter informações do Dash. Você está executando a versão mais recente?" + "noInformation": "Não é possível obter informações do Dash. Você está executando a versão mais recente?", + "protocolDowngrade": { + "title": "", + "text": "" + } }, "graphs": { "storage": { diff --git a/public/locales/ru/modules/dashdot.json b/public/locales/ru/modules/dashdot.json index 7d281dcb5..6f5b5783f 100644 --- a/public/locales/ru/modules/dashdot.json +++ b/public/locales/ru/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Не найдено ни одной службы Dash. Пожалуйста, добавьте его на панель Homarr или задайте URL-адрес Dash. в настройках модуля", - "noInformation": "Не удается получить информацию из Dash. - Вы используете последнюю версию?" + "noInformation": "Не удается получить информацию из Dash. - Вы используете последнюю версию?", + "protocolDowngrade": { + "title": "Обнаружено понижение версии протокола соединения", + "text": "Понижение версии протокола соединения с Dash. Это является угрозой безопасности, так как протокол HTTP не зашифрован и злоумышленники могут перехватить данное соединение. Убедитесь, что Dash. работает также и на протоколе HTTPS, или переведите Homarr на HTTP (не рекомендуется)." + } }, "graphs": { "storage": { diff --git a/public/locales/ru/settings/common.json b/public/locales/ru/settings/common.json index aa35f78f4..29c10d855 100644 --- a/public/locales/ru/settings/common.json +++ b/public/locales/ru/settings/common.json @@ -22,7 +22,7 @@ "title": "Предпросмотр", "subtitle": "Изменения будут сохранены автоматически" }, - "divider": "", + "divider": "Параметры макета", "main": "Главная", "sidebar": "Боковая панель", "cannotturnoff": "Невозможно отключить", diff --git a/public/locales/ru/settings/customization/general.json b/public/locales/ru/settings/customization/general.json index e8b397967..172f0d0dc 100644 --- a/public/locales/ru/settings/customization/general.json +++ b/public/locales/ru/settings/customization/general.json @@ -1,9 +1,9 @@ { - "text": "", + "text": "Настройки позволяют вам настроить и скорректировать свой опыт работы с Homarr в соответствии с вашими предпочтениями.", "accordeon": { "layout": { - "name": "", - "description": "" + "name": "Макет", + "description": "Включение и отключение элементов в заголовке и на панели" }, "gridstack": { "name": "", diff --git a/public/locales/ru/settings/customization/page-appearance.json b/public/locales/ru/settings/customization/page-appearance.json index 9143963e8..d4637e6de 100644 --- a/public/locales/ru/settings/customization/page-appearance.json +++ b/public/locales/ru/settings/customization/page-appearance.json @@ -5,7 +5,7 @@ }, "metaTitle": { "label": "Мета-заголовок", - "description": "Заголовок, отображаемый в качестве имени вашей вкладки" + "description": "Заголовок, который отображается как имя вкладки" }, "logo": { "label": "Логотип", @@ -13,16 +13,16 @@ }, "favicon": { "label": "Иконка", - "description": "Иконка, отображаемая во вкладке перед названием страницы" + "description": "Иконка, которая отображается во вкладке перед названием страницы" }, "background": { "label": "Фон" }, "customCSS": { "label": "Пользовательский CSS", - "description": "", + "description": "Настройте все элементы панели, рекомендуется только для опытных пользователей", "placeholder": "Пользовательский CSS будет применяться в последнюю очередь", - "applying": "" + "applying": "Применение CSS..." }, "buttons": { "submit": "Подтвердить" diff --git a/public/locales/sk/authentication/login.json b/public/locales/sk/authentication/login.json new file mode 100644 index 000000000..3e0e2bdba --- /dev/null +++ b/public/locales/sk/authentication/login.json @@ -0,0 +1,27 @@ +{ + "title": "Vitaj späť!", + "text": "Prosím zadajte heslo", + "form": { + "fields": { + "password": { + "label": "Heslo", + "placeholder": "Tvoje heslo" + } + }, + "buttons": { + "submit": "Prihlásiť sa" + } + }, + "notifications": { + "checking": { + "title": "Kontrola hesla", + "message": "Vaše heslo sa kontroluje..." + }, + "correct": { + "title": "Prihlásenie bolo úspešné, prebieha presmerovanie..." + }, + "wrong": { + "title": "Zadané heslo je nesprávne, skúste to znova." + } + } +} diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json new file mode 100644 index 000000000..04ff7af62 --- /dev/null +++ b/public/locales/sk/common.json @@ -0,0 +1,34 @@ +{ + "save": "Uložiť", + "about": "O aplikácii", + "cancel": "Zrušiť", + "close": "Zatvoriť", + "delete": "Vymazať", + "ok": "OK", + "edit": "Upraviť", + "version": "Verzia", + "changePosition": "Zmeniť pozíciu", + "remove": "Odstrániť", + "removeConfirm": "Ste si istý ze chcete odstrániť {{item}} ?", + "sections": { + "settings": "Nastavenia", + "dangerZone": "Nebezpečná zóna" + }, + "secrets": { + "apiKey": "Api kľúč", + "username": "Používateľské meno", + "password": "Heslo" + }, + "tip": "Tip: ", + "time": { + "seconds": "sekundy", + "minutes": "minúty", + "hours": "hodiny" + }, + "loading": "Nahrávam...", + "breakPoints": { + "small": "malý", + "medium": "stredný", + "large": "veľký" + } +} \ No newline at end of file diff --git a/public/locales/sk/layout/element-selector/selector.json b/public/locales/sk/layout/element-selector/selector.json new file mode 100644 index 000000000..b838e36e1 --- /dev/null +++ b/public/locales/sk/layout/element-selector/selector.json @@ -0,0 +1,11 @@ +{ + "modal": { + "title": "Pridajte novú dlaždicu", + "text": "Dlaždice sú hlavným prvkom Homarr. Používajú sa na zobrazenie vašich aplikácií a ďalších informácií. Môžete pridať toľko dlaždíc, koľko chcete." + }, + "widgetDescription": "Mini aplikácie spolupracujú s vašimi aplikáciami, aby vám poskytli väčšiu kontrolu nad vašimi aplikáciami. Pred použitím zvyčajne vyžadujú dodatočnú konfiguráciu.", + "goBack": "Vráťte sa na predchádzajúci krok", + "actionIcon": { + "tooltip": "Pridajte dlaždicu" + } +} diff --git a/public/locales/sk/layout/header/actions/toggle-edit-mode.json b/public/locales/sk/layout/header/actions/toggle-edit-mode.json new file mode 100644 index 000000000..8e3f2b94f --- /dev/null +++ b/public/locales/sk/layout/header/actions/toggle-edit-mode.json @@ -0,0 +1,11 @@ +{ + "description": "V režime úprav môžete upravovať dlaždice a konfigurovať aplikácie. Zmeny sa neuložia, kým neukončíte režim úprav.", + "button": { + "disabled": "Vstúpte do režimu úprav", + "enabled": "Ukončiť a uložiť" + }, + "popover": { + "title": "Režim úprav je povolený pre veľkosť <1>{{size}}", + "text": "Teraz môžete svoje aplikácie upravovať a konfigurovať. Zmeny sa neuložia, kým neukončíte režim úprav" + } +} diff --git a/public/locales/sk/layout/mobile/drawer.json b/public/locales/sk/layout/mobile/drawer.json new file mode 100644 index 000000000..1c5c99ae5 --- /dev/null +++ b/public/locales/sk/layout/mobile/drawer.json @@ -0,0 +1,3 @@ +{ + "title": "{{position}} bočný panel" +} diff --git a/public/locales/sk/layout/modals/about.json b/public/locales/sk/layout/modals/about.json new file mode 100644 index 000000000..a1c1bfb64 --- /dev/null +++ b/public/locales/sk/layout/modals/about.json @@ -0,0 +1,13 @@ +{ + "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", + "metrics": { + "configurationSchemaVersion": "Verzia konfiguračnej schémy", + "configurationsCount": "Dostupné konfigurácie", + "version": "Verzia", + "nodeEnvironment": "Node prostredie", + "i18n": "Načítané prekladové priestory I18n", + "locales": "Nakonfigurované lokality I18n" + } +} \ No newline at end of file diff --git a/public/locales/sk/layout/modals/add-app.json b/public/locales/sk/layout/modals/add-app.json new file mode 100644 index 000000000..0620b249f --- /dev/null +++ b/public/locales/sk/layout/modals/add-app.json @@ -0,0 +1,68 @@ +{ + "tabs": { + "general": "Všeobecné", + "behaviour": "Správanie", + "network": "Sieť", + "appearance": "Vzhľad", + "integration": "Integrácia" + }, + "general": { + "appname": { + "label": "Názov aplikácie", + "description": "Používa sa na zobrazenie aplikácie na palubnej doske." + }, + "internalAddress": { + "label": "Interná adresa", + "description": "Interná IP adresa aplikácie." + }, + "externalAddress": { + "label": "Externá adresa", + "description": "URL, ktorá sa otvorí po kliknutí na aplikáciu." + } + }, + "behaviour": { + "isOpeningNewTab": { + "label": "Otvoriť na novej karte", + "description": "Otvorenie aplikácie na novej karte namiesto aktuálnej." + } + }, + "network": { + "statusChecker": { + "label": "Kontrola stavu", + "description": "Pomocou jednoduchej požiadavky HTTP skontroluje, či je vaša aplikácia online." + }, + "statusCodes": { + "label": "Stavové kódy HTTP", + "description": "Stavové kódy HTTP, ktoré sa považujú za online." + } + }, + "appearance": { + "icon": { + "label": "Ikona aplikácie", + "description": "Ikona, ktorá sa zobrazí na prístrojovej doske." + } + }, + "integration": { + "type": { + "label": "Konfigurácia integrácií", + "description": "Konfigurácia integrácie, ktorá sa použije na pripojenie k vašej aplikácii.", + "placeholder": "Výber integrácie", + "defined": "Definované", + "undefined": "Nedefinované", + "public": "Verejné", + "private": "Súkromné", + "explanationPrivate": "Súkromné tajomstvo sa odošle na server iba raz. Po obnovení stránky prehliadačom sa už nikdy neodošle.", + "explanationPublic": "Verejné tajomstvo sa vždy odošle klientovi a je prístupné cez API. Nemalo by obsahovať žiadne dôverné hodnoty, ako sú používateľské mená, heslá, tokeny, certifikáty a podobne!" + }, + "secrets": { + "description": "Ak chcete aktualizovať tajomstvo, zadajte hodnotu a kliknite na tlačidlo Uložiť. Ak chcete odstrániť tajomstvo, použite tlačidlo vymazať.", + "warning": "Vaše poverovacie údaje slúžia ako prístupové údaje pre vaše integrácie a nikdy by ste ich nemali zdieľať s nikým iným. Tím Homarr vás nikdy nebude žiadať o prístupové údaje. Dbajte na to, aby ste svoje tajné údaje bezpečne uchovávali a spravovali.", + "clear": "Vymazať tajomstvo", + "save": "Uložiť tajomstvo", + "update": "Aktualizovať tajomstvo" + } + }, + "validation": { + "popover": "Váš formulár obsahuje neplatné údaje. Preto ho nemožno uložiť. Vyriešte všetky problémy a znovu kliknite na toto tlačidlo, aby ste uložili svoje zmeny" + } +} diff --git a/public/locales/sk/layout/modals/change-position.json b/public/locales/sk/layout/modals/change-position.json new file mode 100644 index 000000000..05e29163b --- /dev/null +++ b/public/locales/sk/layout/modals/change-position.json @@ -0,0 +1,8 @@ +{ + "xPosition": "Poloha osi X", + "width": "Šírka", + "height": "Výška", + "yPosition": "Poloha osi Y", + "zeroOrHigher": "0 alebo vyššia", + "betweenXandY": "Medzi {{min}} a {{max}}" +} \ No newline at end of file diff --git a/public/locales/sk/layout/modals/icon-picker.json b/public/locales/sk/layout/modals/icon-picker.json new file mode 100644 index 000000000..4b5f8f05d --- /dev/null +++ b/public/locales/sk/layout/modals/icon-picker.json @@ -0,0 +1,7 @@ +{ + "iconPicker": { + "textInputPlaceholder": "Vyhľadajte niečo...", + "searchLimitationTitle": "Obmedzené na 30 výsledkov", + "searchLimitationMessage": "Výsledky vyhľadávania boli obmedzené na 30, pretože bolo príliš veľa zhod" + } +} \ No newline at end of file diff --git a/public/locales/sk/modules/calendar.json b/public/locales/sk/modules/calendar.json new file mode 100644 index 000000000..133dffedc --- /dev/null +++ b/public/locales/sk/modules/calendar.json @@ -0,0 +1,18 @@ +{ + "descriptor": { + "name": "Kalendár", + "description": "Zobraz kalendár s pripravovanými vydaniami z podporovaných integrácií.", + "settings": { + "title": "Nastavenia mini aplikácie Kalendár", + "useSonarrv4": { + "label": "Použi Sonarr v4 API" + }, + "sundayStart": { + "label": "Začni týždeň v Nedeľu" + }, + "radarrReleaseType": { + "label": "Typ Radarr releasu" + } + } + } +} diff --git a/public/locales/sk/modules/common-media-cards.json b/public/locales/sk/modules/common-media-cards.json new file mode 100644 index 000000000..c4c28fcdb --- /dev/null +++ b/public/locales/sk/modules/common-media-cards.json @@ -0,0 +1,6 @@ +{ + "buttons": { + "play": "Prehraj", + "request": "Požiadavka" + } +} \ No newline at end of file diff --git a/public/locales/sk/modules/common.json b/public/locales/sk/modules/common.json new file mode 100644 index 000000000..748c7a306 --- /dev/null +++ b/public/locales/sk/modules/common.json @@ -0,0 +1,10 @@ +{ + "settings": { + "label": "Nastavenia" + }, + "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." + } + } +} diff --git a/public/locales/sk/modules/dashdot.json b/public/locales/sk/modules/dashdot.json new file mode 100644 index 000000000..2381cb6da --- /dev/null +++ b/public/locales/sk/modules/dashdot.json @@ -0,0 +1,61 @@ +{ + "descriptor": { + "name": "Dash.", + "description": "Zobrazovať grafy externej Dash. vo vnútri Homarru.", + "settings": { + "title": "Nastavenia pre Dash. mini aplikácie", + "cpuMultiView": { + "label": "CPU Multi-Core Zobrazenie" + }, + "storageMultiView": { + "label": "Zobrazenie Multi-Drive úložiska" + }, + "useCompactView": { + "label": "Použi kompaktné zobrazenie" + }, + "graphs": { + "label": "Grafy" + }, + "url": { + "label": "Dash. URL" + }, + "usePercentages": { + "label": "Zobraziť percentá" + } + } + }, + "card": { + "title": "Dash.", + "errors": { + "noService": "Žiadna Dash. služba nájdená. Pridajte službu na svoj informačný panel Homarr alebo nastavte Dash. URL v možnostiach modulu", + "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)." + } + }, + "graphs": { + "storage": { + "title": "Úložisko", + "label": "Úložisko:" + }, + "network": { + "title": "Sieť", + "label": "Sieť:", + "metrics": { + "download": "Dole", + "upload": "Hore" + } + }, + "cpu": { + "title": "CPU" + }, + "memory": { + "title": "RAM" + }, + "gpu": { + "title": "GPU" + } + } + } +} diff --git a/public/locales/sk/modules/date.json b/public/locales/sk/modules/date.json new file mode 100644 index 000000000..31f9c7d70 --- /dev/null +++ b/public/locales/sk/modules/date.json @@ -0,0 +1,12 @@ +{ + "descriptor": { + "name": "Dátum a čas", + "description": "Zobrazuje aktuálny dátum a čas.", + "settings": { + "title": "Nastavenia miniaplikácie Dátum a čas", + "display24HourFormat": { + "label": "Zobraziť celý čas (24 hodín)" + } + } + } +} diff --git a/public/locales/sk/modules/dlspeed.json b/public/locales/sk/modules/dlspeed.json new file mode 100644 index 000000000..9d14cc621 --- /dev/null +++ b/public/locales/sk/modules/dlspeed.json @@ -0,0 +1,35 @@ +{ + "descriptor": { + "name": "Rýchlosť sťahovania", + "description": "Zobrazuje rýchlosť sťahovania a nahrávania podporovaných integrácií." + }, + "card": { + "table": { + "header": { + "name": "Názov", + "size": "Veľkosť", + "download": "Dole", + "upload": "Hore", + "estimatedTimeOfArrival": "Odhad", + "progress": "Stav" + }, + "body": { + "nothingFound": "Nenašli sa žiadne torrenty" + } + }, + "lineChart": { + "title": "Aktuálna rýchlosť sťahovania", + "download": "Stiahnuť: {{download}}", + "upload": "Nahrať: {{upload}}", + "timeSpan": "pred {{seconds}} sekundami", + "totalDownload": "Stiahnuť: {{download}}/s", + "totalUpload": "Nahrať: {{upload}}/s" + }, + "errors": { + "noDownloadClients": { + "title": "Nenašli sa žiadni podporovaní klienti na sťahovanie!", + "text": "Ak chcete zobraziť aktuálne stiahnuté súbory, pridajte službu sťahovania" + } + } + } +} diff --git a/public/locales/sk/modules/docker.json b/public/locales/sk/modules/docker.json new file mode 100644 index 000000000..34ea5f4a1 --- /dev/null +++ b/public/locales/sk/modules/docker.json @@ -0,0 +1,83 @@ +{ + "descriptor": { + "name": "Docker", + "description": "Umožňuje vám jednoducho zobraziť a spravovať všetky vaše kontajnery Docker." + }, + "search": { + "placeholder": "Vyhľadávajte podľa názvu kontajnera alebo obrazu" + }, + "table": { + "header": { + "name": "Názov", + "image": "Obraz", + "ports": "Porty", + "state": "Stav" + }, + "body": { + "portCollapse": "{{ports}} viac" + }, + "states": { + "running": "Spustené", + "created": "Vytvorené", + "stopped": "Zastavené", + "unknown": "Neznámy" + } + }, + "actionBar": { + "addService": { + "title": "Pridať aplikáciu", + "message": "Pridanie aplikácie do aplikácie Homarr" + }, + "restart": { + "title": "Reštartovať" + }, + "stop": { + "title": "Zastaviť" + }, + "start": { + "title": "Spustiť" + }, + "refreshData": { + "title": "Obnoviť údaje" + }, + "remove": { + "title": "Odstrániť" + }, + "addToHomarr": { + "title": "Pridať do Homarr" + } + }, + "actions": { + "start": { + "start": "Štartuje", + "end": "Začaté" + }, + "stop": { + "start": "Zastavovanie", + "end": "Zastavené" + }, + "restart": { + "start": "Reštartovanie", + "end": "Reštartované" + }, + "remove": { + "start": "Odstraňujem", + "end": "Odstránené" + } + }, + "errors": { + "integrationFailed": { + "title": "Integrácia Dockera zlyhala", + "message": "Zabudli ste pripojiť docker socket?" + }, + "unknownError": { + "title": "Došlo k chybe" + }, + "oneServiceAtATime": { + "title": "Prosím, pridávajte vždy len jednu aplikáciu alebo službu!" + } + }, + "actionIcon": { + "tooltip": "Docker" + } +} diff --git a/public/locales/sk/modules/overseerr.json b/public/locales/sk/modules/overseerr.json new file mode 100644 index 000000000..4cb61fa45 --- /dev/null +++ b/public/locales/sk/modules/overseerr.json @@ -0,0 +1,30 @@ +{ + "descriptor": { + "name": "Overseerr", + "description": "Umožňuje vyhľadávať a pridávať médiá z Overseerr alebo Jellyseerr." + }, + "popup": { + "item": { + "buttons": { + "askFor": "Požiadajte o {{title}}", + "cancel": "Zrušiť", + "request": "Požiadavka" + }, + "alerts": { + "automaticApproval": { + "title": "Používanie kľúča API", + "text": "Táto žiadosť bude automaticky schválená" + } + } + }, + "seasonSelector": { + "caption": "Označte série, ktoré chcete prevziať", + "table": { + "header": { + "season": "Séria", + "numberOfEpisodes": "Počet epizód" + } + } + } + } +} diff --git a/public/locales/sk/modules/ping.json b/public/locales/sk/modules/ping.json new file mode 100644 index 000000000..452bbe40c --- /dev/null +++ b/public/locales/sk/modules/ping.json @@ -0,0 +1,11 @@ +{ + "descriptor": { + "name": "Ping", + "description": "Zobrazí indikátor stavu v závislosti od kódu odpovede HTTP danej adresy URL." + }, + "states": { + "online": "Online {{response}}", + "offline": "Offline {{response}}", + "loading": "Nahrávam..." + } +} diff --git a/public/locales/sk/modules/search.json b/public/locales/sk/modules/search.json new file mode 100644 index 000000000..730319b84 --- /dev/null +++ b/public/locales/sk/modules/search.json @@ -0,0 +1,30 @@ +{ + "descriptor": { + "name": "Vyhľadávací panel", + "description": "Vyhľadávací panel, ktorý umožňuje vyhľadávať vo vlastnom vyhľadávači, službe YouTube a podporovaných integráciách." + }, + "input": { + "placeholder": "Vyhľadajte na webe..." + }, + "switched-to": "Prepnúť na", + "searchEngines": { + "search": { + "name": "Web", + "description": "Hľadať..." + }, + "youtube": { + "name": "Youtube", + "description": "Vyhľadať na Youtube" + }, + "torrents": { + "name": "Torrenty", + "description": "Vyhľadávanie torrentov" + }, + "overseerr": { + "name": "Overseerr", + "description": "Vyhľadajte filmy a televízne relácie na Overseerr" + } + }, + "tip": "Pomocou skratky môžete vybrať panel vyhľadávania ", + "switchedSearchEngine": "Prepnuté na vyhľadávanie pomocou {{searchEngine}}" +} diff --git a/public/locales/sk/modules/torrents-status.json b/public/locales/sk/modules/torrents-status.json new file mode 100644 index 000000000..fffdad718 --- /dev/null +++ b/public/locales/sk/modules/torrents-status.json @@ -0,0 +1,72 @@ +{ + "descriptor": { + "name": "Torrent", + "description": "Zobrazí zoznam torrentov z podporovaných klientov Torrent.", + "settings": { + "title": "Nastavenia mini aplikácie Torrent", + "refreshInterval": { + "label": "Interval obnovovania (v sekundách)" + }, + "displayCompletedTorrents": { + "label": "Zobraz dokončené torrenty" + }, + "displayStaleTorrents": { + "label": "Zobraz zastarané torrenty" + } + } + }, + "card": { + "footer": { + "error": "Chyba", + "lastUpdated": "Naposledy aktualizované pred {{time}}" + }, + "table": { + "header": { + "name": "Názov", + "size": "Veľkosť", + "download": "Dole", + "upload": "Hore", + "estimatedTimeOfArrival": "Odhad", + "progress": "Stav" + }, + "item": { + "text": "Spravuje {{appName}}, {{ratio}} pomer" + }, + "body": { + "nothingFound": "Nenašli sa žiadne torrenty" + } + }, + "lineChart": { + "title": "Aktuálna rýchlosť sťahovania", + "download": "Stiahnuť: {{download}}", + "upload": "Nahrať: {{upload}}", + "timeSpan": "pred {{seconds}} sekundami", + "totalDownload": "Stiahnuť: {{download}}/s", + "totalUpload": "Nahrať: {{upload}}/s" + }, + "errors": { + "noDownloadClients": { + "title": "Nenašli sa žiadni podporovaní klienti na sťahovanie!", + "text": "Pridanie podporovaného klienta Torrent na zobrazenie aktuálnych stiahnutí" + }, + "generic": { + "title": "Vyskytla sa neočakávaná chyba", + "text": "Homarr nedokázal komunikovať s vašimi klientmi Torrent. Skontrolujte prosím svoju konfiguráciu" + } + }, + "loading": { + "title": "Nahrávam..." + }, + "popover": { + "introductionPrefix": "Spravovaný", + "metrics": { + "queuePosition": "Pozícia vo fronte - {{position}}", + "progress": "Stav - {{progress}}%", + "totalSelectedSize": "Spolu - {{totalSize}}", + "state": "Stav - {{state}}", + "ratio": "Pomer -", + "completed": "Dokončené" + } + } + } +} diff --git a/public/locales/sk/modules/usenet.json b/public/locales/sk/modules/usenet.json new file mode 100644 index 000000000..497134150 --- /dev/null +++ b/public/locales/sk/modules/usenet.json @@ -0,0 +1,49 @@ +{ + "descriptor": { + "name": "Usenet", + "description": "Umožňuje vám zobraziť a spravovať vašu inštanciu Usenet." + }, + "card": { + "errors": { + "noDownloadClients": { + "title": "Nenašli sa žiadni podporovaní klienti na sťahovanie!", + "text": "Ak chcete zobraziť aktuálne stiahnuté súbory, pridajte podporovaného klienta Usenet Download Client" + } + } + }, + "tabs": { + "queue": "Fronta", + "history": "História" + }, + "info": { + "sizeLeft": "Veľkosť vľavo", + "paused": "Pozastavené" + }, + "queue": { + "header": { + "name": "Názov", + "size": "Veľkosť", + "eta": "Odhad", + "progress": "Stav" + }, + "empty": "Prázdny", + "error": { + "title": "Chyba", + "message": "Došlo k chybe" + }, + "paused": "Pozastavené" + }, + "history": { + "header": { + "name": "Názov", + "size": "Veľkosť", + "duration": "Trvanie" + }, + "empty": "Prázdny", + "error": { + "title": "Chyba", + "message": "Chyba pri načítavaní histórie" + }, + "paused": "Pozastavené" + } +} diff --git a/public/locales/sk/modules/weather.json b/public/locales/sk/modules/weather.json new file mode 100644 index 000000000..ba48ecce1 --- /dev/null +++ b/public/locales/sk/modules/weather.json @@ -0,0 +1,33 @@ +{ + "descriptor": { + "name": "Počasie", + "description": "Zobrazí aktuálne informácie o počasí na nastavenom mieste.", + "settings": { + "title": "Nastavenia mini aplikácie počasia", + "displayInFahrenheit": { + "label": "Zobrazenie vo stupňoch Fahrenheita" + }, + "location": { + "label": "Poloha počasia" + } + } + }, + "card": { + "weatherDescriptions": { + "clear": "Jasno", + "mainlyClear": "Prevažne jasno", + "fog": "Hmla", + "drizzle": "Mrholenie", + "freezingDrizzle": "Mrznúce mrholenie", + "rain": "Dážď", + "freezingRain": "Mrznúci dážď", + "snowFall": "Sneženie", + "snowGrains": "Snehové zrná", + "rainShowers": "Prehánky", + "snowShowers": "Snehové prehánky", + "thunderstorm": "Búrka", + "thunderstormWithHail": "Búrka s krúpami", + "unknown": "Neznámy" + } + } +} diff --git a/public/locales/sk/settings/common.json b/public/locales/sk/settings/common.json new file mode 100644 index 000000000..2c42d6169 --- /dev/null +++ b/public/locales/sk/settings/common.json @@ -0,0 +1,38 @@ +{ + "title": "Nastavenia", + "tooltip": "Nastavenia", + "tabs": { + "common": "Spoločné", + "customizations": "Prispôsobenia" + }, + "tips": { + "configTip": "Nahrajte svoj konfiguračný súbor presunutím myšou na stránku!" + }, + "credits": { + "madeWithLove": "Vyrobené z ❤️ od @", + "thirdPartyContent": "Pozrite si obsah tretích strán", + "thirdPartyContentTable": { + "dependencyName": "Závislosť", + "dependencyVersion": "Verzia" + } + }, + "grow": "Zväčšiť mriežku (zabrať všetok priestor)", + "layout": { + "preview": { + "title": "Náhľad", + "subtitle": "Zmeny sa uložia automaticky" + }, + "divider": "Možnosti rozloženia", + "main": "Hlavný", + "sidebar": "Bočný panel", + "cannotturnoff": "Nedá sa vypnúť", + "dashboardlayout": "Rozloženie dashboardu", + "enablersidebar": "Povoliť pravý bočný panel", + "enablelsidebar": "Povoliť ľavý bočný panel", + "enablesearchbar": "Povoliť panel vyhľadávania", + "enabledocker": "Povoliť Docker integráciu", + "enableping": "Povoliť pingy", + "enablelsidebardesc": "Voliteľné. Dá sa použiť iba pre aplikácie a integrácie", + "enablersidebardesc": "Voliteľné. Dá sa použiť iba pre aplikácie a integrácie" + } +} diff --git a/public/locales/sk/settings/customization/app-width.json b/public/locales/sk/settings/customization/app-width.json new file mode 100644 index 000000000..f5f3142e2 --- /dev/null +++ b/public/locales/sk/settings/customization/app-width.json @@ -0,0 +1,3 @@ +{ + "label": "Šírka aplikácie" +} \ No newline at end of file diff --git a/public/locales/sk/settings/customization/color-selector.json b/public/locales/sk/settings/customization/color-selector.json new file mode 100644 index 000000000..b45164892 --- /dev/null +++ b/public/locales/sk/settings/customization/color-selector.json @@ -0,0 +1,4 @@ +{ + "colors": "Farby", + "suffix": "{{color}} farba" +} \ No newline at end of file diff --git a/public/locales/sk/settings/customization/general.json b/public/locales/sk/settings/customization/general.json new file mode 100644 index 000000000..ebcf73066 --- /dev/null +++ b/public/locales/sk/settings/customization/general.json @@ -0,0 +1,21 @@ +{ + "text": "Prispôsobenia vám umožňujú konfigurovať a prispôsobiť si prácu s aplikáciou Homarr podľa vašich preferencií.", + "accordeon": { + "layout": { + "name": "Rozloženie", + "description": "Povolenie a zakázanie prvkov na dlaždiciach záhlavia a prístrojového panela" + }, + "gridstack": { + "name": "Gridstack", + "description": "Prispôsobenie správania a stĺpcov v oblasti prístrojovej dosky" + }, + "pageMetadata": { + "name": "Metadáta stránky", + "description": "Úprava názvov, loga a PWA" + }, + "appereance": { + "name": "Vzhľad", + "description": "Prispôsobenie pozadia, farieb a vzhľadu aplikácií" + } + } +} \ No newline at end of file diff --git a/public/locales/sk/settings/customization/gridstack.json b/public/locales/sk/settings/customization/gridstack.json new file mode 100644 index 000000000..a5b541fa3 --- /dev/null +++ b/public/locales/sk/settings/customization/gridstack.json @@ -0,0 +1,10 @@ +{ + "columnsCount": { + "labelPreset": "Stĺpce vo veľkosti {{size}}", + "descriptionPreset": "Počet stĺpcov, keď je obrazovka široká menej ako {{pixels}} pixelov", + "descriptionExceedsPreset": "Počet stĺpcov, keď veľkosť obrazovky presahuje {{pixels}} pixelov" + }, + "unsavedChanges": "Máte neuložené zmeny. Kliknite na tlačidlo Použiť zmeny nižšie, aby ste ich použili a uložili.", + "applyChanges": "Použiť zmeny", + "defaultValues": "Predvolené hodnoty" +} \ No newline at end of file diff --git a/public/locales/sk/settings/customization/opacity-selector.json b/public/locales/sk/settings/customization/opacity-selector.json new file mode 100644 index 000000000..410571aa7 --- /dev/null +++ b/public/locales/sk/settings/customization/opacity-selector.json @@ -0,0 +1,3 @@ +{ + "label": "Nepriehľadnosť aplikácie" +} \ No newline at end of file diff --git a/public/locales/sk/settings/customization/page-appearance.json b/public/locales/sk/settings/customization/page-appearance.json new file mode 100644 index 000000000..f0f5e483b --- /dev/null +++ b/public/locales/sk/settings/customization/page-appearance.json @@ -0,0 +1,30 @@ +{ + "pageTitle": { + "label": "Názov stránky", + "description": "Názov hlavného panela vľavo hore" + }, + "metaTitle": { + "label": "Meta názov", + "description": "Názov, ktorý sa zobrazuje ako názov vašej karty" + }, + "logo": { + "label": "Logo", + "description": "Logo prístrojovej dosky vľavo hore" + }, + "favicon": { + "label": "Favicon", + "description": "Ikona, ktorá sa používa pred názvom karty" + }, + "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", + "placeholder": "Vlastné CSS sa použije ako posledné", + "applying": "Aplikuje sa CSS..." + }, + "buttons": { + "submit": "Odoslať" + } +} diff --git a/public/locales/sk/settings/customization/shade-selector.json b/public/locales/sk/settings/customization/shade-selector.json new file mode 100644 index 000000000..02eb381d1 --- /dev/null +++ b/public/locales/sk/settings/customization/shade-selector.json @@ -0,0 +1,3 @@ +{ + "label": "Odtieň" +} \ No newline at end of file diff --git a/public/locales/sk/settings/general/color-schema.json b/public/locales/sk/settings/general/color-schema.json new file mode 100644 index 000000000..8fa3edf55 --- /dev/null +++ b/public/locales/sk/settings/general/color-schema.json @@ -0,0 +1,3 @@ +{ + "label": "Prepnite do {{scheme}} režimu" +} \ No newline at end of file diff --git a/public/locales/sk/settings/general/config-changer.json b/public/locales/sk/settings/general/config-changer.json new file mode 100644 index 000000000..d7071e548 --- /dev/null +++ b/public/locales/sk/settings/general/config-changer.json @@ -0,0 +1,86 @@ +{ + "configSelect": { + "label": "Konfiguračný menič", + "description": "{{configCount}} konfigurácie sú k dispozícii", + "loadingNew": "Načítanie konfigurácie...", + "pleaseWait": "Počkajte, kým sa načíta nová konfigurácia!" + }, + "modal": { + "copy": { + "title": "Vyberte názov nového konfigurátora", + "form": { + "configName": { + "label": "Názov konfigurácie", + "validation": { + "required": "Vyžaduje sa názov konfigurácie", + "notUnique": "Názov konfigurácie sa už používa" + }, + "placeholder": "Váš nový názov konfigurácie" + }, + "submitButton": "Potvrďte" + }, + "events": { + "configSaved": { + "title": "Uložená konfigurácia", + "message": "Konfigurácia uložená ako {{configName}}" + }, + "configCopied": { + "title": "Skopírovaná konfigurácia", + "message": "Konfigurácia skopírovaná ako {{configName}}" + }, + "configNotCopied": { + "title": "Nie je možné skopírovať konfiguráciu", + "message": "Váš konfigurátor nebol skopírovaný ako {{configName}}" + } + } + }, + "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.", + "buttons": { + "confirm": "Áno, vymažte '{{configName}}'" + } + } + }, + "buttons": { + "download": "Stiahnite si konfiguráciu", + "delete": { + "text": "Odstránenie konfigurácie", + "notifications": { + "deleted": { + "title": "Konfigurácia odstránená", + "message": "Konfigurácia odstránená" + }, + "deleteFailed": { + "title": "Odstránenie konfigurácie zlyhalo", + "message": "Odstránenie konfigurácie zlyhalo" + }, + "deleteFailedDefaultConfig": { + "title": "Predvolená konfigurácia sa nedá odstrániť", + "message": "Konfigurácia nebola odstránená zo systému súborov" + } + } + }, + "saveCopy": "Uložiť kópiu" + }, + "dropzone": { + "notifications": { + "invalidConfig": { + "title": "Nie je možné načítať konfiguráciu", + "message": "Nepodarilo sa načítať vašu konfiguráciu. Neplatný formát JSON." + }, + "loadedSuccessfully": { + "title": "Úspešné načítanie konfigurácie {{configName}}" + } + }, + "accept": { + "title": "Nahrávanie konfigurácie", + "text": "Ak chcete nahrať konfiguráciu, potiahnite sem súbory. Podpora len pre súbory JSON." + }, + "reject": { + "title": "Odmietnuté nahranie pomocou funkcie Drag and Drop", + "text": "Tento formát súboru nie je podporovaný. Nahrávajte len súbory JSON." + } + } +} diff --git a/public/locales/sk/settings/general/internationalization.json b/public/locales/sk/settings/general/internationalization.json new file mode 100644 index 000000000..d48b30890 --- /dev/null +++ b/public/locales/sk/settings/general/internationalization.json @@ -0,0 +1,3 @@ +{ + "label": "Jazyk" +} \ No newline at end of file diff --git a/public/locales/sk/settings/general/search-engine.json b/public/locales/sk/settings/general/search-engine.json new file mode 100644 index 000000000..8087221ec --- /dev/null +++ b/public/locales/sk/settings/general/search-engine.json @@ -0,0 +1,19 @@ +{ + "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á).", + "placeholderTip": "%s možno použiť ako zástupný symbol pre dotaz." + }, + "customEngine": { + "title": "Vlastný vyhľadávač", + "label": "Adresa URL dopytu", + "placeholder": "Adresa URL vlastného dopytu" + }, + "searchNewTab": { + "label": "Otvoriť výsledky vyhľadávania na novej karte" + }, + "searchEnabled": { + "label": "Vyhľadávanie povolené" + } +} diff --git a/public/locales/sk/settings/general/theme-selector.json b/public/locales/sk/settings/general/theme-selector.json new file mode 100644 index 000000000..b98fc22a6 --- /dev/null +++ b/public/locales/sk/settings/general/theme-selector.json @@ -0,0 +1,3 @@ +{ + "label": "Prepnite do {{theme}} režimu" +} \ No newline at end of file diff --git a/public/locales/sk/settings/general/widget-positions.json b/public/locales/sk/settings/general/widget-positions.json new file mode 100644 index 000000000..0892d638f --- /dev/null +++ b/public/locales/sk/settings/general/widget-positions.json @@ -0,0 +1,3 @@ +{ + "label": "Umiestni widgety vľavo" +} diff --git a/public/locales/sl/modules/dashdot.json b/public/locales/sl/modules/dashdot.json index 3a0564952..0184054f9 100644 --- a/public/locales/sl/modules/dashdot.json +++ b/public/locales/sl/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Dash. storitev ni bila najdena. Prosimo, dodajte jo na nadzorno ploščo Homarr ali nastavite Dash. URL naslov v možnostih modula", - "noInformation": "Ne morem pridobiti informacij iz Dash. - ali uporabljate najnovejšo različico?" + "noInformation": "Ne morem pridobiti informacij iz Dash. - ali uporabljate najnovejšo različico?", + "protocolDowngrade": { + "title": "", + "text": "" + } }, "graphs": { "storage": { diff --git a/public/locales/sv/modules/dashdot.json b/public/locales/sv/modules/dashdot.json index c56be2aca..40441c40c 100644 --- a/public/locales/sv/modules/dashdot.json +++ b/public/locales/sv/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Ingen Dash-tjänst hittades. Lägg till en i din Homarr-instrumentpanel eller ange en Dash. URL i modulalternativen.", - "noInformation": "Kan inte få information från dash. - Kör du den senaste versionen?" + "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)." + } }, "graphs": { "storage": { diff --git a/public/locales/uk/modules/dashdot.json b/public/locales/uk/modules/dashdot.json index bc60817e1..14ab03307 100644 --- a/public/locales/uk/modules/dashdot.json +++ b/public/locales/uk/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Dash. сервіс не знайдено. Будь ласка, додайте його до головної панелі чи встановіть Dash. URL в налаштуваннях модулю", - "noInformation": "Не вдалося отримати інформацію з Dash. - чи ви використовуєте останню версію?" + "noInformation": "Не вдалося отримати інформацію з Dash. - чи ви використовуєте останню версію?", + "protocolDowngrade": { + "title": "", + "text": "" + } }, "graphs": { "storage": { diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 95ad687d8..ed6a295dc 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -1,21 +1,21 @@ { "save": "Lưu", - "about": "", + "about": "Về chúng tôi", "cancel": "Hủy", - "close": "", + "close": "Đóng", "delete": "Xóa", - "ok": "", + "ok": "OK", "edit": "Sửa", - "version": "", - "changePosition": "", + "version": "Phiên bản", + "changePosition": "Đổi vị trí", "remove": "Xóa", - "removeConfirm": "", + "removeConfirm": "Bạn có chắc muốn xoá {{item}} ?", "sections": { "settings": "Cài đặt", "dangerZone": "Khu vực nguy hiểm" }, "secrets": { - "apiKey": "", + "apiKey": "Khóa 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 bd458a81f..de2c1d365 100644 --- a/public/locales/vi/layout/modals/about.json +++ b/public/locales/vi/layout/modals/about.json @@ -5,7 +5,7 @@ "metrics": { "configurationSchemaVersion": "", "configurationsCount": "", - "version": "", + "version": "Phiên bản", "nodeEnvironment": "", "i18n": "", "locales": "" diff --git a/public/locales/vi/modules/calendar.json b/public/locales/vi/modules/calendar.json index 713328420..fcaa077cf 100644 --- a/public/locales/vi/modules/calendar.json +++ b/public/locales/vi/modules/calendar.json @@ -5,7 +5,7 @@ "settings": { "title": "Cài đặt cho tiện ích lịch", "useSonarrv4": { - "label": "" + "label": "Dùng Sonarr v4 API" }, "sundayStart": { "label": "Đặt đầu tuần là Chủ Nhật" diff --git a/public/locales/vi/modules/common.json b/public/locales/vi/modules/common.json index 014084f9d..5189d85c8 100644 --- a/public/locales/vi/modules/common.json +++ b/public/locales/vi/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "" + "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." } } } diff --git a/public/locales/vi/modules/dashdot.json b/public/locales/vi/modules/dashdot.json index 2fdb2b81e..2e5f70ff9 100644 --- a/public/locales/vi/modules/dashdot.json +++ b/public/locales/vi/modules/dashdot.json @@ -20,7 +20,7 @@ "label": "URL của Dash." }, "usePercentages": { - "label": "" + "label": "Hiển thị phần trăm" } } }, @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "Dịch vụ Dash. không được tìm thấy. Vui lòng thêm nó vào bảng Homarr của bạn hoặc thiết lập một đường dẫn Dash. trong tuỳ chọn của mô-đun", - "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?" + "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ị)." + } }, "graphs": { "storage": { diff --git a/public/locales/vi/modules/dlspeed.json b/public/locales/vi/modules/dlspeed.json index 53a646394..45295446a 100644 --- a/public/locales/vi/modules/dlspeed.json +++ b/public/locales/vi/modules/dlspeed.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Tốc độ tải", - "description": "" + "description": "Hiện thị tốc độ tải xuống và tải lên của các tích hợp được hỗ trợ." }, "card": { "table": { diff --git a/public/locales/vi/modules/docker.json b/public/locales/vi/modules/docker.json index 59b46b1fa..6ebfe729a 100644 --- a/public/locales/vi/modules/docker.json +++ b/public/locales/vi/modules/docker.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Docker", - "description": "" + "description": "Cho phép bạn dễ dàng quản lý các khoang chứa docker." }, "search": { "placeholder": "Tìm kiếm bằng tên khoang chứa hoặc tên hình ảnh" @@ -25,8 +25,8 @@ }, "actionBar": { "addService": { - "title": "", - "message": "" + "title": "Thêm ứng dụng", + "message": "Thêm ứng dụng vào Homarr" }, "restart": { "title": "Khởi động lại" @@ -68,13 +68,13 @@ "errors": { "integrationFailed": { "title": "Tích hợp Docker thất bại", - "message": "" + "message": "Có phải bạn quên gắn ổ cắm docker không?" }, "unknownError": { "title": "Có lỗi xảy ra" }, "oneServiceAtATime": { - "title": "" + "title": "Vui lòng chỉ thêm từng dịch vụ một!" } }, "actionIcon": { diff --git a/public/locales/vi/modules/overseerr.json b/public/locales/vi/modules/overseerr.json index 797c59496..3066b733e 100644 --- a/public/locales/vi/modules/overseerr.json +++ b/public/locales/vi/modules/overseerr.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Overseerr", - "description": "" + "description": "Cho phép bạn tìm và thêm phương tiện truyền thông từ Overseerr hoặc Jellyseerr." }, "popup": { "item": { @@ -18,7 +18,7 @@ } }, "seasonSelector": { - "caption": "", + "caption": "Đánh dấu các mùa bạn muốn tải về", "table": { "header": { "season": "Mùa", diff --git a/public/locales/vi/modules/ping.json b/public/locales/vi/modules/ping.json index 5af9ed697..bc637ceb8 100644 --- a/public/locales/vi/modules/ping.json +++ b/public/locales/vi/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "" + "description": "Hiển thị chỉ báo trạng thái dựa trên mã phản hồi HTTP của URL được chỉ định." }, "states": { "online": "Trực tuyến {{response}}", diff --git a/public/locales/vi/modules/search.json b/public/locales/vi/modules/search.json index 7515274db..9dca3789b 100644 --- a/public/locales/vi/modules/search.json +++ b/public/locales/vi/modules/search.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Thanh tìm kiếm", - "description": "" + "description": "Thanh tìm kiếm cho phép bạn tìm kiếm công cụ tìm kiếm tùy chỉnh, YouTube và các tích hợp được hỗ trợ." }, "input": { "placeholder": "Tìm kiếm trên web..." @@ -10,7 +10,7 @@ "searchEngines": { "search": { "name": "Web", - "description": "" + "description": "Tìm kiếm..." }, "youtube": { "name": "YouTube", @@ -22,7 +22,7 @@ }, "overseerr": { "name": "Overseerr", - "description": "" + "description": "Tìm kiếm phim lẻ và phim bộ trên Overseerr" } }, "tip": "Bạn có thể chọn thanh tìm kiếm bằng phím tắt ", diff --git a/public/locales/vi/modules/torrents-status.json b/public/locales/vi/modules/torrents-status.json index a4ef84fa8..7dd69d3cd 100644 --- a/public/locales/vi/modules/torrents-status.json +++ b/public/locales/vi/modules/torrents-status.json @@ -1,24 +1,24 @@ { "descriptor": { "name": "Torrent", - "description": "", + "description": "Hiển thị danh sách torrent của các ứng dụng torrent được hỗ trợ.", "settings": { - "title": "", + "title": "Cài đặt cho tiện ích torrent", "refreshInterval": { - "label": "" + "label": "Khoảng thời gian làm mới (bằng giây)" }, "displayCompletedTorrents": { - "label": "" + "label": "Hiển thị torrent hoàn thành" }, "displayStaleTorrents": { - "label": "" + "label": "Hiển thị torrent hết hạn" } } }, "card": { "footer": { "error": "Lỗi", - "lastUpdated": "" + "lastUpdated": "Cập nhật cuối cách đây {{time}}" }, "table": { "header": { @@ -30,7 +30,7 @@ "progress": "Tiến độ" }, "item": { - "text": "" + "text": "Quản lý bởi {{appName}}, tỷ lệ {{ratio}}" }, "body": { "nothingFound": "Không tìm thấy torrent nào" @@ -46,26 +46,26 @@ }, "errors": { "noDownloadClients": { - "title": "", - "text": "" + "title": "Không tìm thấy ứng dụng torrent được hỗ trợ nào!", + "text": "Thêm ứng dụng torrent được hỗ trợ để xem các bản tải xuống hiện tại" }, "generic": { - "title": "", - "text": "" + "title": "Đã xảy ra lỗi không mong muốn", + "text": "Homarr không thể giao tiếp với ứng dụng torrent của bạn. Vui lòng kiểm tra lại cấu hình" } }, "loading": { "title": "Đang tải..." }, "popover": { - "introductionPrefix": "", + "introductionPrefix": "Quản lý bởi", "metrics": { - "queuePosition": "", - "progress": "", - "totalSelectedSize": "", - "state": "", - "ratio": "", - "completed": "" + "queuePosition": "Vị trí hàng đợi - {{position}}", + "progress": "Tiến độ - {{progress}}%", + "totalSelectedSize": "Tổng - {{totalSize}}", + "state": "Trạng thái - {{state}}", + "ratio": "Tỷ lệ -", + "completed": "Đã hoàn thành" } } } diff --git a/public/locales/vi/modules/usenet.json b/public/locales/vi/modules/usenet.json index cc0b9478b..1a423991b 100644 --- a/public/locales/vi/modules/usenet.json +++ b/public/locales/vi/modules/usenet.json @@ -1,13 +1,13 @@ { "descriptor": { "name": "Usenet", - "description": "" + "description": "Cho phép bạn xem và quản lý phiên bản Usenet của mình." }, "card": { "errors": { "noDownloadClients": { "title": "Không tìm thấy ứng dụng tải xuống được hỗ trợ nào!", - "text": "" + "text": "Thêm ứng dụng tải xuống Usenet được hỗ trợ để xem các bản tải xuống hiện tại" } } }, diff --git a/public/locales/vi/modules/weather.json b/public/locales/vi/modules/weather.json index 58c80242c..67f2d322e 100644 --- a/public/locales/vi/modules/weather.json +++ b/public/locales/vi/modules/weather.json @@ -1,9 +1,9 @@ { "descriptor": { "name": "Thời tiết", - "description": "", + "description": "Hiển thị thông tin thời tiết của vị trí được đặt.", "settings": { - "title": "", + "title": "Cài đặt cho tiện ích thời tiết", "displayInFahrenheit": { "label": "Hiển thị bằng Fahrenheit" }, diff --git a/public/locales/vi/settings/common.json b/public/locales/vi/settings/common.json index b35253c94..52e8a0709 100644 --- a/public/locales/vi/settings/common.json +++ b/public/locales/vi/settings/common.json @@ -13,7 +13,7 @@ "thirdPartyContent": "", "thirdPartyContentTable": { "dependencyName": "", - "dependencyVersion": "" + "dependencyVersion": "Phiên bản" } }, "grow": "Khung giãn (chiếm toàn bộ không gian)", diff --git a/public/locales/vi/settings/customization/color-selector.json b/public/locales/vi/settings/customization/color-selector.json index a9351916b..da9cfd971 100644 --- a/public/locales/vi/settings/customization/color-selector.json +++ b/public/locales/vi/settings/customization/color-selector.json @@ -1,3 +1,4 @@ { + "colors": "Màu", "suffix": "Màu {{color}}" } \ No newline at end of file diff --git a/public/locales/vi/settings/customization/general.json b/public/locales/vi/settings/customization/general.json index ee9d30b5a..28da46431 100644 --- a/public/locales/vi/settings/customization/general.json +++ b/public/locales/vi/settings/customization/general.json @@ -2,7 +2,7 @@ "text": "", "accordeon": { "layout": { - "name": "", + "name": "Bố cục", "description": "" }, "gridstack": { @@ -10,11 +10,11 @@ "description": "" }, "pageMetadata": { - "name": "", + "name": "Metadata trang", "description": "" }, "appereance": { - "name": "", + "name": "Hiển thị", "description": "" } } diff --git a/public/locales/vi/settings/customization/gridstack.json b/public/locales/vi/settings/customization/gridstack.json index 18c3d8233..af30d7355 100644 --- a/public/locales/vi/settings/customization/gridstack.json +++ b/public/locales/vi/settings/customization/gridstack.json @@ -5,6 +5,6 @@ "descriptionExceedsPreset": "" }, "unsavedChanges": "", - "applyChanges": "", - "defaultValues": "" + "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 dd5539671..dd2265cea 100644 --- a/public/locales/vi/settings/customization/page-appearance.json +++ b/public/locales/vi/settings/customization/page-appearance.json @@ -21,8 +21,8 @@ "customCSS": { "label": "CSS tuỳ chỉnh", "description": "", - "placeholder": "", - "applying": "" + "placeholder": "CSS tùy chỉnh sẽ được áp dụng sau cùng", + "applying": "Đang áp dụng CSS..." }, "buttons": { "submit": "Gửi" diff --git a/public/locales/vi/settings/general/config-changer.json b/public/locales/vi/settings/general/config-changer.json index 350d8d2a3..6ede7dab7 100644 --- a/public/locales/vi/settings/general/config-changer.json +++ b/public/locales/vi/settings/general/config-changer.json @@ -1,9 +1,9 @@ { "configSelect": { "label": "", - "description": "", - "loadingNew": "", - "pleaseWait": "" + "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!" }, "modal": { "copy": { @@ -12,8 +12,8 @@ "configName": { "label": "Tên cấu hình", "validation": { - "required": "", - "notUnique": "" + "required": "Tên cấu hình là bắt buộc", + "notUnique": "Tên cấu hình đã được sử dụng" }, "placeholder": "Tên cấu hình mới của bạn" }, @@ -25,17 +25,17 @@ "message": "Đã lưu cấu hình thành {{configName}}" }, "configCopied": { - "title": "", - "message": "" + "title": "Đã sao chép cấu hình", + "message": "Đã sao chép cấu hình thành {{configName}}" }, "configNotCopied": { - "title": "", - "message": "" + "title": "Không thể sao chép cấu hình", + "message": "Cấu hình chưa được sao chép thành {{configName}}" } } }, "confirmDeletion": { - "title": "", + "title": "Xác nhận xóa cấu hình của bạn", "warningText": "", "text": "", "buttons": { @@ -57,7 +57,7 @@ "message": "Xoá cấu hình thất bại" }, "deleteFailedDefaultConfig": { - "title": "", + "title": "Cấu hình mặc định không thể bị xoá", "message": "" } } diff --git a/public/locales/vi/settings/general/search-engine.json b/public/locales/vi/settings/general/search-engine.json index 1e93e7d6e..56e852475 100644 --- a/public/locales/vi/settings/general/search-engine.json +++ b/public/locales/vi/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Công cụ tìm kiếm", "configurationName": "Thiết lập công cụ tìm kiếm", "tips": { - "generalTip": "", + "generalTip": "Có nhiều tiền tố để bạn sử dụng đó! Thêm chúng vào trước truy vấn của bạn để lọc kết quả. !s (Web), !t (torrent), !y (YouTube), !m (đa phương tiện).", "placeholderTip": "%s có thể được sử dụng làm phần giữ chỗ cho truy vấn." }, "customEngine": { diff --git a/public/locales/vi/settings/general/widget-positions.json b/public/locales/vi/settings/general/widget-positions.json index 0967ef424..29bac0e71 100644 --- a/public/locales/vi/settings/general/widget-positions.json +++ b/public/locales/vi/settings/general/widget-positions.json @@ -1 +1,3 @@ -{} +{ + "label": "Đặt tiện ích ở bên trái" +} diff --git a/public/locales/zh/modules/dashdot.json b/public/locales/zh/modules/dashdot.json index 8ab72ec98..547fe75a1 100644 --- a/public/locales/zh/modules/dashdot.json +++ b/public/locales/zh/modules/dashdot.json @@ -28,7 +28,11 @@ "title": "Dash.", "errors": { "noService": "没有找到Dash.服务。请在你的Homarr仪表板上添加,或者设置一个仪表板网址。网址在应用选项中添加", - "noInformation": "无法从仪表板获取信息。- 你运行的是最新版本吗?" + "noInformation": "无法从仪表板获取信息。- 你运行的是最新版本吗?", + "protocolDowngrade": { + "title": "", + "text": "" + } }, "graphs": { "storage": { From 4f652c71ba97dc46ff0c6a970e092b24a83267be Mon Sep 17 00:00:00 2001 From: ajnart Date: Sat, 11 Feb 2023 08:58:09 +0900 Subject: [PATCH 13/23] Fix Zustand imports --- src/components/Dashboard/Views/useEditModeStore.ts | 2 +- src/components/Dashboard/Wrappers/gridstack/store.tsx | 2 +- src/config/store.ts | 2 +- src/pages/404.tsx | 10 ++++++++++ src/tools/client/zustands/usePackageAttributesStore.ts | 2 +- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/components/Dashboard/Views/useEditModeStore.ts b/src/components/Dashboard/Views/useEditModeStore.ts index 5c9fbafc2..121c07e4c 100644 --- a/src/components/Dashboard/Views/useEditModeStore.ts +++ b/src/components/Dashboard/Views/useEditModeStore.ts @@ -1,4 +1,4 @@ -import create from 'zustand'; +import { create } from 'zustand'; interface EditModeState { enabled: boolean; diff --git a/src/components/Dashboard/Wrappers/gridstack/store.tsx b/src/components/Dashboard/Wrappers/gridstack/store.tsx index 084d9de75..52a965bfd 100644 --- a/src/components/Dashboard/Wrappers/gridstack/store.tsx +++ b/src/components/Dashboard/Wrappers/gridstack/store.tsx @@ -1,5 +1,5 @@ import { useMantineTheme } from '@mantine/core'; -import create from 'zustand'; +import { create } from 'zustand'; import { useConfigContext } from '../../../../config/provider'; import { GridstackBreakpoints } from '../../../../constants/gridstack-breakpoints'; diff --git a/src/config/store.ts b/src/config/store.ts index a3a943030..7a6971344 100644 --- a/src/config/store.ts +++ b/src/config/store.ts @@ -1,5 +1,5 @@ import axios from 'axios'; -import create from 'zustand'; +import { create } from 'zustand'; import { ConfigType } from '../types/config'; export const useConfigStore = create((set, get) => ({ diff --git a/src/pages/404.tsx b/src/pages/404.tsx index 17c5b6966..aadf66175 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -9,6 +9,7 @@ import { } from '@mantine/core'; import React from 'react'; +import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import Link from 'next/link'; const useStyles = createStyles((theme) => ({ @@ -93,3 +94,12 @@ export default function Custom404() { ); } + +export async function getStaticProps({ locale }: { locale: string }) { + return { + props: { + ...(await serverSideTranslations(locale, ['common'])), + // Will be passed to the page component as props + }, + }; +} diff --git a/src/tools/client/zustands/usePackageAttributesStore.ts b/src/tools/client/zustands/usePackageAttributesStore.ts index 1949cacfd..da8ff398d 100644 --- a/src/tools/client/zustands/usePackageAttributesStore.ts +++ b/src/tools/client/zustands/usePackageAttributesStore.ts @@ -1,4 +1,4 @@ -import create from 'zustand'; +import { create } from 'zustand'; import { ServerSidePackageAttributesType } from '../../server/getPackageVersion'; From 1047b73d5842492d1c73bec5f410ab117dc49954 Mon Sep 17 00:00:00 2001 From: ajnart Date: Sat, 11 Feb 2023 09:07:34 +0900 Subject: [PATCH 14/23] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Add=20turbo=20build?= =?UTF-8?q?=20system?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + yarn.lock | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/package.json b/package.json index f8d6cb459..a925ba9e5 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "jest": "^28.1.3", "prettier": "^2.7.1", "sass": "^1.56.1", + "turbo": "^1.7.4", "typescript": "^4.7.4", "video.js": "^8.0.3" }, diff --git a/yarn.lock b/yarn.lock index b4382fc53..af9f4d7e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4989,6 +4989,7 @@ __metadata: react-simple-code-editor: ^0.13.1 sabnzbd-api: ^1.5.0 sass: ^1.56.1 + turbo: ^1.7.4 typescript: ^4.7.4 uuid: ^8.3.2 video.js: ^8.0.3 @@ -8354,6 +8355,77 @@ __metadata: languageName: node linkType: hard +"turbo-darwin-64@npm:1.7.4": + version: 1.7.4 + resolution: "turbo-darwin-64@npm:1.7.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"turbo-darwin-arm64@npm:1.7.4": + version: 1.7.4 + resolution: "turbo-darwin-arm64@npm:1.7.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"turbo-linux-64@npm:1.7.4": + version: 1.7.4 + resolution: "turbo-linux-64@npm:1.7.4" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"turbo-linux-arm64@npm:1.7.4": + version: 1.7.4 + resolution: "turbo-linux-arm64@npm:1.7.4" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"turbo-windows-64@npm:1.7.4": + version: 1.7.4 + resolution: "turbo-windows-64@npm:1.7.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"turbo-windows-arm64@npm:1.7.4": + version: 1.7.4 + resolution: "turbo-windows-arm64@npm:1.7.4" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"turbo@npm:^1.7.4": + version: 1.7.4 + resolution: "turbo@npm:1.7.4" + dependencies: + turbo-darwin-64: 1.7.4 + turbo-darwin-arm64: 1.7.4 + turbo-linux-64: 1.7.4 + turbo-linux-arm64: 1.7.4 + turbo-windows-64: 1.7.4 + turbo-windows-arm64: 1.7.4 + dependenciesMeta: + turbo-darwin-64: + optional: true + turbo-darwin-arm64: + optional: true + turbo-linux-64: + optional: true + turbo-linux-arm64: + optional: true + turbo-windows-64: + optional: true + turbo-windows-arm64: + optional: true + bin: + turbo: bin/turbo + checksum: c4387cfee36c57dd1490e9b2452888d8450faa390aec5bc148389b426bc079d03044891d61ad84a6a3a7454e66dfbe9e9cfba05f636b36fef7ece7af275ef9ce + languageName: node + linkType: hard + "tweetnacl@npm:^0.14.3": version: 0.14.5 resolution: "tweetnacl@npm:0.14.5" From f910e3fe97408dbf88bcef500db8257829a6f2dd Mon Sep 17 00:00:00 2001 From: ajnart Date: Sat, 11 Feb 2023 09:07:03 +0900 Subject: [PATCH 15/23] =?UTF-8?q?=F0=9F=90=9B=20Fix=20middleware?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/middleware.ts | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/middleware.ts b/src/middleware.ts index c0106cfab..7bcfe2611 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -2,19 +2,27 @@ import { NextFetchEvent, NextRequest, NextResponse } from 'next/server'; // eslint-disable-next-line consistent-return export function middleware(req: NextRequest, ev: NextFetchEvent) { - const isCorrectPassword = req.cookies.get('password')?.value === process.env.PASSWORD; + const { cookies } = req; + const passwordCookie = cookies.get('password')?.value; + const isCorrectPassword = passwordCookie?.toString() === process.env.PASSWORD; const url = req.nextUrl.clone(); - const skipURL = - url.pathname && - (url.pathname.includes('login') || - url.pathname === '/api/configs/tryPassword' || - (url.pathname.includes('/_next/') && !url.pathname.includes('/pages/')) || - url.pathname === '/favicon.ico' || - url.pathname === '/404' || - url.pathname === '/migrate' || - url.pathname.includes('pages/_app')); - if (!skipURL && !isCorrectPassword && process.env.PASSWORD) { + // Skip the middleware if the URL is 'login', 'api/configs/tryPassword', '_next/*', 'favicon.ico', '404', 'migrate' or 'pages/_app' + const skippedUrls = [ + '/login', + '/api/configs/tryPassword', + '/_next/', + '/favicon.ico', + '/404', + '/migrate', + '/pages/_app', + ]; + if (skippedUrls.some((skippedUrl) => url.pathname.startsWith(skippedUrl))) { + return NextResponse.next(); + } + // If the password is not correct, redirect to the login page + if (!isCorrectPassword && process.env.PASSWORD) { url.pathname = '/login'; return NextResponse.rewrite(url); } + return NextResponse.next(); } From 16a77cdf256375399b7da31afb98cf056323af2f Mon Sep 17 00:00:00 2001 From: ajnart Date: Sat, 11 Feb 2023 20:46:15 +0900 Subject: [PATCH 16/23] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Add?= =?UTF-8?q?=20developer=20settings=20in=20customizations=20tab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- next-i18next.config.js | 5 ++-- .../Customization/CustomizationAccordeon.tsx | 24 ++++++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/next-i18next.config.js b/next-i18next.config.js index 9364e6b38..097721344 100644 --- a/next-i18next.config.js +++ b/next-i18next.config.js @@ -32,7 +32,8 @@ module.exports = { fallbackLng: 'en', localeDetection: true, returnEmptyString: false, - debug: process.env.NODE_ENV === 'development', + debug: false, + appendNamespaceToCIMode: true, + reloadOnPrerender: process.env.NODE_ENV === 'development', }, - reloadOnPrerender: process.env.NODE_ENV === 'development', }; diff --git a/src/components/Settings/Customization/CustomizationAccordeon.tsx b/src/components/Settings/Customization/CustomizationAccordeon.tsx index 5aab48bdc..86e7c1d38 100644 --- a/src/components/Settings/Customization/CustomizationAccordeon.tsx +++ b/src/components/Settings/Customization/CustomizationAccordeon.tsx @@ -1,6 +1,6 @@ -import { Accordion, Grid, Group, Stack, Text } from '@mantine/core'; -import { IconBrush, IconChartCandle, IconDragDrop, IconLayout } from '@tabler/icons'; -import { useTranslation } from 'next-i18next'; +import { Accordion, Checkbox, Grid, Group, Stack, Switch, Text } from '@mantine/core'; +import { IconBrush, IconChartCandle, IconCode, IconDragDrop, IconLayout } from '@tabler/icons'; +import { i18n, useTranslation } from 'next-i18next'; import { ReactNode } from 'react'; import { GridstackConfiguration } from './Layout/GridstackConfiguration'; import { LayoutSelector } from './Layout/LayoutSelector'; @@ -113,5 +113,23 @@ const getItems = () => { ), }, + process.env.NODE_ENV === 'development' && { + id: 'dev', + image: , + label: 'Developer options', + description: 'Options to help when developing', + content: ( + + + // Change to CI mode language + i18n?.changeLanguage(e.target.checked ? 'cimode' : 'en') + } + /> + + ), + }, ]; }; From b76704076091ccb2760e8ce706b8a0c4486ff1df Mon Sep 17 00:00:00 2001 From: ajnart Date: Sat, 11 Feb 2023 20:47:52 +0900 Subject: [PATCH 17/23] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Improve=20middleware?= =?UTF-8?q?=20performance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit also aims to fix a bug when the password cookie is undefined --- src/middleware.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/middleware.ts b/src/middleware.ts index 7bcfe2611..79f85b693 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -3,9 +3,13 @@ import { NextFetchEvent, NextRequest, NextResponse } from 'next/server'; // eslint-disable-next-line consistent-return export function middleware(req: NextRequest, ev: NextFetchEvent) { const { cookies } = req; - const passwordCookie = cookies.get('password')?.value; - const isCorrectPassword = passwordCookie?.toString() === process.env.PASSWORD; + // Don't even bother with the middleware if there is no defined password + if (!process.env.PASSWORD) return NextResponse.next(); + const url = req.nextUrl.clone(); + const passwordCookie = cookies.get('password')?.value; + + const isCorrectPassword = passwordCookie?.toString() === process.env.PASSWORD; // Skip the middleware if the URL is 'login', 'api/configs/tryPassword', '_next/*', 'favicon.ico', '404', 'migrate' or 'pages/_app' const skippedUrls = [ '/login', From 725007f88f67da342d60a7cc1ef8a7feda93081c Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Sat, 11 Feb 2023 13:32:26 +0100 Subject: [PATCH 18/23] test html --- README.md | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e1f87c958..156909312 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ + +

@@ -42,7 +44,10 @@ Simplify the management of your server with Homarr - a sleek, modern dashboard t

-![](docs/section-features.png) + + + + - 🖌️ Highly customizeable with extensive drag and drop grid system - ✨ Integrates seamlessly with your favorite self-hosted applications - 📌 Easy and fast app management - no yaml involved @@ -58,8 +63,9 @@ Simplify the management of your server with Homarr - a sleek, modern dashboard t

-![](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 will integrate with the following applications of yours: @@ -87,14 +93,18 @@ We're constantly adding new integrations and widgets, which will enhance your ex

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

-![](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: @@ -106,7 +116,9 @@ Since we are developing Homarr very frequently, we recommend to read our officia

-![](docs/section-contribute.png) + + + Homarr is maintained by motivated developers in their free-time. We work for fun and learning on this project. From 9b53b49159cb046647e53ca859aa5c00297dcb09 Mon Sep 17 00:00:00 2001 From: Manuel <30572287+manuel-rw@users.noreply.github.com> Date: Sat, 11 Feb 2023 13:52:32 +0100 Subject: [PATCH 19/23] Update README.md --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 156909312..51fd82c9c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ - + @@ -44,7 +44,7 @@ Simplify the management of your server with Homarr - a sleek, modern dashboard t

- + @@ -63,7 +63,7 @@ Simplify the management of your server with Homarr - a sleek, modern dashboard t

- + 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. @@ -93,7 +93,7 @@ We're constantly adding new integrations and widgets, which will enhance your ex

- + @@ -102,7 +102,7 @@ https://user-images.githubusercontent.com/30572287/217098893-5880e7de-13d0-42c5-

- + @@ -116,7 +116,7 @@ Since we are developing Homarr very frequently, we recommend to read our officia

- + Homarr is maintained by motivated developers in their free-time. From 3e0cf2ded12c4df19a0387a427581748dcabb63b Mon Sep 17 00:00:00 2001 From: ajnart Date: Sat, 11 Feb 2023 23:18:48 +0900 Subject: [PATCH 20/23] =?UTF-8?q?=F0=9F=9A=91=20Hotfix=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Settings/Customization/CustomizationAccordeon.tsx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/Settings/Customization/CustomizationAccordeon.tsx b/src/components/Settings/Customization/CustomizationAccordeon.tsx index 86e7c1d38..70b8d29df 100644 --- a/src/components/Settings/Customization/CustomizationAccordeon.tsx +++ b/src/components/Settings/Customization/CustomizationAccordeon.tsx @@ -55,7 +55,7 @@ const getItems = () => { 'settings/customization/general', 'settings/customization/color-selector', ]); - return [ + const items = [ { id: 'layout', image: , @@ -113,7 +113,9 @@ const getItems = () => { ), }, - process.env.NODE_ENV === 'development' && { + ]; + if (process.env.NODE_ENV === 'development') { + items.push({ id: 'dev', image: , label: 'Developer options', @@ -130,6 +132,7 @@ const getItems = () => { /> ), - }, - ]; + }); + } + return items; }; From 89182ec4bc4284bd99e8a8a92892b16481d32403 Mon Sep 17 00:00:00 2001 From: Thomas Camlong <49837342+ajnart@users.noreply.github.com> Date: Sat, 11 Feb 2023 23:53:05 +0900 Subject: [PATCH 21/23] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 51fd82c9c..77362841e 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Simplify the management of your server with Homarr - a sleek, modern dashboard t -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. +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 will integrate with the following applications of yours: From 9929cf64ac9914a9c873f165fc575669220a24ce Mon Sep 17 00:00:00 2001 From: Thomas Camlong <49837342+ajnart@users.noreply.github.com> Date: Sat, 11 Feb 2023 23:56:55 +0900 Subject: [PATCH 22/23] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 77362841e..cb902754f 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,8 @@ Simplify the management of your server with Homarr - a sleek, modern dashboard t -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. + +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 will integrate with the following applications of yours: From 47ea22e4116ae008d4947f5b14b64072248ff1ff Mon Sep 17 00:00:00 2001 From: ajnart Date: Tue, 14 Feb 2023 09:23:45 +0900 Subject: [PATCH 23/23] =?UTF-8?q?=F0=9F=90=9B=20Fix=20dev=20settings=20ini?= =?UTF-8?q?tial=20state?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Settings/Customization/CustomizationAccordeon.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Settings/Customization/CustomizationAccordeon.tsx b/src/components/Settings/Customization/CustomizationAccordeon.tsx index 70b8d29df..26f39660a 100644 --- a/src/components/Settings/Customization/CustomizationAccordeon.tsx +++ b/src/components/Settings/Customization/CustomizationAccordeon.tsx @@ -124,6 +124,7 @@ const getItems = () => { // Change to CI mode language