diff --git a/.deepsource.toml b/.deepsource.toml new file mode 100644 index 000000000..3b8658213 --- /dev/null +++ b/.deepsource.toml @@ -0,0 +1,10 @@ +version = 1 + +[[analyzers]] +name = "javascript" + + [analyzers.meta] + plugins = ["react"] + +[[transformers]] +name = "prettier" \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index f9e126647..710ccb1ac 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,12 +2,12 @@ module.exports = { extends: [ 'mantine', 'plugin:@next/next/recommended', - 'plugin:jest/recommended', 'eslint:recommended', 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended', + 'plugin:vitest/recommended', ], - plugins: ['testing-library', 'jest', 'react-hooks', 'react', 'unused-imports'], + plugins: ['testing-library', 'react-hooks', 'react', 'unused-imports', 'vitest'], overrides: [ { files: ['**/?(*.)+(spec|test).[jt]s?(x)'], @@ -31,5 +31,12 @@ module.exports = { '@typescript-eslint/no-non-null-assertion': 'off', 'no-continue': 'off', 'linebreak-style': 0, + 'vitest/max-nested-describe': [ + 'error', + { + max: 3, + }, + ], + 'testing-library/no-node-access': ['error', { allowContainerFirstChild: true }], }, }; diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 55879bb7a..2e8c262ca 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -32,8 +32,15 @@ body: - type: textarea id: logs attributes: - label: Additional info - description: Logs? Screenshots? More info? + label: Logs + description: Provide your Homarr logs so we can investigate what's going on + validations: + required: true + - type: textarea + id: context + attributes: + label: Context + description: Screenshots? More info? validations: required: false - type: checkboxes @@ -42,9 +49,11 @@ body: label: Please tick the boxes description: Before submitting, please ensure that options: - - label: You've read the [docs](https://github.com/ajnart/homarr#readme) + - label: I confirm that I attached the proper logs required: true - - label: You've checked for [duplicate issues](https://github.com/ajnart/homarr/issues) + - label: I've read the [docs](https://github.com/ajnart/homarr#readme) required: true - - label: You've tried to debug yourself + - label: I've checked for [duplicate issues](https://github.com/ajnart/homarr/issues) + required: true + - label: I've tried to debug myself required: true diff --git a/.github/workflows/docker_dev.yml b/.github/workflows/docker_dev.yml index db5961ed4..d65cbea87 100644 --- a/.github/workflows/docker_dev.yml +++ b/.github/workflows/docker_dev.yml @@ -24,11 +24,14 @@ env: REGISTRY: ghcr.io # github.repository as / IMAGE_NAME: ${{ github.repository }} + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ secrets.TURBO_TEAM }} + jobs: # Push image to GitHub Packages. # See also https://docs.docker.com/docker-hub/builds/ - yarn_install_and_build: + yarn_install_and_build_dev: runs-on: ubuntu-latest permissions: packages: write @@ -67,7 +70,7 @@ jobs: - run: yarn install --immutable - - run: yarn build + - run: yarn turbo build - name: Docker meta if: github.event_name != 'pull_request' diff --git a/.gitignore b/.gitignore index 92b9ea013..991371dfe 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ yarn-debug.log* yarn-error.log* # local env files +.env .env.local .env.development.local .env.test.local @@ -32,6 +33,7 @@ yarn-error.log* # vercel .vercel +.turbo *.tsbuildinfo # storybook @@ -46,4 +48,7 @@ data/configs !.yarn/plugins !.yarn/releases !.yarn/sdks -!.yarn/versions \ No newline at end of file +!.yarn/versions + +#envfiles +.env \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 316feba89..b41812c26 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -104,3 +104,11 @@ Enhancement suggestions are tracked as [GitHub issues](https://github.com/ajnart Homarr uses [GitMoji](https://gitmoji.dev/). We would appreciate it if everyone keeps their commit messages withing these rulings. +### Tests + +> Components should be tested using unit tests. A unit is the smallest isolated part of the component. Unit tests must not have any dependencies and must be isolated. + +- Place testfiles directly at the root of the unit +- Only test a single unit of work inside a unit test +- You may test multiple units inside one test file +- Testnames do not begin with ``should`` or the unit name \ No newline at end of file diff --git a/README.md b/README.md index cb902754f..e0310f032 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,21 @@ - +![Banner](docs/banner.png)

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

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

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

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

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

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

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

- - - +![Contribute Section](docs/section-contribute.png) Homarr is maintained by motivated developers in their free-time. We work for fun and learning on this project. -Hence, we're glad for all help and support we can get. -Altough a donation is apprechiated, there are also other ways you can support us. +Hence, we're glad for all the help and support we can get. +Although a donation is appreciated, there are other ways you can support us. -[_![](https://cdn.ko-fi.com/cdn/kofi3.png?v=3)_](https://ko-fi.com/ajnart) +
+ + -You can also support us [translating the entire project in as many languages as possible](https://homarr.dev/docs/community/translations) or contribute directly to the code or documentation. +You can also support us [translating the entire project in as many languages as possible,](https://homarr.dev/docs/community/translations) or contribute directly to the code or documentation. **Please read our [Contribution Guidelines](/CONTRIBUTING.md)** -All contributions, regardless of their size or scope, are welcome and highly apprechiated! Thank you ❤️ +All contributions, regardless of their size or scope, are welcome and highly appreciated! Thank you ❤️ diff --git a/data/configs/default.json b/data/configs/default.json index 03aebc127..456206c17 100644 --- a/data/configs/default.json +++ b/data/configs/default.json @@ -1,387 +1,389 @@ { - "schemaVersion": 1, - "configProperties": { - "name": "default" - }, - "categories": [ - { - "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f", - "position": 1, - "name": "Welcome to Homarr 🎉", - "type": "category" + "schemaVersion": 1, + "configProperties": { + "name": "default" + }, + "categories": [ + { + "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f", + "position": 1, + "name": "Welcome to Homarr 🎉", + "type": "category" + } + ], + "wrappers": [ + { + "id": "default", + "position": 0 + }, + { + "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a326", + "position": 1 + } + ], + "apps": [ + { + "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a337", + "name": "Discord", + "url": "https://discord.com/invite/aCsmEV5RgA", + "behaviour": { + "onClickUrl": "https://discord.com/invite/aCsmEV5RgA", + "isOpeningNewTab": true, + "externalUrl": "https://discord.com/invite/aCsmEV5RgA" + }, + "network": { + "enabledStatusChecker": false, + "okStatus": [ + 200 + ] + }, + "appearance": { + "iconUrl": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/discord.png" + }, + "integration": { + "type": null, + "properties": [] + }, + "area": { + "type": "category", + "properties": { + "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f" + } + }, + "shape": { + "md": { + "location": { + "x": 3, + "y": 1 + }, + "size": { + "width": 3, + "height": 1 + } + }, + "sm": { + "location": { + "x": 2, + "y": 1 + }, + "size": { + "width": 1, + "height": 1 + } + }, + "lg": { + "location": { + "x": 2, + "y": 1 + }, + "size": { + "width": 1, + "height": 1 + } + } + } + }, + { + "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a990", + "name": "Donate", + "url": "https://ko-fi.com/ajnart", + "behaviour": { + "onClickUrl": "https://ko-fi.com/ajnart", + "externalUrl": "https://ko-fi.com/ajnart", + "isOpeningNewTab": true + }, + "network": { + "enabledStatusChecker": false, + "okStatus": [ + 200 + ] + }, + "appearance": { + "iconUrl": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/ko-fi.png" + }, + "integration": { + "type": null, + "properties": [] + }, + "area": { + "type": "category", + "properties": { + "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f" + } + }, + "shape": { + "md": { + "location": { + "x": 2, + "y": 1 + }, + "size": { + "width": 1, + "height": 1 + } + }, + "sm": { + "location": { + "x": 2, + "y": 2 + }, + "size": { + "width": 1, + "height": 1 + } + }, + "lg": { + "location": { + "x": 3, + "y": 1 + }, + "size": { + "width": 1, + "height": 1 + } + } + } + }, + { + "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a330", + "name": "Contribute", + "url": "https://github.com/ajnart/homarr", + "behaviour": { + "onClickUrl": "https://github.com/ajnart/homarr", + "externalUrl": "https://github.com/ajnart/homarr", + "isOpeningNewTab": true + }, + "network": { + "enabledStatusChecker": false, + "okStatus": [] + }, + "appearance": { + "iconUrl": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/github.png" + }, + "integration": { + "type": null, + "properties": [] + }, + "area": { + "type": "category", + "properties": { + "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f" + } + }, + "shape": { + "md": { + "location": { + "x": 2, + "y": 0 + }, + "size": { + "width": 2, + "height": 1 + } + }, + "sm": { + "location": { + "x": 0, + "y": 2 + }, + "size": { + "width": 2, + "height": 1 + } + }, + "lg": { + "location": { + "x": 4, + "y": 0 + }, + "size": { + "width": 2, + "height": 2 + } + } + } + }, + { + "id": "5df743d9-5cb1-457c-85d2-64ff86855652", + "name": "Documentation", + "url": "https://homarr.dev", + "behaviour": { + "onClickUrl": "https://homarr.dev", + "externalUrl": "https://homarr.dev", + "isOpeningNewTab": true + }, + "network": { + "enabledStatusChecker": false, + "okStatus": [ + 200 + ] + }, + "appearance": { + "iconUrl": "/imgs/logo/logo.png" + }, + "integration": { + "type": null, + "properties": [] + }, + "area": { + "type": "category", + "properties": { + "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f" + } + }, + "shape": { + "md": { + "location": { + "x": 0, + "y": 1 + }, + "size": { + "width": 2, + "height": 1 + } + }, + "sm": { + "location": { + "x": 0, + "y": 0 + }, + "size": { + "width": 1, + "height": 1 + } + }, + "lg": { + "location": { + "x": 0, + "y": 1 + }, + "size": { + "width": 2, + "height": 1 + } + } + } + } + ], + "widgets": [ + { + "id": "971aa859-8570-49a1-8d34-dd5c7b3638d1", + "type": "date", + "properties": { + "display24HourFormat": true + }, + "area": { + "type": "category", + "properties": { + "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f" + } + }, + "shape": { + "sm": { + "location": { + "x": 0, + "y": 1 + }, + "size": { + "width": 2, + "height": 1 + } + }, + "md": { + "location": { + "x": 4, + "y": 0 + }, + "size": { + "width": 2, + "height": 1 + } + }, + "lg": { + "location": { + "x": 2, + "y": 0 + }, + "size": { + "width": 2, + "height": 1 + } + } + } + }, + { + "id": "e3004052-6b83-480e-b458-56e8ccdca5f0", + "type": "weather", + "properties": { + "displayInFahrenheit": false, + "location": "Paris" + }, + "area": { + "type": "category", + "properties": { + "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f" + } + }, + "shape": { + "md": { + "location": { + "x": 0, + "y": 0 + }, + "size": { + "width": 2, + "height": 1 + } + }, + "sm": { + "location": { + "x": 1, + "y": 0 + }, + "size": { + "width": 2, + "height": 1 + } + }, + "lg": { + "location": { + "x": 0, + "y": 0 + }, + "size": { + "width": 2, + "height": 1 + } + } + } + } + ], + "settings": { + "common": { + "searchEngine": { + "type": "google", + "properties": {} + } + }, + "customization": { + "layout": { + "enabledLeftSidebar": false, + "enabledRightSidebar": false, + "enabledDocker": false, + "enabledPing": false, + "enabledSearchbar": true + }, + "pageTitle": "Homarr v0.11 ⭐️", + "logoImageUrl": "/imgs/logo/logo.png", + "faviconUrl": "/imgs/favicon/favicon-squared.png", + "backgroundImageUrl": "", + "customCss": "", + "colors": { + "primary": "red", + "secondary": "yellow", + "shade": 7 + }, + "appOpacity": 100 + } } - ], - "wrappers": [ - { - "id": "default", - "position": 0 - }, - { - "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a326", - "position": 1 - } - ], - "apps": [ - { - "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a337", - "name": "Discord", - "url": "https://discord.com/invite/aCsmEV5RgA", - "behaviour": { - "onClickUrl": "https://discord.com/invite/aCsmEV5RgA", - "isOpeningNewTab": true, - "externalUrl": "https://discord.com/invite/aCsmEV5RgA" - }, - "network": { - "enabledStatusChecker": false, - "okStatus": [ - 200 - ] - }, - "appearance": { - "iconUrl": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/discord.png" - }, - "integration": { - "type": null, - "properties": [] - }, - "area": { - "type": "category", - "properties": { - "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f" - } - }, - "shape": { - "md": { - "location": { - "x": 3, - "y": 1 - }, - "size": { - "width": 3, - "height": 1 - } - }, - "sm": { - "location": { - "x": 2, - "y": 1 - }, - "size": { - "width": 1, - "height": 1 - } - }, - "lg": { - "location": { - "x": 2, - "y": 1 - }, - "size": { - "width": 1, - "height": 1 - } - } - } - }, - { - "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a990", - "name": "Donate", - "url": "https://ko-fi.com/ajnart", - "behaviour": { - "onClickUrl": "https://ko-fi.com/ajnart", - "externalUrl": "https://ko-fi.com/ajnart", - "isOpeningNewTab": true - }, - "network": { - "enabledStatusChecker": false, - "okStatus": [ - 200 - ] - }, - "appearance": { - "iconUrl": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/ko-fi.png" - }, - "integration": { - "type": null, - "properties": [] - }, - "area": { - "type": "category", - "properties": { - "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f" - } - }, - "shape": { - "md": { - "location": { - "x": 2, - "y": 1 - }, - "size": { - "width": 1, - "height": 1 - } - }, - "sm": { - "location": { - "x": 2, - "y": 2 - }, - "size": { - "width": 1, - "height": 1 - } - }, - "lg": { - "location": { - "x": 3, - "y": 1 - }, - "size": { - "width": 1, - "height": 1 - } - } - } - }, - { - "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a330", - "name": "Contribute", - "url": "https://github.com/ajnart/homarr", - "behaviour": { - "onClickUrl": "https://github.com/ajnart/homarr", - "externalUrl": "https://github.com/ajnart/homarr", - "isOpeningNewTab": true - }, - "network": { - "enabledStatusChecker": false, - "okStatus": [] - }, - "appearance": { - "iconUrl": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/github.png" - }, - "integration": { - "type": null, - "properties": [] - }, - "area": { - "type": "category", - "properties": { - "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f" - } - }, - "shape": { - "md": { - "location": { - "x": 2, - "y": 0 - }, - "size": { - "width": 2, - "height": 1 - } - }, - "sm": { - "location": { - "x": 0, - "y": 2 - }, - "size": { - "width": 2, - "height": 1 - } - }, - "lg": { - "location": { - "x": 4, - "y": 0 - }, - "size": { - "width": 2, - "height": 2 - } - } - } - }, - { - "id": "5df743d9-5cb1-457c-85d2-64ff86855652", - "name": "Documentation", - "url": "https://homarr.dev", - "behaviour": { - "onClickUrl": "https://homarr.dev", - "externalUrl": "https://homarr.dev", - "isOpeningNewTab": true - }, - "network": { - "enabledStatusChecker": false, - "okStatus": [ - 200 - ] - }, - "appearance": { - "iconUrl": "/imgs/logo/logo.png" - }, - "integration": { - "type": null, - "properties": [] - }, - "area": { - "type": "category", - "properties": { - "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f" - } - }, - "shape": { - "md": { - "location": { - "x": 0, - "y": 1 - }, - "size": { - "width": 2, - "height": 1 - } - }, - "sm": { - "location": { - "x": 0, - "y": 0 - }, - "size": { - "width": 1, - "height": 1 - } - }, - "lg": { - "location": { - "x": 0, - "y": 1 - }, - "size": { - "width": 2, - "height": 1 - } - } - } - } - ], - "widgets": [ - { - "id": "date", - "properties": { - "display24HourFormat": true - }, - "area": { - "type": "category", - "properties": { - "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f" - } - }, - "shape": { - "sm": { - "location": { - "x": 0, - "y": 1 - }, - "size": { - "width": 2, - "height": 1 - } - }, - "md": { - "location": { - "x": 4, - "y": 0 - }, - "size": { - "width": 2, - "height": 1 - } - }, - "lg": { - "location": { - "x": 2, - "y": 0 - }, - "size": { - "width": 2, - "height": 1 - } - } - } - }, - { - "id": "weather", - "properties": { - "displayInFahrenheit": false, - "location": "Paris" - }, - "area": { - "type": "category", - "properties": { - "id": "47af36c0-47c1-4e5b-bfc7-ad645ee6a33f" - } - }, - "shape": { - "md": { - "location": { - "x": 0, - "y": 0 - }, - "size": { - "width": 2, - "height": 1 - } - }, - "sm": { - "location": { - "x": 1, - "y": 0 - }, - "size": { - "width": 2, - "height": 1 - } - }, - "lg": { - "location": { - "x": 0, - "y": 0 - }, - "size": { - "width": 2, - "height": 1 - } - } - } - } - ], - "settings": { - "common": { - "searchEngine": { - "type": "google", - "properties": {} - } - }, - "customization": { - "layout": { - "enabledLeftSidebar": false, - "enabledRightSidebar": false, - "enabledDocker": false, - "enabledPing": false, - "enabledSearchbar": true - }, - "pageTitle": "Homarr v0.11 ⭐️", - "logoImageUrl": "/imgs/logo/logo.png", - "faviconUrl": "/imgs/favicon/favicon-squared", - "backgroundImageUrl": "", - "customCss": "", - "colors": { - "primary": "red", - "secondary": "yellow", - "shade": 7 - }, - "appOpacity": 100 - } - } -} \ No newline at end of file +} diff --git a/next-i18next.config.js b/next-i18next.config.js index 097721344..d39ce661f 100644 --- a/next-i18next.config.js +++ b/next-i18next.config.js @@ -28,12 +28,12 @@ module.exports = { 'sk', 'no', ], - localePath: path.resolve('./public/locales'), - fallbackLng: 'en', + localeDetection: true, - returnEmptyString: false, - debug: false, - appendNamespaceToCIMode: true, - reloadOnPrerender: process.env.NODE_ENV === 'development', }, + returnEmptyString: false, + appendNamespaceToCIMode: true, + reloadOnPrerender: process.env.NODE_ENV === 'development', + fallbackLng: 'en', + localePath: path.resolve('./public/locales'), }; diff --git a/package.json b/package.json index c398dc5cc..7cca6a3d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homarr", - "version": "0.11.5", + "version": "0.12.0", "description": "Homarr - A homepage for your server.", "license": "MIT", "repository": { @@ -11,38 +11,44 @@ "dev": "next dev", "build": "next build", "analyze": "ANALYZE=true next build", + "turbo": "turbo run build", "start": "next start", "typecheck": "tsc --noEmit", "export": "next build && next export", "lint": "next lint", - "jest": "jest", - "jest:watch": "jest --watch", "prettier:check": "prettier --check \"**/*.{ts,tsx}\"", "prettier:write": "prettier --write \"**/*.{ts,tsx}\"", - "test": "npm run prettier:check && npm run lint && npm run typecheck && npm run jest", - "ci": "yarn test && yarn lint --fix && yarn typecheck && yarn prettier:write" + "test": "vitest", + "test:ui": "vitest --ui", + "test:run": "vitest run", + "test:coverage": "vitest run --coverage" }, "dependencies": { "@ctrl/deluge": "^4.1.0", "@ctrl/qbittorrent": "^4.1.0", "@ctrl/shared-torrent": "^4.1.1", "@ctrl/transmission": "^4.1.1", - "@emotion/react": "^11.10.5", + "@emotion/react": "^11.10.6", "@emotion/server": "^11.10.0", "@jellyfin/sdk": "^0.7.0", - "@mantine/core": "^5.9.3", - "@mantine/dates": "^5.9.3", - "@mantine/dropzone": "^5.9.3", - "@mantine/form": "^5.9.3", - "@mantine/hooks": "^5.9.3", - "@mantine/modals": "^5.9.3", - "@mantine/next": "^5.9.3", - "@mantine/notifications": "^5.9.3", + "@mantine/core": "^6.0.0", + "@mantine/dates": "^6.0.0", + "@mantine/dropzone": "^6.0.0", + "@mantine/form": "^6.0.0", + "@mantine/hooks": "^6.0.0", + "@mantine/modals": "^6.0.0", + "@mantine/next": "^6.0.0", + "@mantine/notifications": "^6.0.0", "@nivo/core": "^0.80.0", "@nivo/line": "^0.80.0", + "@react-native-async-storage/async-storage": "^1.18.1", "@tabler/icons": "^1.106.0", + "@tanstack/query-async-storage-persister": "^4.27.1", + "@tanstack/query-sync-storage-persister": "^4.27.1", "@tanstack/react-query": "^4.2.1", "@tanstack/react-query-devtools": "^4.24.4", + "@tanstack/react-query-persist-client": "^4.28.0", + "@vitejs/plugin-react": "^3.1.0", "axios": "^0.27.2", "consola": "^2.15.3", "cookies-next": "^2.1.1", @@ -53,7 +59,7 @@ "html-entities": "^2.3.3", "i18next": "^21.9.1", "js-file-download": "^0.4.12", - "next": "^13.1.6", + "next": "^13.2.1", "next-i18next": "^11.3.0", "nzbget-api": "^0.0.3", "prismjs": "^1.29.0", @@ -65,11 +71,14 @@ "uuid": "^8.3.2", "xml-js": "^1.6.11", "yarn": "^1.22.19", + "zod": "^3.21.4", "zustand": "^4.1.4" }, "devDependencies": { "@next/bundle-analyzer": "^12.1.4", "@next/eslint-plugin-next": "^12.1.4", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^14.0.0", "@types/dockerode": "^3.3.9", "@types/node": "17.0.1", "@types/prismjs": "^1.26.0", @@ -78,23 +87,28 @@ "@types/video.js": "^7.3.51", "@typescript-eslint/eslint-plugin": "^5.30.7", "@typescript-eslint/parser": "^5.30.7", + "@vitest/coverage-c8": "^0.29.3", + "@vitest/ui": "^0.29.3", "eslint": "^8.20.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-typescript": "^17.0.0", "eslint-config-mantine": "^2.0.0", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jest": "^26.6.0", "eslint-plugin-jsx-a11y": "^6.6.1", "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-testing-library": "^5.5.1", "eslint-plugin-unused-imports": "^2.0.0", - "jest": "^28.1.3", + "eslint-plugin-vitest": "^0.0.54", + "happy-dom": "^8.9.0", + "node-mocks-http": "^1.12.2", "prettier": "^2.7.1", "sass": "^1.56.1", - "turbo": "^1.7.4", + "turbo": "latest", "typescript": "^4.7.4", - "video.js": "^8.0.3" + "video.js": "^8.0.3", + "vitest": "^0.29.3", + "vitest-fetch-mock": "^0.2.2" }, "resolutions": { "@types/react": "17.0.2", diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 1f3ca957f..d10ded8fb 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -9,7 +9,8 @@ "version": "Version", "changePosition": "Ændre placering", "remove": "Fjern", - "removeConfirm": "Er du sikker på, at du ønsker at fjerne {{item}} ?", + "removeConfirm": "Er du sikker på, at du ønsker at fjerne {{item}}?", + "createItem": "+ opret {{item}}", "sections": { "settings": "Indstillinger", "dangerZone": "Farezone" diff --git a/public/locales/da/layout/modals/about.json b/public/locales/da/layout/modals/about.json index e6023ce8e..903422b8c 100644 --- a/public/locales/da/layout/modals/about.json +++ b/public/locales/da/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr er et elegant, moderne dashboard, der giver dig alle dine apps og tjenester lige ved hånden. Med Homarr kan du få adgang til og styre alt på ét praktisk sted. Homarr integrerer problemfrit med de apps, du har tilføjet, og giver dig værdifulde oplysninger og fuld kontrol. Installationen er en leg, og Homarr understøtter en lang række implementeringsmetoder.", "contact": "Har du problemer eller spørgsmål? Kontakt os!", "addToDashboard": "Tilføj til dashboard", + "tip": "Mod henviser til din modificeringstast, det er Ctrl og Command/Super/Windows-tasten", + "key": "Genvejstast", + "action": "Handling", + "keybinds": "Genvejstaster", "metrics": { "configurationSchemaVersion": "Konfigurationsskema version", "configurationsCount": "Tilgængelige konfigurationer", diff --git a/public/locales/da/layout/modals/add-app.json b/public/locales/da/layout/modals/add-app.json index 8056ba346..9736d729d 100644 --- a/public/locales/da/layout/modals/add-app.json +++ b/public/locales/da/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "App Ikon", - "description": "Vælg et ikon der skal vises på dit dashboard. Vælg mellem {{suggestionsCount}} ikoner eller indtast din egen URL", + "description": "", "autocomplete": { "title": "Ingen resultater fundet", "text": "Prøv at bruge et mere specifikt søgeord. Hvis du ikke kan finde det ønskede ikon, kan du indsætte billedets URL ovenfor for at få et brugerdefineret ikon" diff --git a/public/locales/da/modules/common.json b/public/locales/da/modules/common.json index 68d59d38a..2a501ced2 100644 --- a/public/locales/da/modules/common.json +++ b/public/locales/da/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Der er fundet en ubrugt parameter i konfigurationen
{{key}}. Homarr kan ikke fortolke og bruge denne parameter. For at undgå uventet adfærd skal du sikkerhedskopiere din konfiguration og rette konfigurationen." + "text": "" } } } diff --git a/public/locales/da/modules/dashdot.json b/public/locales/da/modules/dashdot.json index c57bf2a35..42b20b855 100644 --- a/public/locales/da/modules/dashdot.json +++ b/public/locales/da/modules/dashdot.json @@ -85,7 +85,7 @@ "noInformation": "Kan ikke hente information fra dash. - kører du den nyeste version?", "protocolDowngrade": { "title": "Registreret protokolnedgradering", - "text": "Protokollen til din Dash. instans bliver nedgraderet. Dette er sikkerhedsrisiko, da HTTP er ukrypteret og angribere kunne misbruge denne forbindelse. Sørg for, at Dash. kører på HTTPS også eller nedgraderer Homarr til HTTP (anbefales ikke)." + "text": "Forbindelsen til din Dash.-instans bruger HTTP. Dette er en sikkerhedsrisiko, fordi HTTP er ukrypteret, og angribere kan misbruge denne forbindelse. Sørg for, at Dash. bruger HTTPS, eller nedgrader Homarr til HTTP (anbefales ikke)." } }, "graphs": { diff --git a/public/locales/da/modules/iframe.json b/public/locales/da/modules/iframe.json index 986709f9d..df3f07a90 100644 --- a/public/locales/da/modules/iframe.json +++ b/public/locales/da/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "indlejret dokument (iframe)", "description": "Indlejr ethvert indhold fra internettet. Nogle websteder kan begrænse adgang.", "settings": { - "title": "IFrame indstillinger", + "title": "iFrame indstillinger", "embedUrl": { "label": "Indlejr URL" }, @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Indtast URL", + "title": "", "text": "Sørg for, at du har indtastet en gyldig adresse i konfigurationen af din widget" } } diff --git a/public/locales/da/modules/media-requests-list.json b/public/locales/da/modules/media-requests-list.json new file mode 100644 index 000000000..bb2e0ddff --- /dev/null +++ b/public/locales/da/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Medieforespørgsler", + "description": "Se en liste over alle medieforespørgsler fra din Overseerr eller Jellyseerr instans", + "settings": { + "title": "Liste over medieforespørgsler" + } + }, + "noRequests": "Ingen anmodninger fundet. Kontroller, at du har konfigureret dine apps korrekt.", + "pending": "Der er {countPendingApproval} anmodninger, der venter på godkendelse.", + "nonePending": "Der er i øjeblikket ingen godkendelser, der er under behandling. Du er i mål!", + "state": { + "approved": "Godkendt", + "pendingApproval": "Afventer godkendelse", + "declined": "Afvist" + } +} diff --git a/public/locales/da/modules/media-requests-stats.json b/public/locales/da/modules/media-requests-stats.json new file mode 100644 index 000000000..572bce8b7 --- /dev/null +++ b/public/locales/da/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Statistik for medieanmodning", + "description": "Statistik over dine medieanmodninger", + "settings": { + "title": "Statistikker over medieanmodninger" + } + }, + "stats": { + "pending": "Afventer godkendelse", + "tvRequests": "TV-anmodninger", + "movieRequests": "Film anmodninger" + } +} diff --git a/public/locales/da/modules/ping.json b/public/locales/da/modules/ping.json index c8ca496cd..96be60b4f 100644 --- a/public/locales/da/modules/ping.json +++ b/public/locales/da/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "Viser en statusindikator afhængig af HTTP-svarkoden for en given URL." + "description": "Viser en statusindikator afhængigt af HTTP-svarkoden for en given URL." }, "states": { "online": "Online {{response}}", diff --git a/public/locales/da/modules/rss.json b/public/locales/da/modules/rss.json index 010afb4c9..32caf93c0 100644 --- a/public/locales/da/modules/rss.json +++ b/public/locales/da/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "RSS Widget", - "description": "Griber elementerne fra et RSS-feed og viser dem. Anvendes normalt til online-nyheder", + "description": "", "settings": { "title": "Indstillinger for RSS-widget", "rssFeedUrl": { - "label": "RSS-feed url" + "label": "RSS feeds URL'er", + "description": "URL'erne for de RSS-feeds, du vil vise fra." + }, + "refreshInterval": { + "label": "Opdateringsinterval (i minutter)" } - } - }, - "card": { - "errors": { - "general": { - "title": "Det er ikke muligt at hente RSS-feed", - "text": "Der var et problem med at nå ud til RSS-feedet. Sørg for, at du'har konfigureret feedet korrekt og bruger en gyldig RSS-url, der passer til den officielle standardspecifikation. Når du har opdateret feed'et, skal du muligvis gemme dit dashboard og opdatere siden." + }, + "card": { + "errors": { + "general": { + "title": "Det er ikke muligt at hente RSS-feed", + "text": "Der var et problem med at hente RSS-feedet. Sørg for, at du har konfigureret RSS-feedet korrekt ved hjælp af en gyldig URL. URL'er skal stemme overens med den officielle specifikation. Når du har opdateret feed'et, skal du muligvis opdatere dashboardet." + } } } } diff --git a/public/locales/da/modules/video-stream.json b/public/locales/da/modules/video-stream.json index 7319cf36d..03317a7e4 100644 --- a/public/locales/da/modules/video-stream.json +++ b/public/locales/da/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "Indstillinger for video stream widget", "FeedUrl": { - "label": "Feed url" + "label": "Feed URL" }, "autoPlay": { - "label": "Automatisk afspilning" + "label": "Auto-afspilning" }, "muted": { "label": "Slå lyden fra" diff --git a/public/locales/da/settings/customization/page-appearance.json b/public/locales/da/settings/customization/page-appearance.json index 43d2fba2a..bd66eef79 100644 --- a/public/locales/da/settings/customization/page-appearance.json +++ b/public/locales/da/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Metatitel", - "description": "Titlen, der vises som dit fanebladsnavn" + "description": "Den titel, der vises i fanen i din browser" }, "logo": { "label": "Logo", - "description": "Dashboard-logoet øverst til venstre" + "description": "Logoet, der vises øverst til venstre" }, "favicon": { "label": "Favicon", - "description": "Ikonet, der bruges foran dit fanebladsnavn" + "description": "Det ikon, der vises i fanen i din browser" }, "background": { "label": "Baggrund" }, "customCSS": { "label": "Tilpasset CSS", - "description": "Tilpas alle elementer på dit dashboard, kun anbefalet til erfarne brugere", + "description": "Yderligere, tilpasse dit dashboard ved hjælp af CSS, anbefales kun til erfarne brugere", "placeholder": "Brugerdefineret CSS vil blive anvendt sidst", "applying": "Anvender CSS..." }, diff --git a/public/locales/da/widgets/error-boundary.json b/public/locales/da/widgets/error-boundary.json new file mode 100644 index 000000000..dda1952ce --- /dev/null +++ b/public/locales/da/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ups, der opstod en fejl!", + "buttons": { + "details": "Detaljer", + "tryAgain": "Prøv igen" + } + }, + "modal": { + "text": "", + "label": "Din fejl", + "reportButton": "Rapportér denne fejl" + } +} \ No newline at end of file diff --git a/public/locales/de/common.json b/public/locales/de/common.json index cdaf5abfb..cf39f324d 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -10,12 +10,13 @@ "changePosition": "Position wechseln", "remove": "Entfernen", "removeConfirm": "Sind Sie sicher, dass Sie {{item}} entfernen möchten?", + "createItem": "+ erstelle {{item}}", "sections": { "settings": "Einstellungen", "dangerZone": "Gefahrenzone" }, "secrets": { - "apiKey": "API-Schlüssel", + "apiKey": "API Schlüssel", "username": "Benutzername", "password": "Passwort" }, diff --git a/public/locales/de/layout/modals/about.json b/public/locales/de/layout/modals/about.json index 3c9ef88c0..64876f69b 100644 --- a/public/locales/de/layout/modals/about.json +++ b/public/locales/de/layout/modals/about.json @@ -1,7 +1,11 @@ { - "description": "Homarr ist ein schlankes, modernes Dashboard, das alle Ihre Apps und Dienste auf Knopfdruck zur Verfügung stellt. Mittels Homarr können Sie von einem einzigen Ort aus auf alles zugreifen und steuern. Es lässt sich nahtlos in die von Ihnen bevorzugten Apps integrieren und versorgt Sie mit wertvollen Informationen und der vollständige Kontrolle. Die Installation ist ein Kinderspiel, und es werden eine breite Palette von Konfigurations unterstützt.", + "description": "Homarr ist ein schlankes und modernes Dashboard, das alle Ihre Apps und Dienste auf Knopfdruck zur Verfügung stellt. Mittels Homarr können Sie von einem einzigen Ort aus auf alles zugreifen und steuern. Es lässt sich nahtlos in die von Ihnen bevorzugten Apps integrieren und versorgt Sie mit wertvollen Informationen und der vollständige Kontrolle. Die Installation ist ein Kinderspiel, und es werden eine breite Palette von Konfigurations unterstützt.", "contact": "Haben Sie Probleme oder Fragen? Nehmen Sie Kontakt mit uns auf!", "addToDashboard": "Zum Dashboard hinzufügen", + "tip": "Mod bezieht sich auf die Modifikator Taste, d. h. Strg und Befehl/Super/Windows-Taste", + "key": "Kurzbefehl Taste", + "action": "Aktion", + "keybinds": "Tastenbelegung", "metrics": { "configurationSchemaVersion": "Version des Konfigurationsschemas", "configurationsCount": "Verfügbare Konfigurationen", diff --git a/public/locales/de/layout/modals/add-app.json b/public/locales/de/layout/modals/add-app.json index cbb0cad05..c3503d412 100644 --- a/public/locales/de/layout/modals/add-app.json +++ b/public/locales/de/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "App Symbol", - "description": "Wählen Sie ein Symbol, das auf Ihrem Dashboard angezeigt werden soll. Wählen Sie aus {{suggestionsCount}} Icons oder geben Sie Ihre eigene URL ein", + "description": "", "autocomplete": { "title": "Die Suche ergab keine Treffer", "text": "Versuchen Sie, einen spezifischeren Suchbegriff zu verwenden. Wenn Sie das gewünschte Symbol nicht finden können, fügen Sie die obige Bild-URL für ein benutzerdefiniertes Symbol ein" diff --git a/public/locales/de/modules/common.json b/public/locales/de/modules/common.json index 24f082c2c..c216b43d1 100644 --- a/public/locales/de/modules/common.json +++ b/public/locales/de/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Ungenutzter Parameter in der Konfiguration erkannt
{{key}}. Homarr ist nicht in der Lage, diesen Parameter zu interpretieren und zu verwenden. Um ein unerwartetes Verhalten zu vermeiden, sichern Sie Ihre Konfiguration und korrigieren Sie diese." + "text": "" } } } diff --git a/public/locales/de/modules/dashdot.json b/public/locales/de/modules/dashdot.json index 2ade84d78..a403da824 100644 --- a/public/locales/de/modules/dashdot.json +++ b/public/locales/de/modules/dashdot.json @@ -14,23 +14,23 @@ "label": "Spalten anzeigen" }, "graphHeight": { - "label": "Höhe der Graphen" + "label": "Höhe des Graphen" }, "graphsOrder": { - "label": "Graphen (Reihenfolge)", + "label": "Reihenfolge der Graphen", "storage": { "label": "Speicher", "enabled": { - "label": "Im Widget anzeigen" + "label": "In Widget anzeigen" }, "span": { - "label": "Spaltenbreite" + "label": "Länge der Säulen" }, "compactView": { - "label": "Als Text anzeigen (Kompakt)" + "label": "Als Text anzeigen (kompakt)" }, "multiView": { - "label": "Als Multi-Laufwerk anzeigen" + "label": "Als Multi-Laufwerk-Ansicht anzeigen" } }, "network": { @@ -39,10 +39,10 @@ "label": "In Widget anzeigen" }, "span": { - "label": "Spaltenbreite" + "label": "Länge der Säulen" }, "compactView": { - "label": "Als Text anzeigen (Kompakt)" + "label": "Als Text anzeigen (kompakt)" } }, "cpu": { @@ -51,10 +51,10 @@ "label": "In Widget anzeigen" }, "span": { - "label": "Spaltenbreite" + "label": "Länge der Säulen" }, "multiView": { - "label": "Als Multi-Core anzeigen" + "label": "Als Multi-Core-Ansicht anzeigen" } }, "ram": { @@ -63,7 +63,7 @@ "label": "In Widget anzeigen" }, "span": { - "label": "Spaltenbreite" + "label": "Länge der Säulen" } }, "gpu": { @@ -72,7 +72,7 @@ "label": "In Widget anzeigen" }, "span": { - "label": "Spaltenbreite" + "label": "Länge der Säulen" } } } @@ -85,7 +85,7 @@ "noInformation": "Es können keine Informationen vom Dash. abgerufen werden. - Verwenden Sie die neueste Version?", "protocolDowngrade": { "title": "Protokoll-Downgrade erkannt", - "text": "Das Protokoll zu Ihrer Dash.-Instanz wird herabgestuft. Dies ist ein Sicherheitsrisiko, da HTTP unverschlüsselt ist und Angreifer diese Verbindung missbrauchen könnten. Stellen Sie sicher, dass Dash. auch auf HTTPS läuft oder downgraden Sie Homarr auf HTTP (wird nicht empfohlen)." + "text": "Die Verbindung zu Ihrer Dash.-Instanz erfolgt über HTTP. Dies ist ein Sicherheitsrisiko, da HTTP unverschlüsselt ist und Angreifer diese Verbindung missbrauchen könnten. Stellen Sie sicher, dass Dash. HTTPS verwendet, oder setzen Sie Homarr auf HTTP herab (nicht empfohlen)." } }, "graphs": { diff --git a/public/locales/de/modules/iframe.json b/public/locales/de/modules/iframe.json index d03a3423f..a2b36924b 100644 --- a/public/locales/de/modules/iframe.json +++ b/public/locales/de/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Geben Sie eine URL ein", + "title": "", "text": "Stellen Sie sicher, dass Sie in der Konfiguration Ihres Widgets eine gültige Adresse eingegeben haben" } } diff --git a/public/locales/de/modules/media-requests-list.json b/public/locales/de/modules/media-requests-list.json new file mode 100644 index 000000000..bab554413 --- /dev/null +++ b/public/locales/de/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Medienanfragen", + "description": "Sehen Sie eine Liste aller Medienanfragen von Ihrer Overseerr- oder Jellyseerr-Instanz", + "settings": { + "title": "Liste der Medienanfragen" + } + }, + "noRequests": "Keine Anfragen gefunden. Bitte stellen Sie sicher, dass Sie Ihre Anwendungen richtig konfiguriert haben.", + "pending": "Es gibt {countPendingApproval} Anträge, die auf eine Genehmigung warten.", + "nonePending": "Es sind derzeit keine Genehmigungen ausstehend. Sie sind startklar!", + "state": { + "approved": "Genehmigt", + "pendingApproval": "Warten auf Freigabe", + "declined": "Abgelehnt" + } +} diff --git a/public/locales/de/modules/media-requests-stats.json b/public/locales/de/modules/media-requests-stats.json new file mode 100644 index 000000000..d54215f69 --- /dev/null +++ b/public/locales/de/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Statistik der Medienanfragen", + "description": "Statistiken über Ihre Medienanfragen", + "settings": { + "title": "Statistik der Medienanfragen" + } + }, + "stats": { + "pending": "Ausstehende Freigaben", + "tvRequests": "TV-Anfragen", + "movieRequests": "Filmanfragen" + } +} diff --git a/public/locales/de/modules/rss.json b/public/locales/de/modules/rss.json index 3214e802d..488ed34ff 100644 --- a/public/locales/de/modules/rss.json +++ b/public/locales/de/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "RSS-Widget", - "description": "Nimmt die Einträge aus einem RSS-Feed und zeigt sie an. Wird üblicherweise für Online-Nachrichten verwendet", + "description": "", "settings": { "title": "Einstellungen für das RSS-Widget", "rssFeedUrl": { - "label": "RSS-Feed URL" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "RSS-Feed konnte nicht abgerufen werden", - "text": "Es gab ein Problem beim Erreichen des RSS-Feeds. Vergewissern Sie sich, dass Sie den Feed richtig konfiguriert haben und eine gültige RSS-URL verwenden, die der offiziellen Standardspezifikation entspricht. Nachdem Sie den Feed aktualisiert haben, müssen Sie möglicherweise Ihr Dashboard speichern und die Seite aktualisieren." + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/de/modules/video-stream.json b/public/locales/de/modules/video-stream.json index c5157f1c2..de60fe085 100644 --- a/public/locales/de/modules/video-stream.json +++ b/public/locales/de/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "Einstellungen für das Video Stream Widget", "FeedUrl": { - "label": "Feed URL" + "label": "Feed-URL" }, "autoPlay": { - "label": "Automatisch abspielen" + "label": "Automatische Wiedergabe" }, "muted": { "label": "Audio stummschalten" diff --git a/public/locales/de/settings/customization/general.json b/public/locales/de/settings/customization/general.json index cdf368d82..f04f09478 100644 --- a/public/locales/de/settings/customization/general.json +++ b/public/locales/de/settings/customization/general.json @@ -14,8 +14,8 @@ "description": "Titel, Logo und PWA anpassen" }, "appereance": { - "name": "Erscheinungsbild", - "description": "Anpassen des Hintergrunds, der Farben und des Erscheinungsbilds der Anwendung" + "name": "Aussehen", + "description": "Anpassen des Hintergrunds, der Farben und des Erscheinungsbilds" } } } \ No newline at end of file diff --git a/public/locales/de/settings/customization/page-appearance.json b/public/locales/de/settings/customization/page-appearance.json index 438805ada..123252c7c 100644 --- a/public/locales/de/settings/customization/page-appearance.json +++ b/public/locales/de/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Meta Titel", - "description": "Der Titel, der als Tab-Name angezeigt wird" + "description": "Der in der Registerkarte Ihres Browsers angezeigte Titel" }, "logo": { "label": "Logo", - "description": "Der Logo des Dashboards oben links" + "description": "Das oben links angezeigte Logo" }, "favicon": { "label": "Favicon", - "description": "Das Symbol, das vor dem Namen Ihres Tabs verwendet wird" + "description": "Der in der Registerkarte Ihres Browsers angezeigte Symbol" }, "background": { "label": "Hintergrund" }, "customCSS": { "label": "Benutzerdefiniertes CSS", - "description": "Anpassen aller Elemente auf Ihrem Dashboard, nur für erfahrene Benutzer empfohlen", + "description": "Außerdem können Sie Ihr Dashboard mittels CSS anpassen, dies wird nur für erfahrene Benutzer empfohlen", "placeholder": "Benutzerdefiniertes CSS wird zuletzt angewendet", "applying": "CSS wird übernommen..." }, diff --git a/public/locales/de/widgets/error-boundary.json b/public/locales/de/widgets/error-boundary.json new file mode 100644 index 000000000..22fcf5dac --- /dev/null +++ b/public/locales/de/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ups, ein Fehler ist aufgetreten!", + "buttons": { + "details": "Details", + "tryAgain": "Erneut versuchen" + } + }, + "modal": { + "text": "", + "label": "Dein Fehler", + "reportButton": "Fehler melden" + } +} \ No newline at end of file diff --git a/public/locales/el/common.json b/public/locales/el/common.json index 0b991af90..769edb658 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -9,13 +9,14 @@ "version": "Έκδοση", "changePosition": "Αλλαγή θέσης", "remove": "Αφαίρεση", - "removeConfirm": "Είστε σίγουροι ότι θέλετε να καταργήσετε το {{item}} ;", + "removeConfirm": "", + "createItem": "", "sections": { "settings": "Ρυθμίσεις", "dangerZone": "Επικίνδυνη Περιοχή" }, "secrets": { - "apiKey": "Κλειδί Api", + "apiKey": "", "username": "Όνομα Χρήστη", "password": "Κωδικός" }, diff --git a/public/locales/el/layout/modals/about.json b/public/locales/el/layout/modals/about.json index aae1178db..927b5b23f 100644 --- a/public/locales/el/layout/modals/about.json +++ b/public/locales/el/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Το Homarr είναι ένα κομψό, μοντέρνο ταμπλό που βάζει όλες τις εφαρμογές και τις υπηρεσίες σας στα χέρια σας. Με το Homarr, μπορείτε να έχετε πρόσβαση και να ελέγχετε τα πάντα σε μια βολική τοποθεσία. Το Homarr ενσωματώνεται απρόσκοπτα με τις εφαρμογές που έχετε προσθέσει, παρέχοντάς σας πολύτιμες πληροφορίες και δίνοντάς σας πλήρη έλεγχο. Η εγκατάσταση είναι πανεύκολη και το Homarr υποστηρίζει ένα ευρύ φάσμα μεθόδων ανάπτυξης.", "contact": "Έχετε προβλήματα ή ερωτήσεις; Συνδεθείτε μαζί μας!", "addToDashboard": "Προσθήκη στο ταμπλό", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "", "configurationsCount": "", diff --git a/public/locales/el/layout/modals/add-app.json b/public/locales/el/layout/modals/add-app.json index d959ac22e..30eb2cf2e 100644 --- a/public/locales/el/layout/modals/add-app.json +++ b/public/locales/el/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "Γενικά", - "behaviour": "Συμπεριφορά", + "behaviour": "", "network": "Δίκτυο", "appearance": "Εμφάνιση", "integration": "Ενσωμάτωση" diff --git a/public/locales/el/layout/modals/change-position.json b/public/locales/el/layout/modals/change-position.json index 52619c888..4c2b1819f 100644 --- a/public/locales/el/layout/modals/change-position.json +++ b/public/locales/el/layout/modals/change-position.json @@ -1,8 +1,6 @@ { - "xPosition": "Θέση του άξονα X", "width": "Πλάτος", "height": "Ύψος", - "yPosition": "Θέση του άξονα Y", "zeroOrHigher": "0 ή υψηλότερο", "betweenXandY": "Μεταξύ {min} και {max}" } \ No newline at end of file diff --git a/public/locales/el/modules/common.json b/public/locales/el/modules/common.json index 1919e13df..14a2512d9 100644 --- a/public/locales/el/modules/common.json +++ b/public/locales/el/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Εντοπίστηκε αχρησιμοποίητη παράμετρος στη διαμόρφωση
{{key}}. Το Homarr δεν μπορεί να ερμηνεύσει και να χρησιμοποιήσει αυτή την παράμετρο. Για να αποφύγετε οποιαδήποτε απροσδόκητη συμπεριφορά, δημιουργήστε αντίγραφα ασφαλείας των ρυθμίσεων σας και διορθώστε τις ρυθμίσεις σας." + "text": "" } } } diff --git a/public/locales/el/modules/dashdot.json b/public/locales/el/modules/dashdot.json index 3c235e9a9..60f6c65b5 100644 --- a/public/locales/el/modules/dashdot.json +++ b/public/locales/el/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Εμφανίζει τα γραφήματα μιας εξωτερικής Dash. μέσα στο Homarr.", + "description": "", "settings": { "title": "Ρυθμίσεις για το widget Dash", "url": { @@ -105,7 +105,7 @@ "title": "CPU" }, "ram": { - "title": "Μνήμη RAM" + "title": "" }, "gpu": { "title": "GPU" diff --git a/public/locales/el/modules/media-requests-list.json b/public/locales/el/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/el/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/el/modules/media-requests-stats.json b/public/locales/el/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/el/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/el/modules/ping.json b/public/locales/el/modules/ping.json index 70d316ee2..cb2037b57 100644 --- a/public/locales/el/modules/ping.json +++ b/public/locales/el/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "Εμφανίζει μια ένδειξη κατάστασης ανάλογα με τον κωδικό απόκρισης HTTP μιας δεδομένης διεύθυνσης URL." + "description": "" }, "states": { "online": "Online {{response}}", diff --git a/public/locales/el/modules/rss.json b/public/locales/el/modules/rss.json index 230d75cf5..0ae05342b 100644 --- a/public/locales/el/modules/rss.json +++ b/public/locales/el/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/el/modules/torrents-status.json b/public/locales/el/modules/torrents-status.json index 5411a4b2e..84c33e30d 100644 --- a/public/locales/el/modules/torrents-status.json +++ b/public/locales/el/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Προσθέστε έναν υποστηριζόμενης εφαρμογής Torrent για να δείτε τις τρέχουσες λήψεις σας" }, "generic": { - "title": "Παρουσιάστηκε ένα απροσδόκητο σφάλμα", + "title": "", "text": "Το Homarr δεν μπόρεσε να επικοινωνήσει με τις εφαρμογές Torrent. Ελέγξτε τις ρυθμίσεις σας" } }, diff --git a/public/locales/el/settings/customization/general.json b/public/locales/el/settings/customization/general.json index ee9d30b5a..141f7ff4b 100644 --- a/public/locales/el/settings/customization/general.json +++ b/public/locales/el/settings/customization/general.json @@ -14,7 +14,7 @@ "description": "" }, "appereance": { - "name": "", + "name": "Εμφάνιση", "description": "" } } diff --git a/public/locales/el/settings/general/config-changer.json b/public/locales/el/settings/general/config-changer.json index 4fe61e49c..628e70e6e 100644 --- a/public/locales/el/settings/general/config-changer.json +++ b/public/locales/el/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "Επιβεβαιώστε τη διαγραφή της διαμόρφωσής σας", - "warningText": "Πρόκειται να διαγράψετε το '{{configName}}'", - "text": "Λάβετε υπόψη ότι η διαγραφή δεν είναι αναστρέψιμη και τα δεδομένα σας θα χαθούν οριστικά. Αφού κάνετε κλικ σε αυτό το κουμπί, το αρχείο θα διαγραφεί οριστικά από το δίσκο σας. Φροντίστε να δημιουργήσετε ένα επαρκές αντίγραφο ασφαλείας της διαμόρφωσής σας.", + "warningText": "", + "text": "", "buttons": { "confirm": "Ναι, διαγράψτε το '{{configName}}'" } @@ -57,7 +57,7 @@ "message": "Η διαγραφή ρυθμίσεων απέτυχε" }, "deleteFailedDefaultConfig": { - "title": "Η προεπιλεγμένη ρύθμιση παραμέτρων δεν μπορεί να διαγραφεί", + "title": "", "message": "Η διαμόρφωση δεν διαγράφηκε από το σύστημα αρχείων" } } diff --git a/public/locales/el/settings/general/search-engine.json b/public/locales/el/settings/general/search-engine.json index f3915a4d1..1d6a3e30e 100644 --- a/public/locales/el/settings/general/search-engine.json +++ b/public/locales/el/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Μηχανή αναζήτησης", "configurationName": "Διαμόρφωση μηχανής αναζήτησης", "tips": { - "generalTip": "Υπάρχουν πολλά προθέματα που μπορείτε να χρησιμοποιήσετε! Προσθέτοντας αυτά μπροστά από το ερώτημά σας θα φιλτράρετε τα αποτελέσματα. !s (Web), !t (Torrents), !y (YouTube) και !m (Media).", + "generalTip": "", "placeholderTip": "%s μπορεί να χρησιμοποιηθεί ως placeholder για το ερώτημα." }, "customEngine": { diff --git a/public/locales/el/widgets/error-boundary.json b/public/locales/el/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/el/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 4f2e4f0ff..c62f22acf 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -10,6 +10,7 @@ "changePosition": "Change position", "remove": "Remove", "removeConfirm": "Are you sure that you want to remove {{item}}?", + "createItem": "+ create {{item}}", "sections": { "settings": "Settings", "dangerZone": "Danger zone" diff --git a/public/locales/en/layout/modals/about.json b/public/locales/en/layout/modals/about.json index aa99318db..83109b624 100644 --- a/public/locales/en/layout/modals/about.json +++ b/public/locales/en/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr is a sleek, modern dashboard that puts all of your apps and services at your fingertips. With Homarr, you can access and control everything in one convenient location. Homarr seamlessly integrates with the apps you've added, providing you with valuable information and giving you complete control. Installation is a breeze, and Homarr supports a wide range of deployment methods.", "contact": "Having trouble or questions? Connect with us!", "addToDashboard": "Add to Dashboard", + "tip": "Mod refers to your modifier key, it is Ctrl and Command/Super/Windows key", + "key": "Shortcut key", + "action": "Action", + "keybinds": "Keybinds", "metrics": { "configurationSchemaVersion": "Configuration schema version", "configurationsCount": "Available configurations", diff --git a/public/locales/en/layout/modals/add-app.json b/public/locales/en/layout/modals/add-app.json index 0ca231eb0..403babeaa 100644 --- a/public/locales/en/layout/modals/add-app.json +++ b/public/locales/en/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "App Icon", - "description": "Choose a an icon to be displayed on your dashboard. Choose from {{suggestionsCount}} icons or enter your own URL", + "description": "", "autocomplete": { "title": "No results found", "text": "Try to use a more specific search term. If you can't find your desired icon, paste the image URL above for a custom icon" diff --git a/public/locales/en/modules/common.json b/public/locales/en/modules/common.json index 485d7e8fb..c394f3a26 100644 --- a/public/locales/en/modules/common.json +++ b/public/locales/en/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Unused parameter in configuration detected
{{key}}. Homarr is unable to interpret and use this parameter. To avoid any unexpected behavior, back up your configuration and correct your configuration." + "text": "" } } } diff --git a/public/locales/en/modules/iframe.json b/public/locales/en/modules/iframe.json index 9cd27d2a3..b7058e677 100644 --- a/public/locales/en/modules/iframe.json +++ b/public/locales/en/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Enter an URL", + "title": "", "text": "Ensure that you've entered a valid address in the configuration of your widget" } } diff --git a/public/locales/en/modules/media-requests-list.json b/public/locales/en/modules/media-requests-list.json new file mode 100644 index 000000000..bf56d4e06 --- /dev/null +++ b/public/locales/en/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Media Requests", + "description": "See a list of all media requests from your Overseerr or Jellyseerr instance", + "settings": { + "title": "Media requests list" + } + }, + "noRequests": "No requests found. Please ensure that you've configured your apps correctly.", + "pending": "There are {countPendingApproval} requests waiting for an approval.", + "nonePending": "There are currently no pending approvals. You're good to go!", + "state": { + "approved": "Approved", + "pendingApproval": "Pending approval", + "declined": "Declined" + } +} diff --git a/public/locales/en/modules/media-requests-stats.json b/public/locales/en/modules/media-requests-stats.json new file mode 100644 index 000000000..3c7d10090 --- /dev/null +++ b/public/locales/en/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Media request stats", + "description": "Statistics about your media requests", + "settings": { + "title": "Media requests stats" + } + }, + "stats": { + "pending": "Pending approvals", + "tvRequests": "TV requests", + "movieRequests": "Movie requests" + } +} diff --git a/public/locales/en/modules/rss.json b/public/locales/en/modules/rss.json index df52af4af..9566f1dc4 100644 --- a/public/locales/en/modules/rss.json +++ b/public/locales/en/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "RSS Widget", - "description": "Grabs the items from a RSS feed and displays them. Commonly used for online news", + "description": "", "settings": { "title": "Settings for RSS widget", "rssFeedUrl": { - "label": "RSS feed url" + "label": "RSS feeds urls", + "description": "The urls of the RSS feeds you want to display from." + }, + "refreshInterval": { + "label": "Refresh interval (in minutes)" } - } - }, - "card": { - "errors": { - "general": { - "title": "Unable to retrieve RSS feed", - "text": "There was a problem reaching out the RSS feed. Make sure that you have correctly configured the RSS feed using a valid URL. URLs should match the official specification. After updating the feed, you may need to refresh the dashboard." + }, + "card": { + "errors": { + "general": { + "title": "Unable to retrieve RSS feed", + "text": "There was a problem reaching out the RSS feed. Make sure that you have correctly configured the RSS feed using a valid URL. URLs should match the official specification. After updating the feed, you may need to refresh the dashboard." + } } } } diff --git a/public/locales/en/widgets/error-boundary.json b/public/locales/en/widgets/error-boundary.json new file mode 100644 index 000000000..4c7b31e2d --- /dev/null +++ b/public/locales/en/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Oops, there was an error!", + "buttons": { + "details": "Details", + "tryAgain": "Try again" + } + }, + "modal": { + "text": "", + "label": "Your error", + "reportButton": "Report this error" + } +} \ No newline at end of file diff --git a/public/locales/es/common.json b/public/locales/es/common.json index f60e3c052..a0ad63e97 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -9,7 +9,8 @@ "version": "Versión", "changePosition": "Cambiar posición", "remove": "Eliminar", - "removeConfirm": "Seguro que quieres eliminar {{item}} ?", + "removeConfirm": "¿Seguro que quieres eliminar {{item}}?", + "createItem": "+ create {{item}}", "sections": { "settings": "Ajustes", "dangerZone": "Zona de riesgo" diff --git a/public/locales/es/layout/modals/about.json b/public/locales/es/layout/modals/about.json index b7dc308ef..7e21c89c4 100644 --- a/public/locales/es/layout/modals/about.json +++ b/public/locales/es/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr es un dashboard elegante y moderno que pone todas tus apps y servicios a tu alcance. Con Homarr, puedes acceder y controlar todo desde una sola ubicación. Homarr se integra a la perfección con las apps que hayas añadido, ofreciendote información valiosa y dándote control total. La instalación es muy sencilla, y Homarr soporta una amplia gama de métodos de implementación.", "contact": "¿Tienes problemas o preguntas? ¡Conéctate con nosotros!", "addToDashboard": "Añadir al Dashboard", + "tip": "Mod se refiere a tu tecla modificadora, es Ctrl y tecla Command/Super/Windows", + "key": "Tecla de acceso directo", + "action": "Acción", + "keybinds": "Combinaciones de teclas", "metrics": { "configurationSchemaVersion": "Versión del esquema de configuración", "configurationsCount": "Configuraciones disponibles", diff --git a/public/locales/es/layout/modals/add-app.json b/public/locales/es/layout/modals/add-app.json index 3db9ff890..188a298b7 100644 --- a/public/locales/es/layout/modals/add-app.json +++ b/public/locales/es/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Icono App", - "description": "Elige un icono para mostrarse en tu dashboard. Elige entre {{suggestionsCount}} iconos o introduce tu propia URL", + "description": "", "autocomplete": { "title": "Ningún resultado encontrado", "text": "Intenta usar un término de búsqueda más específico. Si no puedes encontrar tu icono deseado, pega la URL de la imagen encima para establecer un icono personalizado" diff --git a/public/locales/es/modules/common.json b/public/locales/es/modules/common.json index 0abd1940f..07775cac0 100644 --- a/public/locales/es/modules/common.json +++ b/public/locales/es/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Parámetro sin uso detectado en la configuración
{{key}}. Homarr no puede interpretar y usar este parámetro. Para evitar cualquier comportamiento inesperado, respalda tu configuración y corrige tus ajustes." + "text": "" } } } diff --git a/public/locales/es/modules/dashdot.json b/public/locales/es/modules/dashdot.json index ee2cd2bb0..1686364ec 100644 --- a/public/locales/es/modules/dashdot.json +++ b/public/locales/es/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Muestra los gráficos de una instancia de Dash. externa, dentro de Homarr.", + "description": "Mostrar los gráficos de una instancia Dash. externa en Homarr.", "settings": { "title": "Ajustes para el widget Dash.", "url": { @@ -85,7 +85,7 @@ "noInformation": "No se puede obtener información de Dash. - ¿estás utilizando la última versión?", "protocolDowngrade": { "title": "Degradación de protocolo detectada", - "text": "El protocolo de tu instancia Dash. está siendo degradado. Esto es un riesgo de seguridad, debido a que HTTP no está cifrado, y los atacantes pueden abusar de esta conexión. Asegúrate de que Dash. esté ejecutándo en HTTPS también, o degrada Homarr a HTTP (no recomendado)." + "text": "La conexión a tu instancia Dash. se realiza por HTTP. Esto es un riesgo de seguridad, debido a que HTTP no está encriptado, y los atacantes podrían abusar de esta conexión. Asegúrate de que Dash. esté usando HTTPS, or degrada Homarr a HTTP (no recomendado)." } }, "graphs": { diff --git a/public/locales/es/modules/iframe.json b/public/locales/es/modules/iframe.json index e864015ae..400729f1d 100644 --- a/public/locales/es/modules/iframe.json +++ b/public/locales/es/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "Incrustar cualquier contenido de Internet. Algunos sitios web pueden restringir el acceso.", "settings": { - "title": "Ajustes de IFrame", + "title": "Ajustes de iFrime", "embedUrl": { "label": "URL incrustada" }, @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Introducir una URL", + "title": "", "text": "Asegúrate de que has introducido una dirección válida en la configuración del widget" } } diff --git a/public/locales/es/modules/media-requests-list.json b/public/locales/es/modules/media-requests-list.json new file mode 100644 index 000000000..5f734dce5 --- /dev/null +++ b/public/locales/es/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Peticiones de contenido", + "description": "Mostrar una lista de todas las peticiones de contenido de tu instancia Overseerr o Jellyseerr", + "settings": { + "title": "Lista de peticiones de contenido" + } + }, + "noRequests": "Peticiones no encontradas. Por favor, asegúrate de tener configuradas tus apps correctamente.", + "pending": "Hay {countPendingApproval} peticiones esperando a ser aprobadas.", + "nonePending": "Actualmente no hay aprobaciones pendientes. ¡Listo!", + "state": { + "approved": "Aprobado", + "pendingApproval": "Aprobación pendiente", + "declined": "Rechazado" + } +} diff --git a/public/locales/es/modules/media-requests-stats.json b/public/locales/es/modules/media-requests-stats.json new file mode 100644 index 000000000..dc2a7455b --- /dev/null +++ b/public/locales/es/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Estadísticas de petición de contenido", + "description": "Estadísticas de tus peticiones de contenido", + "settings": { + "title": "Estadísticas de peticiones de contenido" + } + }, + "stats": { + "pending": "Aprobaciones pendientes", + "tvRequests": "Solicitudes de TV", + "movieRequests": "Solicitudes de películas" + } +} diff --git a/public/locales/es/modules/ping.json b/public/locales/es/modules/ping.json index feb6ce1a4..35ed5754a 100644 --- a/public/locales/es/modules/ping.json +++ b/public/locales/es/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Latencia", - "description": "Muestra un indicador de estado dependiendo del código de respuesta HTTP the la URL." + "description": "Mostrar un indicador de estado dependiendo del código de respuesta HTTP de una URL dada." }, "states": { "online": "En línea {{response}}", diff --git a/public/locales/es/modules/rss.json b/public/locales/es/modules/rss.json index 190f19072..195161e23 100644 --- a/public/locales/es/modules/rss.json +++ b/public/locales/es/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "Widget RSS", - "description": "Toma los elementos de una fuente RSS y los muestra. Comúnmente utilizado para noticias en línea", + "description": "", "settings": { "title": "Ajustes para el widget RSS", "rssFeedUrl": { - "label": "url de la fuente RSS" + "label": "URLs de fuentes RSS", + "description": "Las URLs de las fuentes RSS desde las que deseas mostrar." + }, + "refreshInterval": { + "label": "Intervalo de refresco (en minutos)" } - } - }, - "card": { - "errors": { - "general": { - "title": "Imposible recuperar la fuente RSS", - "text": "Hubo un problema al comunicarse con la fuente RSS. Asegúrate de haber configurado el feed correctamente y utiliza una URL de RSS válida que coincida con la especificación estándar oficial. Después de actualizar el feed, es posible que debas guardar tu dashboard y actualizar la página." + }, + "card": { + "errors": { + "general": { + "title": "Imposible recuperar la fuente RSS", + "text": "Hubo un problema al llegar a la fuente RSS. Asegúrate de haber configurado correctamente la fuente RSS utilizando una URL válida. Las URL deben coincidir con la especificación oficial. Después de actualizar la fuente, es posible que debas actualizar el dashboard." + } } } } diff --git a/public/locales/es/modules/torrents-status.json b/public/locales/es/modules/torrents-status.json index a1ae83d34..58b065749 100644 --- a/public/locales/es/modules/torrents-status.json +++ b/public/locales/es/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Añadir un cliente Torrent soportado para ver tus descargas actuales" }, "generic": { - "title": "Ocurrió un error inesperado", + "title": "Un error inesperado ha ocurrido", "text": "Homarr fue incapaz de comunicarse con tus clientes Torrent. Por favor, comprueba tu configuración" } }, diff --git a/public/locales/es/modules/video-stream.json b/public/locales/es/modules/video-stream.json index 13adf6ab9..d7d971851 100644 --- a/public/locales/es/modules/video-stream.json +++ b/public/locales/es/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "Ajustes del widget de transmisión de video", "FeedUrl": { - "label": "Feed url" + "label": "Fuente URL" }, "autoPlay": { - "label": "Auto-reproducción" + "label": "Auto reproducción" }, "muted": { "label": "Audio silenciado" diff --git a/public/locales/es/settings/customization/general.json b/public/locales/es/settings/customization/general.json index 40c675e83..d5fb72a39 100644 --- a/public/locales/es/settings/customization/general.json +++ b/public/locales/es/settings/customization/general.json @@ -15,7 +15,7 @@ }, "appereance": { "name": "Apariencia", - "description": "Personalizar la apariencia del fondo, colores y apps" + "description": "Personaliza el fondo, colores y apariencia de las apps" } } } \ No newline at end of file diff --git a/public/locales/es/settings/customization/page-appearance.json b/public/locales/es/settings/customization/page-appearance.json index effb9c38f..a1e16c02e 100644 --- a/public/locales/es/settings/customization/page-appearance.json +++ b/public/locales/es/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Tarjeta Meta", - "description": "El título, que se muestra como el nombre de tu pestaña" + "description": "El título mostrado en la pestaña de tu navegador" }, "logo": { "label": "Logo", - "description": "El logo del dashboard en la parte superior izquierda" + "description": "El logo mostrado en la parte superior izquierda" }, "favicon": { "label": "Favicon", - "description": "El icono, que se usa delante del nombre de la pestaña" + "description": "El icono mostrado en la pestaña de tu navegador" }, "background": { "label": "Fondo" }, "customCSS": { "label": "CSS Personalizado", - "description": "Personalizar todos los elementos de tu dashboard, solo recomendado para usuarios experimentados", + "description": "Ademas, personaliza tu dashboard usando CSS, solo recomendado para usuarios avanzados", "placeholder": "El CSS personalizado será aplicado en último lugar", "applying": "Aplicando CSS..." }, diff --git a/public/locales/es/settings/general/config-changer.json b/public/locales/es/settings/general/config-changer.json index 7f3e469b6..980d7ac39 100644 --- a/public/locales/es/settings/general/config-changer.json +++ b/public/locales/es/settings/general/config-changer.json @@ -37,7 +37,7 @@ "confirmDeletion": { "title": "Confirmar eliminación de tu configuración", "warningText": "Estás a punto de eliminar '{{configName}}'", - "text": "Por favor, ten en cuenta que la eliminación no es reversible y tus datos serán borrados indefinidamente. Después de hacer clic en el botón, el archivo será eliminado permanentemente del disco. Asegúrate de crear un respaldo adecuado de tu configuración.", + "text": "Por favor, ten en cuenta que la eliminación no es reversible, y tus datos serán perdidos permanentemente. Al presionar el botón, el archivo será eliminado permanentemente del disco. Asegúrate de crear un respaldo adecuado de tu configuración.", "buttons": { "confirm": "Si, eliminar '{{configName}}'" } diff --git a/public/locales/es/settings/general/search-engine.json b/public/locales/es/settings/general/search-engine.json index 17ddbb1fd..395f6248e 100644 --- a/public/locales/es/settings/general/search-engine.json +++ b/public/locales/es/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Motor de búsqueda", "configurationName": "Configuración del motor de búsqueda", "tips": { - "generalTip": "¡Hay múltiples prefijos que puedes usar! Añadiendo éstos delante de tu búsqueda, filtrará los resultados. !s (Web), !t (Torrents), !y (YouTube), y !m (Media).", + "generalTip": "¡Hay múltiples prefijos que puedes usar! Añadiéndolos delante de tus consultas, filtrarán los resultados. !s (Web), !t (Torrents), !y (YouTube), and !m (Media).", "placeholderTip": "%s puede utilizarse como modelo para la petición." }, "customEngine": { diff --git a/public/locales/es/widgets/error-boundary.json b/public/locales/es/widgets/error-boundary.json new file mode 100644 index 000000000..e6d2e9254 --- /dev/null +++ b/public/locales/es/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ups, ¡hubo un error!", + "buttons": { + "details": "Detalles", + "tryAgain": "Intentar de nuevo" + } + }, + "modal": { + "text": "", + "label": "Tu error", + "reportButton": "Reportar este error" + } +} \ No newline at end of file diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index a9dd4fc91..c8b240e10 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -10,12 +10,13 @@ "changePosition": "Modifier la position", "remove": "Supprimer", "removeConfirm": "Êtes-vous sûr de vouloir supprimer {{item}} ?", + "createItem": "", "sections": { "settings": "Paramètres", "dangerZone": "Zone de danger" }, "secrets": { - "apiKey": "Clé d'API", + "apiKey": "Clé API", "username": "Nom d'utilisateur", "password": "Mot de passe" }, diff --git a/public/locales/fr/layout/modals/about.json b/public/locales/fr/layout/modals/about.json index 768c723d4..5e0e635ab 100644 --- a/public/locales/fr/layout/modals/about.json +++ b/public/locales/fr/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr est un tableau de bord élégant, moderne qui met toutes vos applications et services au bout de vos doigts. Avec Homarr, vous pouvez accéder et contrôler tout dans un seul endroit. Homarr s'intègre de façon transparente avec les applications que vous avez ajoutées, vous fournissant des informations précieuses et vous donnant un contrôle total. L'installation est un jeu d'enfant, et Homarr prend en charge un large éventail de méthodes de déploiement.", "contact": "Vous avez des problèmes ou des questions ? Dites-le-nous !", "addToDashboard": "Ajouter au tableau de bord", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "Version de schéma de configuration", "configurationsCount": "Configurations disponibles", diff --git a/public/locales/fr/layout/modals/add-app.json b/public/locales/fr/layout/modals/add-app.json index a79f70f53..d8a2ecdc4 100644 --- a/public/locales/fr/layout/modals/add-app.json +++ b/public/locales/fr/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "Général", - "behaviour": "Comportement", + "behaviour": "", "network": "Réseau", "appearance": "Apparence", "integration": "Intégration" @@ -41,12 +41,12 @@ "label": "Icône de l’app", "description": "", "autocomplete": { - "title": "", - "text": "" + "title": "Aucun résultat trouvé", + "text": "Essayez d'utiliser un terme de recherche plus spécifique. Si vous ne trouvez pas l'icône souhaitée, collez l'URL de l'image ci-dessus pour obtenir une icône personnalisée" }, "noItems": { "title": "", - "text": "" + "text": "Cela peut prendre quelques secondes" } } }, diff --git a/public/locales/fr/layout/modals/change-position.json b/public/locales/fr/layout/modals/change-position.json index 4e1016a5f..dcca37c0b 100644 --- a/public/locales/fr/layout/modals/change-position.json +++ b/public/locales/fr/layout/modals/change-position.json @@ -1,8 +1,6 @@ { - "xPosition": "Position sur l'axe X", "width": "Largeur", "height": "Hauteur", - "yPosition": "Position sur l'axe X", "zeroOrHigher": "0 ou plus", "betweenXandY": "Entre {{min}} et {{max}}" } \ No newline at end of file diff --git a/public/locales/fr/modules/common.json b/public/locales/fr/modules/common.json index cc7a46382..ce050fe42 100644 --- a/public/locales/fr/modules/common.json +++ b/public/locales/fr/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Un paramètre non utilisé dans votre configuration a été détectée
{{key}}. Homarr est incapable d'interpréter et d'utiliser ce paramètre. Pour éviter tout comportement inattendu, sauvegardez votre configuration et corrigez-la." + "text": "" } } } diff --git a/public/locales/fr/modules/dashdot.json b/public/locales/fr/modules/dashdot.json index 84d05bff0..7d2b78a53 100644 --- a/public/locales/fr/modules/dashdot.json +++ b/public/locales/fr/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Affiche les graphiques d'une instance externe de Dash. dans Homarr.", + "description": "", "settings": { "title": "Paramètres du widget Dash", "url": { @@ -85,7 +85,7 @@ "noInformation": "Impossible d'acquérir des informations de Dash. - Utilisez-vous la dernière version ?", "protocolDowngrade": { "title": "Protocole rétrograde détecté (HTTP)", - "text": "Le protocole vers votre instance de Dash. n'est pas en mode sécurisé. Ceci est considéré comme étant un risque de sécurité, puisque HTTP ne supporte pas l'encryption, et des attaquants pourraient en abuser. Assurez-vous que Dash. fonctionne en mode HTTPS, ou retirez le mode HTTPS de Homarr (pas recommandé)." + "text": "" } }, "graphs": { diff --git a/public/locales/fr/modules/iframe.json b/public/locales/fr/modules/iframe.json index 8c861e144..d31b1f61f 100644 --- a/public/locales/fr/modules/iframe.json +++ b/public/locales/fr/modules/iframe.json @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Saisir une URL", + "title": "", "text": "" } } diff --git a/public/locales/fr/modules/media-requests-list.json b/public/locales/fr/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/fr/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/fr/modules/media-requests-stats.json b/public/locales/fr/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/fr/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/fr/modules/ping.json b/public/locales/fr/modules/ping.json index 23cb2081e..d9317be27 100644 --- a/public/locales/fr/modules/ping.json +++ b/public/locales/fr/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "Affiche un indicateur d'état en fonction du code de réponse HTTP d'une URL donnée." + "description": "" }, "states": { "online": "En ligne {{response}}", diff --git a/public/locales/fr/modules/rss.json b/public/locales/fr/modules/rss.json index 438b3cb3e..d766e44a1 100644 --- a/public/locales/fr/modules/rss.json +++ b/public/locales/fr/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "", "rssFeedUrl": { - "label": "URL du flux RSS" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "Impossible de récupérer le flux RSS", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/fr/modules/torrents-status.json b/public/locales/fr/modules/torrents-status.json index 02859b043..5163240cc 100644 --- a/public/locales/fr/modules/torrents-status.json +++ b/public/locales/fr/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Ajouter un client Torrent pris en charge pour voir vos téléchargements en cours" }, "generic": { - "title": "Une erreur inattendue s'est produite", + "title": "", "text": "Homarr n'a pas pu communiquer avec vos clients Torrent. Veuillez vérifier votre configuration" } }, diff --git a/public/locales/fr/settings/customization/general.json b/public/locales/fr/settings/customization/general.json index e35622f92..5f940b4ff 100644 --- a/public/locales/fr/settings/customization/general.json +++ b/public/locales/fr/settings/customization/general.json @@ -15,7 +15,7 @@ }, "appereance": { "name": "Apparence", - "description": "Personnalisez l'arrière-plan, les couleurs et l'apparence des applications" + "description": "" } } } \ No newline at end of file diff --git a/public/locales/fr/settings/customization/page-appearance.json b/public/locales/fr/settings/customization/page-appearance.json index 465cf0a01..f56c44043 100644 --- a/public/locales/fr/settings/customization/page-appearance.json +++ b/public/locales/fr/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Titre Méta", - "description": "Le titre qui est affiché comme nom d'onglet" + "description": "Le titre affiché dans l'onglet de votre navigateur" }, "logo": { "label": "Logo", - "description": "Le logo du tableau de bord en haut à gauche" + "description": "Le logo affiché en haut à gauche" }, "favicon": { "label": "Favicon", - "description": "L'icône qui est utilisé devant le nom de votre onglet" + "description": "L'icône affichée dans l'onglet de votre navigateur" }, "background": { "label": "Fond" }, "customCSS": { "label": "CSS personnalisé", - "description": "Personnaliser tous les éléments du tableau de bord, recommandé seulement pour les utilisateurs expérimentés", + "description": "", "placeholder": "Le CSS personnalisé sera appliqué en dernier", "applying": "Application du code CSS..." }, diff --git a/public/locales/fr/settings/general/search-engine.json b/public/locales/fr/settings/general/search-engine.json index ba73acb6d..7983e4ebb 100644 --- a/public/locales/fr/settings/general/search-engine.json +++ b/public/locales/fr/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Moteur de recherche", "configurationName": "Configuration du moteur de recherche", "tips": { - "generalTip": "Il existe plusieurs préfixes que vous pouvez utiliser ! L'ajout de ces préfixes devant votre requête filtrera les résultats. !s (Web), !t (Torrents), !y (YouTube), et !m (Media).", + "generalTip": "Vous pouvez utiliser plusieurs préfixes ! L'ajout de ces préfixes devant votre requête filtrera les résultats. !s (Web), !t (Torrents), !y (YouTube), et !m (Media).", "placeholderTip": "%s peut être utilisé en tant que placeholder pour la requête." }, "customEngine": { diff --git a/public/locales/fr/widgets/error-boundary.json b/public/locales/fr/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/fr/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/he/common.json b/public/locales/he/common.json index e9456d210..7942b01fb 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -9,7 +9,8 @@ "version": "גרסה", "changePosition": "שנה מיקום", "remove": "הסר", - "removeConfirm": "האם אתה בטוח שברצונך להסיר את {{item}} ?", + "removeConfirm": "האם אתה בטוח שברצונך להסיר את {{item}}?", + "createItem": "יצירת שאילתה {{item}}", "sections": { "settings": "הגדרות", "dangerZone": "אזור מסוכן" diff --git a/public/locales/he/layout/modals/about.json b/public/locales/he/layout/modals/about.json index 0695094f3..8540d79f7 100644 --- a/public/locales/he/layout/modals/about.json +++ b/public/locales/he/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr הוא לוח מחוונים אלגנטי, מודרני, אשר שם את כל האפליקציות והשירותים בהישג יד. עם Homarr, ניתן לגשת לכל דבר ולשלוט בו במיקום נוח אחד. Homarr משתלב בצורה חלקה עם האפליקציות, מספק מידע רב ערך ונותן שליטה מלאה. ההתקנה היא קלה ותומכת במגוון רחב של שיטות פריסה.", "contact": "נתקלת בבעיות או בשאלות? צור איתנו קשר!", "addToDashboard": "הוספה ללוח מחוונים", + "tip": "מוד מתייחס למקש השינוי שלך, זהו מקש Ctrl ומקש Command/Super/Windows", + "key": "מקש קיצור", + "action": "פעולה", + "keybinds": "שילוב מקשים", "metrics": { "configurationSchemaVersion": "גירסת סכימת תצורה", "configurationsCount": "תצורות זמינות", diff --git a/public/locales/he/layout/modals/add-app.json b/public/locales/he/layout/modals/add-app.json index 111f91a0b..d59415746 100644 --- a/public/locales/he/layout/modals/add-app.json +++ b/public/locales/he/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "סמל אפליקציה", - "description": "בחר סמל שיוצג בלוח המחוונים שלך. ניתן לבחור סמלים מ- {{suggestionsCount}} או הזן כתובת אתר משלך", + "description": "", "autocomplete": { "title": "לא נמצאו תוצאות", "text": "נא להשתמש במונח חיפוש ספציפי יותר. אם הסמל הרצוי לא נמצא ניתן להעתיק את כתובת האתר של התמונה למעלה עבור סמל מותאם אישית" diff --git a/public/locales/he/modules/common.json b/public/locales/he/modules/common.json index 8fd412e0b..4ec400cde 100644 --- a/public/locales/he/modules/common.json +++ b/public/locales/he/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "זוהה פרמטר לא בשימוש בתצורה
{{key}}. לא ניתן להשתמש בפרמטר זה. כדי להימנע מכל התנהגות בלתי צפויה, גבה ותקן את התצורה." + "text": "" } } } diff --git a/public/locales/he/modules/dashdot.json b/public/locales/he/modules/dashdot.json index b3060ef2c..6ca24a9df 100644 --- a/public/locales/he/modules/dashdot.json +++ b/public/locales/he/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "מציג נתוני גרפים.", + "description": "מציג מופעי נתוני גרפים מ- Dash בתוך Homarr.", "settings": { "title": "הגדרות עבור וידג׳ט Dash.", "url": { diff --git a/public/locales/he/modules/iframe.json b/public/locales/he/modules/iframe.json index edecc4ce8..3d4eb4e11 100644 --- a/public/locales/he/modules/iframe.json +++ b/public/locales/he/modules/iframe.json @@ -1,6 +1,6 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "הטמע כל תוכן מהאינטרנט. חלק מהאתרים עשויים להגביל את הגישה.", "settings": { "title": "הגדרות IFrame", @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "הזן קישור", + "title": "", "text": "ודא שהזנת כתובת חוקית בתצורת הווידג'ט שלך" } } diff --git a/public/locales/he/modules/media-requests-list.json b/public/locales/he/modules/media-requests-list.json new file mode 100644 index 000000000..e36207b78 --- /dev/null +++ b/public/locales/he/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "בקשות מדיה", + "description": "ראה רשימה של כל בקשות המדיה ממופע Overseerr או Jellyseerr שלך", + "settings": { + "title": "רשימת בקשות מדיה" + } + }, + "noRequests": "לא נמצאו בקשות. אנא ודא שהגדרת את האפליקציות שלך כנדרש.", + "pending": "יש {countPendingApproval} בקשות הממתינות לאישור.", + "nonePending": "אין כרגע אישורים ממתינים. ניתן להמשיך!", + "state": { + "approved": "אושר", + "pendingApproval": "ממתין לאישור", + "declined": "נדחה" + } +} diff --git a/public/locales/he/modules/media-requests-stats.json b/public/locales/he/modules/media-requests-stats.json new file mode 100644 index 000000000..07644a76a --- /dev/null +++ b/public/locales/he/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "מצב בקשות מדיה", + "description": "סטטיסטיקה לגבי בקשות המדיה", + "settings": { + "title": "מצב בקשות מדיה" + } + }, + "stats": { + "pending": "ממתין לאישור", + "tvRequests": "בקשות סדרות", + "movieRequests": "בקשות סרטים" + } +} diff --git a/public/locales/he/modules/rss.json b/public/locales/he/modules/rss.json index b1b9c9dad..8d5cb42ce 100644 --- a/public/locales/he/modules/rss.json +++ b/public/locales/he/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "וידג׳ט רסס", - "description": "תופס את הפריטים מעדכון רסס ומציג אותם. שימוש נפוץ לחדשות מקוונות", + "description": "", "settings": { "title": "הגדרות עבור וידג׳ט רסס", "rssFeedUrl": { - "label": "כתובת אינטרנט להזנת רסס" + "label": "כתובת אינטרנט להזנת רסס", + "description": "כתובות האתרים של הזנות רסס שמהן ברצונך להציג." + }, + "refreshInterval": { + "label": "מרווח הזמן לרענון (בשניות)" } - } - }, - "card": { - "errors": { - "general": { - "title": "לא ניתן לאחזר עדכוני רסס", - "text": "הייתה בעיה ביצירת קשר עם עדכון רסס. ודא שהגדרת בצורה נכונה והשתמש בכתובת אינטרנט חוקית של רסס, התואמת למפרט הסטנדרטי הרשמי. לאחר עדכון כתובת ההזנה, ייתכן שיהיה עליך לבצע שמירה ולרענן את הדף." + }, + "card": { + "errors": { + "general": { + "title": "לא ניתן לאחזר עדכוני רסס", + "text": "הייתה בעיה ביצירת קשר עם עדכון רסס. ודא שהגדרת בצורה נכונה והשתמש בכתובת אינטרנט חוקית של רסס, התואמת למפרט הסטנדרטי הרשמי. לאחר עדכון כתובת ההזנה, ייתכן שיהיה עליך לבצע שמירה ולרענן את הדף." + } } } } diff --git a/public/locales/he/modules/video-stream.json b/public/locales/he/modules/video-stream.json index cadc51f45..3c2426b80 100644 --- a/public/locales/he/modules/video-stream.json +++ b/public/locales/he/modules/video-stream.json @@ -5,7 +5,7 @@ "settings": { "title": "הגדרות עבור ווידג'ט זרם וידאו", "FeedUrl": { - "label": "כתובת אתר הזנה" + "label": "כתובת הזנה" }, "autoPlay": { "label": "הפעלה אוטומטית" diff --git a/public/locales/he/settings/customization/general.json b/public/locales/he/settings/customization/general.json index 7c36fb976..2d9bec07f 100644 --- a/public/locales/he/settings/customization/general.json +++ b/public/locales/he/settings/customization/general.json @@ -14,7 +14,7 @@ "description": "התאם כותרות, לוגו ו-PWA" }, "appereance": { - "name": "מראה חיצוני", + "name": "מראה", "description": "התאם אישית את הרקע, הצבעים ומראה האפליקציות" } } diff --git a/public/locales/he/settings/customization/page-appearance.json b/public/locales/he/settings/customization/page-appearance.json index 84310ae54..6a5d16b4f 100644 --- a/public/locales/he/settings/customization/page-appearance.json +++ b/public/locales/he/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "כותרת דף", - "description": "הכותרת, שמוצגת כשם הכרטיסייה שלך" + "description": "הכותרת המוצגת בלשונית הדפדפן שלך" }, "logo": { "label": "סמל", - "description": "הלוגו של לוח המחוונים בצד שמאל למעלה" + "description": "הלוגו מוצג בצד שמאל למעלה" }, "favicon": { "label": "אייקון לצד שם הדף", - "description": "הסמל שנמצא בשימוש מול שם הכרטיסייה שלך" + "description": "הכותרת המוצגת בלשונית הדפדפן שלך" }, "background": { "label": "רקע" }, "customCSS": { "label": "CSS מותאם אישית", - "description": "התאם אישית את כל הרכיבים בלוח המחוונים שלך, מומלץ רק למשתמשים מנוסים", + "description": "יתר על כן, התאם את לוח המחוונים שלך באמצעות CSS, מומלץ רק למשתמשים מנוסים", "placeholder": "CSS מותאם אישית יוחל אחרון", "applying": "מחיל CSS..." }, diff --git a/public/locales/he/widgets/error-boundary.json b/public/locales/he/widgets/error-boundary.json new file mode 100644 index 000000000..606223f6b --- /dev/null +++ b/public/locales/he/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "אופס, אירעה שגיאה!", + "buttons": { + "details": "פרטים", + "tryAgain": "נא לנסות שוב" + } + }, + "modal": { + "text": "", + "label": "השגיאה שלך", + "reportButton": "דווח על שגיאה זו" + } +} \ No newline at end of file diff --git a/public/locales/it/common.json b/public/locales/it/common.json index e526d7c4e..624343aac 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -10,6 +10,7 @@ "changePosition": "Cambia posizione", "remove": "Rimuovi", "removeConfirm": "Siete sicuri di voler rimuovere {{item}}?", + "createItem": "+ crea {{item}}", "sections": { "settings": "Impostazioni", "dangerZone": "Danger zone" diff --git a/public/locales/it/layout/modals/about.json b/public/locales/it/layout/modals/about.json index 5dd63da61..06413745e 100644 --- a/public/locales/it/layout/modals/about.json +++ b/public/locales/it/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr è una elegante e moderna dashboard che mette tutte le vostre app e i vostri servizi a portata di mano. Con Homarr, potete controllare tutto in un'unica comoda posizione. Homarr si integra perfettamente con le app aggiunte, fornendo informazioni preziose e offrendo un controllo completo. L'installazione è semplice e Homarr supporta un'ampia gamma di metodi di deployment.", "contact": "Problemi o domande? Contattaci!", "addToDashboard": "Aggiungi alla dashboard", + "tip": "Mod si riferisce al tasto modificatore, cioè i tasti Ctrl e Command/Super/Windows", + "key": "Tasto di scelta rapida", + "action": "Azioni", + "keybinds": "Scorciatoie da tastiera", "metrics": { "configurationSchemaVersion": "Versione dello schema di configurazione", "configurationsCount": "Configurazioni disponibili", @@ -9,6 +13,6 @@ "nodeEnvironment": "Ambiente Node", "i18n": "Translation namespaces I18n caricati", "locales": "I18n locales configurati", - "experimental_disableEditMode": "" + "experimental_disableEditMode": "SPERIMENTALE: Disabilita l'edit mode" } } \ No newline at end of file diff --git a/public/locales/it/layout/modals/add-app.json b/public/locales/it/layout/modals/add-app.json index 7f4ea37a6..ef69d972e 100644 --- a/public/locales/it/layout/modals/add-app.json +++ b/public/locales/it/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Icona App", - "description": "Scegli un'icona da visualizzare sulla tua dashboard. Scegli tra {{suggestionsCount}} icone o inserisci il tuo URL", + "description": "", "autocomplete": { "title": "Nessun risultato trovato", "text": "Prova a usare un termine di ricerca più specifico. Se non riesci a trovare l'icona desiderata, incolla l'URL dell'immagine sopra per un'icona personalizzata" diff --git a/public/locales/it/modules/common.json b/public/locales/it/modules/common.json index c5f229a8f..22b8f5848 100644 --- a/public/locales/it/modules/common.json +++ b/public/locales/it/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Parametro non utilizzato nella configurazione rilevata
{{key}}. Homarr non è in grado d'interpretare e utilizzare questo parametro. Onde evitare comportamenti imprevisti, eseguire un backup della configurazione e correggerla." + "text": "" } } } diff --git a/public/locales/it/modules/dashdot.json b/public/locales/it/modules/dashdot.json index 0bdba2d02..69ee1ff84 100644 --- a/public/locales/it/modules/dashdot.json +++ b/public/locales/it/modules/dashdot.json @@ -85,7 +85,7 @@ "noInformation": "Impossibile reperire informazioni da dash. - è in esecuzione l'ultima versione?", "protocolDowngrade": { "title": "Rilevato downgrade del protocollo", - "text": "Il protocollo all'istanza Dash. è in fase di downgrade. Questo è un rischio per la sicurezza, poiché HTTP non è crittografato e gli aggressori potrebbero abusare di questa connessione. Assicurarsi che Dash. sia in esecuzione anche su HTTPS o fare il downgrade di Homarr su HTTP (non consigliato)." + "text": "La connessione all'istanza di Dash. utilizza HTTP. Questo è un rischio per la sicurezza, poiché l'HTTP non è criptato e gli aggressori potrebbero abusare di questa connessione. Assicurarsi che Dash. utilizzi HTTPS o declassare Homarr a HTTP (non consigliato)." } }, "graphs": { diff --git a/public/locales/it/modules/iframe.json b/public/locales/it/modules/iframe.json index 2083273f6..640afe963 100644 --- a/public/locales/it/modules/iframe.json +++ b/public/locales/it/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "Incorpora qualsiasi contenuto da Internet. Alcuni siti web possono limitare l'accesso.", "settings": { - "title": "Impostazioni IFrame", + "title": "Impostazioni iFrame", "embedUrl": { "label": "Incorpora URL" }, @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Inserisci un URL", + "title": "", "text": "Assicurarsi di aver inserito un indirizzo valido nella configurazione del widget" } } diff --git a/public/locales/it/modules/media-requests-list.json b/public/locales/it/modules/media-requests-list.json new file mode 100644 index 000000000..da452e2d8 --- /dev/null +++ b/public/locales/it/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Richieste Media", + "description": "Vedi un elenco di tutte le richieste multimediali dalla tua istanza Overseerr o Jellyseerr", + "settings": { + "title": "Elenco richieste multimediali" + } + }, + "noRequests": "Nessuna richiesta trovata. Assicurati di aver configurato correttamente le tue app.", + "pending": "Ci sono {countPendingApproval} richieste in attesa di approvazione.", + "nonePending": "Al momento non ci sono approvazioni in attesa. È tutto pronto!", + "state": { + "approved": "Approvato", + "pendingApproval": "In attesa di approvazione", + "declined": "Rifiutato" + } +} diff --git a/public/locales/it/modules/media-requests-stats.json b/public/locales/it/modules/media-requests-stats.json new file mode 100644 index 000000000..50e8f8119 --- /dev/null +++ b/public/locales/it/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Statistiche richiesta multimediale", + "description": "Statistiche sulle richieste multimediali", + "settings": { + "title": "Statistiche richieste multimediali" + } + }, + "stats": { + "pending": "In attesa di approvazione", + "tvRequests": "Richieste TV", + "movieRequests": "Richieste film" + } +} diff --git a/public/locales/it/modules/rss.json b/public/locales/it/modules/rss.json index dd5023117..61a716d66 100644 --- a/public/locales/it/modules/rss.json +++ b/public/locales/it/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "Widget RSS", - "description": "Ottiene gli oggetti da un feed RSS e li visualizza. Utilizzati comunemente per le notizie online", + "description": "", "settings": { "title": "Impostazioni del widget RSS", "rssFeedUrl": { - "label": "RSS feed url" + "label": "RSS feed url", + "description": "Gli url dei feed RSS che si desidera visualizzare." + }, + "refreshInterval": { + "label": "Intervallo di aggiornamento (in secondi)" } - } - }, - "card": { - "errors": { - "general": { - "title": "Impossibile recuperare il feed RSS", - "text": "Si è verificato un problema nel raggiungere il feed RSS. Assicurarsi di aver configurato correttamente il feed e di utilizzare un url RSS valido, che corrisponda alle specifiche standard ufficiali. Dopo aver aggiornato il feed, potrebbe essere necessario salvare la dashboard e aggiornare la pagina." + }, + "card": { + "errors": { + "general": { + "title": "Impossibile recuperare il feed RSS", + "text": "Si è verificato un problema nel raggiungere il feed RSS. Assicurarsi di aver configurato correttamente il feed RSS e di utilizzare un url valido. Gli URL devono corrispondere alle specifiche standard ufficiali. Dopo aver aggiornato il feed, potrebbe essere necessario salvare la dashboard e aggiornare la pagina." + } } } } diff --git a/public/locales/it/modules/torrents-status.json b/public/locales/it/modules/torrents-status.json index 7b5ea8e30..8a8f61129 100644 --- a/public/locales/it/modules/torrents-status.json +++ b/public/locales/it/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Aggiungi un client Torrent supportato per visualizzare i download attuali" }, "generic": { - "title": "Si è verificato un errore inaspettato", + "title": "Si è verificato un errore imprevisto", "text": "Homarr non è riuscito a comunicare con i client Torrent. Controlla la tua configurazione" } }, diff --git a/public/locales/it/modules/video-stream.json b/public/locales/it/modules/video-stream.json index 9ec158a2f..466c69815 100644 --- a/public/locales/it/modules/video-stream.json +++ b/public/locales/it/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "Impostazioni per il widget flusso video", "FeedUrl": { - "label": "Url del feed" + "label": "URL del feed" }, "autoPlay": { - "label": "Auto play" + "label": "Riproduzione automatica" }, "muted": { "label": "Audio mutato" diff --git a/public/locales/it/settings/customization/page-appearance.json b/public/locales/it/settings/customization/page-appearance.json index d3203c811..fd67a31b4 100644 --- a/public/locales/it/settings/customization/page-appearance.json +++ b/public/locales/it/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Titolo meta", - "description": "Il titolo che viene visualizzato come nome della scheda" + "description": "Il titolo visualizzato nella scheda del browser" }, "logo": { "label": "Logo", - "description": "Il logo della dashboard in alto a sinistra" + "description": "Il logo visualizzato in alto a sinistra" }, "favicon": { "label": "Favicon", - "description": "L'icona che viene utilizzata davanti al nome della scheda" + "description": "L'icona visualizzata nella scheda del browser" }, "background": { "label": "Sfondo" }, "customCSS": { "label": "CSS personalizzato", - "description": "Personalizza tutti gli elementi della dashboard, consigliata solo agli utenti esperti", + "description": "Inoltre, personalizza la dashboard utilizzando i CSS, consigliato solo agli utenti esperti", "placeholder": "I CSS personalizzati saranno applicati per ultimi", "applying": "Applicazione CSS..." }, diff --git a/public/locales/it/settings/general/config-changer.json b/public/locales/it/settings/general/config-changer.json index c4cea6d23..65ea2a2e0 100644 --- a/public/locales/it/settings/general/config-changer.json +++ b/public/locales/it/settings/general/config-changer.json @@ -36,7 +36,7 @@ }, "confirmDeletion": { "title": "Conferma l'eliminazione della configurazione", - "warningText": "Stai per cancellare '{{configName}}'", + "warningText": "Siete sicuri di voler cancellare '{{configName}}'", "text": "Si noti che l'eliminazione non è reversibile e i dati andranno persi in modo permanente. Dopo aver fatto clic su questo pulsante, il file verrà eliminato definitivamente dal disco. Assicurarsi di creare un backup adeguato della propria configurazione.", "buttons": { "confirm": "Sì, elimina '{{configName}}'" diff --git a/public/locales/it/widgets/error-boundary.json b/public/locales/it/widgets/error-boundary.json new file mode 100644 index 000000000..04bea4ed9 --- /dev/null +++ b/public/locales/it/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ops, Si è veritivato un errore!", + "buttons": { + "details": "Dettagli", + "tryAgain": "Riprova" + } + }, + "modal": { + "text": "", + "label": "Il tuo errore", + "reportButton": "Segnala questo errore" + } +} \ No newline at end of file diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index cde89d00d..870beefcb 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -9,13 +9,14 @@ "version": "バージョン", "changePosition": "ポジションを変更する", "remove": "削除", - "removeConfirm": "本当に {{item}} を削除したいのですか?", + "removeConfirm": "", + "createItem": "", "sections": { "settings": "設定", "dangerZone": "デンジャーゾーン" }, "secrets": { - "apiKey": "Apiキー", + "apiKey": "", "username": "ユーザー名", "password": "パスワード" }, diff --git a/public/locales/ja/layout/modals/about.json b/public/locales/ja/layout/modals/about.json index 8dd9f4ed9..609fe310a 100644 --- a/public/locales/ja/layout/modals/about.json +++ b/public/locales/ja/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarrは、 sleek, modern dashboardで、すべてのアプリとサービスを指先で操作できるようにします。HOMARを使えば、便利な1つの場所ですべてにアクセスし、コントロールすることができます。Homarrは、あなたが追加したアプリとシームレスに統合され、あなたに貴重な情報を提供し、完全に制御することができます。インストールは簡単で、Homarrは幅広い導入方法をサポートしています。", "contact": "お困りごとやご質問はありませんか?私たちにご連絡ください。", "addToDashboard": "ダッシュボードに追加", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "", "configurationsCount": "", diff --git a/public/locales/ja/layout/modals/add-app.json b/public/locales/ja/layout/modals/add-app.json index a10926bd5..a580fc671 100644 --- a/public/locales/ja/layout/modals/add-app.json +++ b/public/locales/ja/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "一般", - "behaviour": "ビヘイビア", + "behaviour": "", "network": "ネットワーク", "appearance": "外観", "integration": "統合化" diff --git a/public/locales/ja/layout/modals/change-position.json b/public/locales/ja/layout/modals/change-position.json index 251afd45d..3327de611 100644 --- a/public/locales/ja/layout/modals/change-position.json +++ b/public/locales/ja/layout/modals/change-position.json @@ -1,8 +1,6 @@ { - "xPosition": "X軸位置", "width": "幅", "height": "高さ", - "yPosition": "Y軸位置", "zeroOrHigher": "0以上", "betweenXandY": "{{min}} と {{max}}の間" } \ No newline at end of file diff --git a/public/locales/ja/modules/common.json b/public/locales/ja/modules/common.json index 0715878a7..2b539b6d0 100644 --- a/public/locales/ja/modules/common.json +++ b/public/locales/ja/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "コンフィギュレーションで未使用のパラメータが検出されました
{{key}}.Homarrはこのパラメータを解釈して使用することができません。予期せぬ動作を避けるため、コンフィギュレーションをバックアップし、コンフィギュレーションを修正してください。" + "text": "" } } } diff --git a/public/locales/ja/modules/dashdot.json b/public/locales/ja/modules/dashdot.json index e826ea0f1..be49474b0 100644 --- a/public/locales/ja/modules/dashdot.json +++ b/public/locales/ja/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "ダッシュ", - "description": "Homarr内部の外部Dash.インスタンスのグラフを表示します。", + "description": "", "settings": { "title": "Dash.ウィジェットの設定", "url": { @@ -105,7 +105,7 @@ "title": "CPU" }, "ram": { - "title": "ラム" + "title": "" }, "gpu": { "title": "GPU" diff --git a/public/locales/ja/modules/media-requests-list.json b/public/locales/ja/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/ja/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/ja/modules/media-requests-stats.json b/public/locales/ja/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/ja/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/ja/modules/ping.json b/public/locales/ja/modules/ping.json index 977b86eed..38f4eecc3 100644 --- a/public/locales/ja/modules/ping.json +++ b/public/locales/ja/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "ピング", - "description": "指定されたURLのHTTPレスポンスコードに応じたステータスインジケータを表示します。" + "description": "" }, "states": { "online": "オンライン {{response}}", diff --git a/public/locales/ja/modules/rss.json b/public/locales/ja/modules/rss.json index 230d75cf5..0ae05342b 100644 --- a/public/locales/ja/modules/rss.json +++ b/public/locales/ja/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/ja/modules/torrents-status.json b/public/locales/ja/modules/torrents-status.json index 6c9f2ed6e..97d5c8e5c 100644 --- a/public/locales/ja/modules/torrents-status.json +++ b/public/locales/ja/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "サポートされているTorrentクライアントを追加して、現在のダウンロードを表示します。" }, "generic": { - "title": "予期せぬエラーが発生しました", + "title": "", "text": "HomarrはあなたのTorrentクライアントと通信できませんでした。設定を確認してください。" } }, diff --git a/public/locales/ja/settings/customization/general.json b/public/locales/ja/settings/customization/general.json index ee9d30b5a..c1e57c3d5 100644 --- a/public/locales/ja/settings/customization/general.json +++ b/public/locales/ja/settings/customization/general.json @@ -14,7 +14,7 @@ "description": "" }, "appereance": { - "name": "", + "name": "外観", "description": "" } } diff --git a/public/locales/ja/settings/general/config-changer.json b/public/locales/ja/settings/general/config-changer.json index 6d8144629..b2df43695 100644 --- a/public/locales/ja/settings/general/config-changer.json +++ b/public/locales/ja/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "コンフィグの削除を確認する", - "warningText": "あなたが削除しようとしているのは '{{configName}}' です。", - "text": "削除は元に戻すことができず、データは永久に失われることに注意してください。このボタンをクリックした後、ファイルはディスクから永久に削除されます。必ず、設定の適切なバックアップを作成してください。", + "warningText": "", + "text": "", "buttons": { "confirm": "はい、'{{configName}}' を削除してください。" } @@ -57,7 +57,7 @@ "message": "コンフィグ削除の失敗" }, "deleteFailedDefaultConfig": { - "title": "デフォルトのコンフィグを削除できない", + "title": "", "message": "ファイルシステムからコンフィギュレーションが削除されていない" } } diff --git a/public/locales/ja/settings/general/search-engine.json b/public/locales/ja/settings/general/search-engine.json index d47e651ae..e8d096653 100644 --- a/public/locales/ja/settings/general/search-engine.json +++ b/public/locales/ja/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "検索エンジン", "configurationName": "検索エンジンの設定", "tips": { - "generalTip": "複数の接頭辞を使用することができます。これらをクエリの前に追加することで、結果をフィルタリングすることができます。s (ウェブ)、 !t (トレント)、 !y (YouTube)、 !m (メディア).", + "generalTip": "", "placeholderTip": "%s は、クエリのプレースホルダとして使用することができます。" }, "customEngine": { diff --git a/public/locales/ja/widgets/error-boundary.json b/public/locales/ja/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/ja/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index d272e1df7..742a3d56a 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -10,6 +10,7 @@ "changePosition": "", "remove": "제거", "removeConfirm": "", + "createItem": "", "sections": { "settings": "설정", "dangerZone": "위험한 설정" diff --git a/public/locales/ko/layout/modals/about.json b/public/locales/ko/layout/modals/about.json index 8b1597659..b6fe509b3 100644 --- a/public/locales/ko/layout/modals/about.json +++ b/public/locales/ko/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "", "contact": "", "addToDashboard": "", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "", "configurationsCount": "", diff --git a/public/locales/ko/modules/dashdot.json b/public/locales/ko/modules/dashdot.json index 20bfd9994..c8041f55c 100644 --- a/public/locales/ko/modules/dashdot.json +++ b/public/locales/ko/modules/dashdot.json @@ -105,7 +105,7 @@ "title": "CPU" }, "ram": { - "title": "RAM" + "title": "" }, "gpu": { "title": "GPU" diff --git a/public/locales/ko/modules/media-requests-list.json b/public/locales/ko/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/ko/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/ko/modules/media-requests-stats.json b/public/locales/ko/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/ko/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/ko/modules/rss.json b/public/locales/ko/modules/rss.json index 230d75cf5..0ae05342b 100644 --- a/public/locales/ko/modules/rss.json +++ b/public/locales/ko/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/ko/widgets/error-boundary.json b/public/locales/ko/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/ko/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/lol/common.json b/public/locales/lol/common.json index 20e1a6cc7..99661da35 100644 --- a/public/locales/lol/common.json +++ b/public/locales/lol/common.json @@ -9,13 +9,14 @@ "version": "Vershun", "changePosition": "Change Posishun", "remove": "Remoev", - "removeConfirm": "R U Sure Dat U Wants 2 Remoov {{item}} ?", + "removeConfirm": "", + "createItem": "", "sections": { "settings": "Settingz", "dangerZone": "Dangr zoen" }, "secrets": { - "apiKey": "Api key", + "apiKey": "", "username": "Usernaem", "password": "Password" }, diff --git a/public/locales/lol/layout/modals/about.json b/public/locales/lol/layout/modals/about.json index 01b72d566..e1432237d 100644 --- a/public/locales/lol/layout/modals/about.json +++ b/public/locales/lol/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr Iz Sleek, Modern Dashbord Dat Puts All Ov Ur Apps An Servicez At Ur Fingertips. Wif Homarr, U Can Acces An Control Evrythin In Wan Convenient Locashun. Homarr Seamlesly Integratez Wif Teh Apps Uve Addd, Providin U Wif Valuable Informashun An Givin U Complete Control. Installashun Iz Breeze, An Homarr Supports Wide Range Ov Deployment Methodz.", "contact": "Havin Trouble Or Queshuns? Connect Wif Us!", "addToDashboard": "Add 2 Dashbord", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "", "configurationsCount": "", diff --git a/public/locales/lol/layout/modals/add-app.json b/public/locales/lol/layout/modals/add-app.json index 92f4e4a45..9bbb89f6d 100644 --- a/public/locales/lol/layout/modals/add-app.json +++ b/public/locales/lol/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "General", - "behaviour": "Behaviour", + "behaviour": "", "network": "Netwerk", "appearance": "Appearance", "integration": "Integrashun" diff --git a/public/locales/lol/layout/modals/change-position.json b/public/locales/lol/layout/modals/change-position.json index cf3c63cc8..2f7fd9d9a 100644 --- a/public/locales/lol/layout/modals/change-position.json +++ b/public/locales/lol/layout/modals/change-position.json @@ -1,8 +1,6 @@ { - "xPosition": "X Axis Posishun", "width": "Width", "height": "Height", - "yPosition": "Y Axis Posishun", "zeroOrHigher": "0 Or Highr", "betweenXandY": "Tween {{min}} An {{max}}" } \ No newline at end of file diff --git a/public/locales/lol/modules/common.json b/public/locales/lol/modules/common.json index 6b9bf14bd..d540bc813 100644 --- a/public/locales/lol/modules/common.json +++ b/public/locales/lol/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Un-Usd Parametr In Configurashun Detectd
{{key}}. Homarr Iz Unable 2 Interpret An Use Dis Parametr. 2 Avoid Any Unexpectd Behavior, Bak Up Ur Configurashun An Correct Ur Configurashun." + "text": "" } } } diff --git a/public/locales/lol/modules/dashdot.json b/public/locales/lol/modules/dashdot.json index 46af1ed23..223bfdfdd 100644 --- a/public/locales/lol/modules/dashdot.json +++ b/public/locales/lol/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Displays Teh Grafs Ov An External Dash. Instance Inside Ov Homarr.", + "description": "", "settings": { "title": "Settings 4 Dash. Widget", "url": { @@ -105,7 +105,7 @@ "title": "CPU" }, "ram": { - "title": "RAM" + "title": "" }, "gpu": { "title": "GPU" diff --git a/public/locales/lol/modules/media-requests-list.json b/public/locales/lol/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/lol/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/lol/modules/media-requests-stats.json b/public/locales/lol/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/lol/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/lol/modules/rss.json b/public/locales/lol/modules/rss.json index 230d75cf5..0ae05342b 100644 --- a/public/locales/lol/modules/rss.json +++ b/public/locales/lol/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/lol/modules/torrents-status.json b/public/locales/lol/modules/torrents-status.json index abe311f45..90ea4f429 100644 --- a/public/locales/lol/modules/torrents-status.json +++ b/public/locales/lol/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Add Supportd Torrent Client 2 View Ur Current Downloadz" }, "generic": { - "title": "An Unexpectd Error Occurd", + "title": "", "text": "Homarr Wuz Unable 2 Speek Wif Ur Torrent Clients. Plz Check Ur Configurashun" } }, diff --git a/public/locales/lol/settings/customization/general.json b/public/locales/lol/settings/customization/general.json index ee9d30b5a..1199e4c3a 100644 --- a/public/locales/lol/settings/customization/general.json +++ b/public/locales/lol/settings/customization/general.json @@ -14,7 +14,7 @@ "description": "" }, "appereance": { - "name": "", + "name": "Appearance", "description": "" } } diff --git a/public/locales/lol/settings/general/search-engine.json b/public/locales/lol/settings/general/search-engine.json index 6e22ac92e..23cacc48e 100644 --- a/public/locales/lol/settings/general/search-engine.json +++ b/public/locales/lol/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Search engien", "configurationName": "Search Engine Configurashun", "tips": { - "generalTip": "Thar R Multiple Prefixez U Can Use! Addin Thees Infront Ov Ur Query Will Filtr Teh Results. !S (Web), !T (Torrents), !Y (Youtube), An !M (Media).", + "generalTip": "", "placeholderTip": "%s can bees usd as placeholdah 4 teh quewee." }, "customEngine": { diff --git a/public/locales/lol/widgets/error-boundary.json b/public/locales/lol/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/lol/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index 7c6060751..60b5b1cec 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -9,13 +9,14 @@ "version": "Versie", "changePosition": "Positie wijzigen", "remove": "Verwijder", - "removeConfirm": "Weet u zeker dat u {{item}} wilt verwijderen?", + "removeConfirm": "", + "createItem": "", "sections": { "settings": "Instellingen", "dangerZone": "Gevarenzone" }, "secrets": { - "apiKey": "API-sleutel", + "apiKey": "", "username": "Gebruikersnaam", "password": "Wachtwoord" }, diff --git a/public/locales/nl/layout/modals/about.json b/public/locales/nl/layout/modals/about.json index 55c4b01f4..f7fb65dff 100644 --- a/public/locales/nl/layout/modals/about.json +++ b/public/locales/nl/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr is een sterk, modern dashboard dat al je apps en diensten binnen handbereik brengt. Met Homarr heb je toegang tot en controle over alles op één handige locatie. Homarr integreert naadloos met de apps die je hebt toegevoegd en geeft je waardevolle informatie en volledige controle. Installatie is een fluitje van een cent en Homarr ondersteunt een breed scala aan implementatiemethoden.", "contact": "Problemen of vragen? Neem contact met ons op!", "addToDashboard": "Aan dashboard toevoegen", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "Versie configuratieschema", "configurationsCount": "Beschikbare configuraties", diff --git a/public/locales/nl/layout/modals/add-app.json b/public/locales/nl/layout/modals/add-app.json index c3a67bfe0..0fec507b5 100644 --- a/public/locales/nl/layout/modals/add-app.json +++ b/public/locales/nl/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "Algemeen", - "behaviour": "Gedrag", + "behaviour": "", "network": "Netwerk", "appearance": "Opmaak", "integration": "Integratie" diff --git a/public/locales/nl/layout/modals/change-position.json b/public/locales/nl/layout/modals/change-position.json index bfd2993ea..3ae44f1ba 100644 --- a/public/locales/nl/layout/modals/change-position.json +++ b/public/locales/nl/layout/modals/change-position.json @@ -1,8 +1,6 @@ { - "xPosition": "X-as positie", "width": "Breedte", "height": "Hoogte", - "yPosition": "Y-as positie", "zeroOrHigher": "0 of hoger", "betweenXandY": "Tussen {{min}} en {{max}}" } \ No newline at end of file diff --git a/public/locales/nl/modules/common.json b/public/locales/nl/modules/common.json index 29ea4b19f..52f6fdc3e 100644 --- a/public/locales/nl/modules/common.json +++ b/public/locales/nl/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Ongebruikte parameter in configuratie gedetecteerd
{{key}}. Homarr kan deze parameter niet interpreteren en gebruiken. Maak een back-up van uw configuratie en corrigeer uw configuratie om onverwacht gedrag te voorkomen." + "text": "" } } } diff --git a/public/locales/nl/modules/dashdot.json b/public/locales/nl/modules/dashdot.json index 4c8a28716..b0e8436e3 100644 --- a/public/locales/nl/modules/dashdot.json +++ b/public/locales/nl/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Toont de grafieken van een externe Dash. instantie binnen Homarr.", + "description": "", "settings": { "title": "Instellingen voor Dash. widget", "url": { @@ -85,7 +85,7 @@ "noInformation": "Kan geen informatie verkrijgen van dash. - gebruikt u de laatste versie?", "protocolDowngrade": { "title": "Protocol downgrade gedetecteerd", - "text": "Het protocol voor uw Dash. instantie wordt gedegradeerd. Dit vormt een risico voor de beveiliging, aangezien HTTP ongecodeerd is en aanvallers deze verbinding kunnen misbruiken. Zorg ervoor dat Dash. wordt uitgevoerd op HTTPS of downgrade Homarr naar HTTP (niet aanbevolen)." + "text": "" } }, "graphs": { diff --git a/public/locales/nl/modules/iframe.json b/public/locales/nl/modules/iframe.json index 75830367b..3acc9cb99 100644 --- a/public/locales/nl/modules/iframe.json +++ b/public/locales/nl/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "iFrame", + "name": "", "description": "", "settings": { - "title": "iFrame Instellingen", + "title": "", "embedUrl": { "label": "" }, @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Voer URL in", + "title": "", "text": "Zorg ervoor dat je een geldig adres hebt ingevoerd in de configuratie van je widget" } } diff --git a/public/locales/nl/modules/media-requests-list.json b/public/locales/nl/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/nl/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/nl/modules/media-requests-stats.json b/public/locales/nl/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/nl/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/nl/modules/ping.json b/public/locales/nl/modules/ping.json index 6801f9056..f1769b3db 100644 --- a/public/locales/nl/modules/ping.json +++ b/public/locales/nl/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "Toont een statusindicator op basis van de HTTP-responscode van een gegeven URL." + "description": "" }, "states": { "online": "Online {{response}}", diff --git a/public/locales/nl/modules/rss.json b/public/locales/nl/modules/rss.json index e861987b2..cf6cfae9b 100644 --- a/public/locales/nl/modules/rss.json +++ b/public/locales/nl/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "RSS Widget", - "description": "Pakt de items uit een RSS-feed en geeft ze weer. Wordt vaak gebruikt voor online nieuws", + "description": "", "settings": { "title": "Instellingen voor RSS widget", "rssFeedUrl": { - "label": "RSS feed URL" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "Kan RSS feed niet ophalen", - "text": "Er was een probleem met het bereiken van de RSS feed. Zorg ervoor dat je de feed correct hebt geconfigureerd en een geldige RSS URL gebruikt, die overeenkomt met de officiële standaardspecificatie. Nadat u de feed hebt bijgewerkt, moet u mogelijk uw dashboard opslaan en de pagina vernieuwen." + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/nl/modules/torrents-status.json b/public/locales/nl/modules/torrents-status.json index 6fb2b0ff8..d52912336 100644 --- a/public/locales/nl/modules/torrents-status.json +++ b/public/locales/nl/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Voeg een ondersteunde Torrent-client toe om je huidige downloads te bekijken" }, "generic": { - "title": "Onbekende fout opgetreden", + "title": "", "text": "Homarr kon niet communiceren met je Torrent-clients. Controleer je configuratie" } }, diff --git a/public/locales/nl/modules/video-stream.json b/public/locales/nl/modules/video-stream.json index 979e65b50..7d99b18e0 100644 --- a/public/locales/nl/modules/video-stream.json +++ b/public/locales/nl/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "Instellingen voor videostream-widget", "FeedUrl": { - "label": "Feed URL" + "label": "" }, "autoPlay": { - "label": "Automatisch afspelen" + "label": "" }, "muted": { "label": "Gedempte audio" diff --git a/public/locales/nl/settings/customization/general.json b/public/locales/nl/settings/customization/general.json index c3068a957..cd9900da9 100644 --- a/public/locales/nl/settings/customization/general.json +++ b/public/locales/nl/settings/customization/general.json @@ -14,8 +14,8 @@ "description": "Tegels, logo en PWA aanpassen" }, "appereance": { - "name": "Uiterlijk", - "description": "Pas de achtergrond, kleuren en het uiterlijk van apps aan." + "name": "Opmaak", + "description": "" } } } \ No newline at end of file diff --git a/public/locales/nl/settings/customization/page-appearance.json b/public/locales/nl/settings/customization/page-appearance.json index f22542a73..44dee36c5 100644 --- a/public/locales/nl/settings/customization/page-appearance.json +++ b/public/locales/nl/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Meta Titel", - "description": "De titel, die als uw tabnaam wordt weergegeven" + "description": "" }, "logo": { "label": "Logo", - "description": "Het dashboardlogo linksboven" + "description": "" }, "favicon": { "label": "Favicon", - "description": "Het pictogram, dat wordt gebruik voor de naam van het tabblad" + "description": "" }, "background": { "label": "Achtergrond" }, "customCSS": { "label": "Eigen CSS", - "description": "Alle elementen op je dashboard aanpassen, alleen aanbevolen voor ervaren gebruikers", + "description": "", "placeholder": "Eigen CSS wordt als laatste toegepast", "applying": "CSS toepassen..." }, diff --git a/public/locales/nl/settings/general/config-changer.json b/public/locales/nl/settings/general/config-changer.json index 0a2662f4d..fcfed6199 100644 --- a/public/locales/nl/settings/general/config-changer.json +++ b/public/locales/nl/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "Bevestig de verwijdering van uw configuratie", - "warningText": "Je staat op het punt om '{{configName}}' te verwijderen", - "text": "Houd er rekening mee dat de verwijdering niet onomkeerbaar is en dat uw gegevens permanent verloren gaan. Na het klikken op deze knop wordt het bestand permanent van uw schijf verwijderd. Zorg voor een adequate back-up van uw configuratie.", + "warningText": "", + "text": "", "buttons": { "confirm": "Ja, verwijder '{{configName}}'" } @@ -57,7 +57,7 @@ "message": "Configuratie verwijderen mislukt" }, "deleteFailedDefaultConfig": { - "title": "Standaardconfiguratie kan niet worden verwijderd", + "title": "", "message": "Configuratie is niet verwijderd uit het bestandssysteem" } } diff --git a/public/locales/nl/settings/general/search-engine.json b/public/locales/nl/settings/general/search-engine.json index a52e4d39d..f21f46807 100644 --- a/public/locales/nl/settings/general/search-engine.json +++ b/public/locales/nl/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Zoekmachine", "configurationName": "Zoekmachine configuratie", "tips": { - "generalTip": "Er zijn meerdere voorvoegsels die u kunt gebruiken! Door deze voor uw zoekopdracht toe te voegen worden de resultaten gefilterd. !s (Web), !t (Torrents), !y (YouTube), en !m (Media).", + "generalTip": "", "placeholderTip": "%s kan worden gebruikt als plaatshouder voor de query." }, "customEngine": { diff --git a/public/locales/nl/widgets/error-boundary.json b/public/locales/nl/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/nl/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/no/common.json b/public/locales/no/common.json index 0a3c89969..dd225b18e 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -10,6 +10,7 @@ "changePosition": "Endre posisjon", "remove": "Fjern", "removeConfirm": "Er du sikker på at du vil fjerne {{item}}?", + "createItem": "+ opprett {{item}}", "sections": { "settings": "Innstillinger", "dangerZone": "Faresonen" diff --git a/public/locales/no/layout/modals/about.json b/public/locales/no/layout/modals/about.json index 625aa5679..2539b7c3a 100644 --- a/public/locales/no/layout/modals/about.json +++ b/public/locales/no/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr er et sleek, moderne dashbord som legger alle apper og tjenester ved fingertuppene dine. Med Homarr, kan du få tilgang til og kontrollere alt på et bekvemt sted. Homarr sømløst integrerer med appene du har lagt til, gir deg verdifull informasjon og gir deg full kontroll. Installasjon er en lek, og Homarr støtter en lang rekke distribusjonsmetoder.", "contact": "Har du problemer med eller spørsmål? Ta kontakt med oss!", "addToDashboard": "Legg til på dashbord", + "tip": "Mod refererer til endringstasten din, den er Ctrl og Command/Super/Windows tasten", + "key": "Hurtigtast", + "action": "Handling", + "keybinds": "Hurtigtaster", "metrics": { "configurationSchemaVersion": "Konfigurasjonsskjema versjon", "configurationsCount": "Tilgjengelige konfigurasjoner", @@ -9,6 +13,6 @@ "nodeEnvironment": "Node miljø", "i18n": "Lastet I18n oversettelsesnavneområder", "locales": "Konfigurerte I18n-lokasjoner", - "experimental_disableEditMode": "" + "experimental_disableEditMode": "EXPERIMENTAL: Deaktivere redigeringsmodus" } } \ No newline at end of file diff --git a/public/locales/no/layout/modals/add-app.json b/public/locales/no/layout/modals/add-app.json index b028f8afb..2fe372abb 100644 --- a/public/locales/no/layout/modals/add-app.json +++ b/public/locales/no/layout/modals/add-app.json @@ -41,12 +41,12 @@ "label": "App ikon", "description": "", "autocomplete": { - "title": "", - "text": "" + "title": "Ingen resultater funnet", + "text": "Prøv å bruke et mer spesifikt søkeord. Hvis du ikke finner det ønskede ikonet, lim inn URL adressen for et egendefinert ikon" }, "noItems": { - "title": "", - "text": "" + "title": "Laster eksterne ikoner", + "text": "Dette kan ta noen sekunder" } } }, diff --git a/public/locales/no/modules/common.json b/public/locales/no/modules/common.json index ca115f068..c595fe213 100644 --- a/public/locales/no/modules/common.json +++ b/public/locales/no/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Ubrukt parameter i konfigurasjon oppdaget
{{key}}. Homarr kan ikke tolke og bruke dette parameteret. For å unngå uventet oppførsel, sikkerhetskopier din konfigurasjon og korriger konfigurasjonen." + "text": "" } } } diff --git a/public/locales/no/modules/dashdot.json b/public/locales/no/modules/dashdot.json index fe2176c7b..f580b8d8f 100644 --- a/public/locales/no/modules/dashdot.json +++ b/public/locales/no/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Viser grafene til en ekstern Dash. Eksempel inni av Homarr.", + "description": "Viser grafene til en ekstern Dash. Instanse inne i Homarr.", "settings": { "title": "Innstillinger for Dash. widget", "url": { @@ -11,68 +11,68 @@ "label": "Vis prosentandel" }, "columns": { - "label": "" + "label": "Visningskolonner" }, "graphHeight": { - "label": "" + "label": "Høyde på grafer" }, "graphsOrder": { - "label": "", + "label": "Grafer (Rekkefølge)", "storage": { "label": "Lagring", "enabled": { - "label": "" + "label": "Vis i widget" }, "span": { - "label": "" + "label": "Kolonne spenn" }, "compactView": { - "label": "" + "label": "Vis som tekst (kompakt)" }, "multiView": { - "label": "" + "label": "Vis som multi-disk-visning" } }, "network": { "label": "Nettverk", "enabled": { - "label": "" + "label": "Vis i widget" }, "span": { - "label": "" + "label": "Kolonne spenn" }, "compactView": { - "label": "" + "label": "Vis som tekst (kompakt)" } }, "cpu": { "label": "CPU", "enabled": { - "label": "" + "label": "Vis i widget" }, "span": { - "label": "" + "label": "Kolonne spenn" }, "multiView": { - "label": "" + "label": "Vis som multi-kjerne-visning" } }, "ram": { - "label": "", + "label": "RAM", "enabled": { - "label": "" + "label": "Vis i widget" }, "span": { - "label": "" + "label": "Kolonne spenn" } }, "gpu": { "label": "GPU", "enabled": { - "label": "" + "label": "Vis i widget" }, "span": { - "label": "" + "label": "Kolonne spenn" } } } @@ -85,7 +85,7 @@ "noInformation": "Kan ikke hente informasjon fra dash. - kjører du den nyeste versjonen?", "protocolDowngrade": { "title": "Oppdaget protokollnedgradering", - "text": "Protokollen til Dash. instansen blir nedgradert. Dette er sikkerhetsrisiko, siden HTTP er ukryptert og angripere kan misbruke denne tilkoblingen. Kontroller at Dash. kjører på HTTPS for eller nedgraderer Homarr til HTTP (ikke anbefalt)." + "text": "Tilkoblingen til Dash. Instansen bruker HTTP. Dette er en sikkerhetsrisiko, fordi HTTP er ukryptert og angripere kan misbruke denne tilkoblingen. Kontroller at Dash. bruker HTTPS eller nedgrader Homarr til HTTP (ikke anbefalt)." } }, "graphs": { diff --git a/public/locales/no/modules/iframe.json b/public/locales/no/modules/iframe.json index 2b9730307..e4477d402 100644 --- a/public/locales/no/modules/iframe.json +++ b/public/locales/no/modules/iframe.json @@ -1,14 +1,14 @@ { "descriptor": { - "name": "IFrame", - "description": "", + "name": "iFrame", + "description": "Bygg inn innhold fra Internett. Noen nettsteder kan begrense adgang.", "settings": { - "title": "", + "title": "iFrame innstillinger", "embedUrl": { - "label": "" + "label": "Bygg inn URL" }, "allowFullScreen": { - "label": "" + "label": "Tillat fullskjerm" } } }, @@ -16,7 +16,7 @@ "errors": { "noUrl": { "title": "", - "text": "" + "text": "Sørg for at du har angitt en gyldig adresse i konfigurasjonen av widgeten din" } } } diff --git a/public/locales/no/modules/media-requests-list.json b/public/locales/no/modules/media-requests-list.json new file mode 100644 index 000000000..b3314c954 --- /dev/null +++ b/public/locales/no/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Media forespørsler", + "description": "Se en liste over alle medieforespørsler fra din Overseerr eller Jellyseerr instans", + "settings": { + "title": "Liste over media forespørsler" + } + }, + "noRequests": "Ingen forespørsler funnet. Vennligst skjekk at du har konfigurert appene dine riktig.", + "pending": "Det er {countPendingApproval} forespørsler som venter på en godkjenning.", + "nonePending": "Det er for tiden ingen ventende godkjenninger. Alt er klart!", + "state": { + "approved": "Godkjent", + "pendingApproval": "Venter på godkjenning", + "declined": "Avvist" + } +} diff --git a/public/locales/no/modules/media-requests-stats.json b/public/locales/no/modules/media-requests-stats.json new file mode 100644 index 000000000..eee47108d --- /dev/null +++ b/public/locales/no/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Statistikk for mediaforespørsler", + "description": "Statistikk om dine medieforespørsler", + "settings": { + "title": "Statistikk for mediaforespørsler" + } + }, + "stats": { + "pending": "Venter på godkjenning", + "tvRequests": "TV forespørsler", + "movieRequests": "Film forespørsler" + } +} diff --git a/public/locales/no/modules/media-server.json b/public/locales/no/modules/media-server.json index 2be958199..92e84e4b6 100644 --- a/public/locales/no/modules/media-server.json +++ b/public/locales/no/modules/media-server.json @@ -1,23 +1,23 @@ { "descriptor": { - "name": "", - "description": "", + "name": "Medieserver", + "description": "Samhandle med din Jellyfin eller Plex medieserver", "settings": { - "title": "" + "title": "Innstillinger for media server widget" } }, "card": { "table": { "header": { - "session": "", - "user": "", - "currentlyPlaying": "" + "session": "Økt", + "user": "Bruker", + "currentlyPlaying": "Spilles nå" } }, "errors": { "general": { - "title": "", - "text": "" + "title": "Kan ikke laste innhold", + "text": "Kan ikke hente informasjon fra serveren. Skjekk loggene for flere detaljer" } } } diff --git a/public/locales/no/modules/rss.json b/public/locales/no/modules/rss.json index 230d75cf5..868b9d6c1 100644 --- a/public/locales/no/modules/rss.json +++ b/public/locales/no/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { - "name": "", + "name": "RSS widget", "description": "", "settings": { - "title": "", + "title": "Innstillinger for RSS widget", "rssFeedUrl": { - "label": "" + "label": "RSS Feed URL-er", + "description": "URL-ene til RSS-strømmene du vil vise fra." + }, + "refreshInterval": { + "label": "Oppdaterings intervall (i minutter)" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "Kan ikke hente RSS-feed", + "text": "Det oppstod et problem under henting av RSS-feed. Pass på at du har konfigurert RSS-strømmen ved å bruke en gyldig URL. URLer skal være lik den offisielle spesifikasjonen. Etter oppdatering av feeden, må du kanskje oppfriske dashbordet." + } } } } diff --git a/public/locales/no/modules/video-stream.json b/public/locales/no/modules/video-stream.json index a5a7bd13c..1812cb28c 100644 --- a/public/locales/no/modules/video-stream.json +++ b/public/locales/no/modules/video-stream.json @@ -8,7 +8,7 @@ "label": "Feed URL" }, "autoPlay": { - "label": "Automatisk avspilling" + "label": "Autospill" }, "muted": { "label": "Dempet lyd" diff --git a/public/locales/no/settings/customization/page-appearance.json b/public/locales/no/settings/customization/page-appearance.json index b71148926..1d35c749d 100644 --- a/public/locales/no/settings/customization/page-appearance.json +++ b/public/locales/no/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Meta tittel", - "description": "Tittelen som vises som fanenavn" + "description": "Tittelen som vises i nettleserfanen" }, "logo": { "label": "Logo", - "description": "Dashbord logoen øverst til venstre" + "description": "Logoen som vises øverst til venstre" }, "favicon": { "label": "Favicon", - "description": "Ikonet som brukes foran fanenavnet" + "description": "Ikonet som vises i nettleserfanen" }, "background": { "label": "Bakgrunn" }, "customCSS": { "label": "Egendefinert CSS", - "description": "Tilpass alle elementer på dashbordet, anbefales bare for erfarne brukere", + "description": "Videre kan du tilpasse dashbordet ved hjelp av CSS, dette er bare anbefalt for erfarne brukere", "placeholder": "Egendefinert CSS vil bli brukt sist", "applying": "Tar i bruk CSS..." }, diff --git a/public/locales/no/settings/general/config-changer.json b/public/locales/no/settings/general/config-changer.json index 7cb25eb33..f61d87061 100644 --- a/public/locales/no/settings/general/config-changer.json +++ b/public/locales/no/settings/general/config-changer.json @@ -37,7 +37,7 @@ "confirmDeletion": { "title": "Bekreft sletting av konfigurasjonen", "warningText": "Du er i ferd med å slette '{{configName}}'", - "text": "Vær oppmerksom på at slettingen ikke er invertikal, og at dataene dine vil gå tapt permanent. Når du klikker på denne knappen, vil filen slettes permanent fra disken. Pass på å opprette en tilstrekkelig sikkerhetskopi av konfigurasjonen.", + "text": "Vær oppmerksom på at slettingen kan ikke gås tilbake på, og at dataene dine vil gå tapt permanent. Når du klikker på denne knappen vil filen slettes permanent fra disken. Pass på å opprette en tilstrekkelig sikkerhetskopi av konfigurasjonen.", "buttons": { "confirm": "Ja, slett '{{configName}}'" } diff --git a/public/locales/no/widgets/error-boundary.json b/public/locales/no/widgets/error-boundary.json new file mode 100644 index 000000000..fa8a7484f --- /dev/null +++ b/public/locales/no/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Det oppstod en feil!", + "buttons": { + "details": "Detaljer", + "tryAgain": "Prøv igjen" + } + }, + "modal": { + "text": "", + "label": "Din feilmelding", + "reportButton": "Rapporter denne feilen" + } +} \ No newline at end of file diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index aa670b6db..feb853253 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -1,6 +1,6 @@ { "save": "Zapisz", - "about": "O", + "about": "O programie", "cancel": "Anuluj", "close": "Zamknij", "delete": "Usuń", @@ -9,26 +9,27 @@ "version": "Wersja", "changePosition": "Zmiana pozycji", "remove": "Usuń", - "removeConfirm": "Czy jesteś pewien, że chcesz usunąć {{item}} ?", + "removeConfirm": "Czy na pewno chcesz usunąć {{item}}?", + "createItem": "", "sections": { "settings": "Ustawienia", "dangerZone": "Strefa zagrożenia" }, "secrets": { - "apiKey": "Klucz Api", + "apiKey": "Klucz API", "username": "Nazwa użytkownika", "password": "Hasło" }, "tip": "Wskazówka: ", "time": { - "seconds": "sekund", - "minutes": "minut", + "seconds": "sekundy", + "minutes": "minuty", "hours": "godziny" }, "loading": "Ładowanie...", "breakPoints": { "small": "mała", - "medium": "średni", - "large": "duży" + "medium": "średnia", + "large": "duża" } } \ No newline at end of file diff --git a/public/locales/pl/layout/modals/about.json b/public/locales/pl/layout/modals/about.json index 4b0613636..3955e6774 100644 --- a/public/locales/pl/layout/modals/about.json +++ b/public/locales/pl/layout/modals/about.json @@ -2,13 +2,17 @@ "description": "Homarr to elegancka, nowoczesna deska rozdzielcza, dzięki której wszystkie Twoje aplikacje i usługi są na wyciągnięcie ręki. Dzięki Homarr możesz mieć dostęp i kontrolę nad wszystkim w jednym wygodnym miejscu. Homarr płynnie integruje się z dodanymi przez Ciebie aplikacjami, dostarczając Ci cennych informacji i dając Ci pełną kontrolę. Instalacja jest łatwa, a Homarr obsługuje wiele metod wdrażania.", "contact": "Masz problemy lub pytania? Skontaktuj się z nami!", "addToDashboard": "Dodaj do pulpitu nawigacyjnego", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { - "configurationSchemaVersion": "", - "configurationsCount": "", + "configurationSchemaVersion": "Wersja schematu konfiguracji", + "configurationsCount": "Dostępne konfiguracje", "version": "Wersja", - "nodeEnvironment": "", - "i18n": "", - "locales": "", - "experimental_disableEditMode": "" + "nodeEnvironment": "Środowisko węzła", + "i18n": "Załadowane nazwy tłumaczeń I18n", + "locales": "Skonfigurowane lokalizacje I18n", + "experimental_disableEditMode": "EKSPERIMENTAL: Wyłącz tryb edycji" } } \ No newline at end of file diff --git a/public/locales/pl/layout/modals/add-app.json b/public/locales/pl/layout/modals/add-app.json index 91c62ecc0..6e391ac88 100644 --- a/public/locales/pl/layout/modals/add-app.json +++ b/public/locales/pl/layout/modals/add-app.json @@ -41,12 +41,12 @@ "label": "Ikona aplikacji", "description": "", "autocomplete": { - "title": "", - "text": "" + "title": "Nie znaleziono żadnych wyników", + "text": "Spróbuj użyć bardziej konkretnego hasła wyszukiwania. Jeśli nie możesz znaleźć żądanej ikony, wklej adres URL obrazu powyżej, aby wyszukać niestandardową ikonę" }, "noItems": { - "title": "", - "text": "" + "title": "Ładowanie zewnętrznych ikon", + "text": "To może zająć kilka sekund" } } }, diff --git a/public/locales/pl/modules/calendar.json b/public/locales/pl/modules/calendar.json index fd088060c..89e41c4c3 100644 --- a/public/locales/pl/modules/calendar.json +++ b/public/locales/pl/modules/calendar.json @@ -5,7 +5,7 @@ "settings": { "title": "Ustawienia dla widżetu Kalendarz", "useSonarrv4": { - "label": "" + "label": "Użyj API Sonarr v4" }, "sundayStart": { "label": "Rozpoczynaj tydzień od niedzieli" diff --git a/public/locales/pl/modules/common.json b/public/locales/pl/modules/common.json index 0f42e03a8..1ccc1c899 100644 --- a/public/locales/pl/modules/common.json +++ b/public/locales/pl/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Wykryto nieużywany parametr w konfiguracji
{{key}}. Homarr nie jest w stanie zinterpretować i wykorzystać tego parametru. Aby uniknąć nieoczekiwanego zachowania, wykonaj kopię zapasową konfiguracji i popraw konfigurację." + "text": "" } } } diff --git a/public/locales/pl/modules/dashdot.json b/public/locales/pl/modules/dashdot.json index 658185860..2387f215e 100644 --- a/public/locales/pl/modules/dashdot.json +++ b/public/locales/pl/modules/dashdot.json @@ -1,78 +1,78 @@ { "descriptor": { "name": "Dash.", - "description": "Wyświetla wykresy zewnętrznej instancji Dash. wewnątrz Homarr.", + "description": "Wyświetla wykresy zewnętrznego Dash. Instancja wewnątrz Homarr.", "settings": { "title": "Ustawienia dla widgetu Dash.", "url": { "label": "Adres URL usługi Dash." }, "usePercentages": { - "label": "" + "label": "Wyświetl procenty" }, "columns": { - "label": "" + "label": "Wyświetl kolumny" }, "graphHeight": { - "label": "" + "label": "Wysokość wykresów" }, "graphsOrder": { - "label": "", + "label": "Wykresy (kolejność)", "storage": { "label": "Pamięć", "enabled": { - "label": "" + "label": "Pokaż w widżecie" }, "span": { - "label": "" + "label": "Rozpiętość kolumn" }, "compactView": { - "label": "" + "label": "Pokaż jako tekst (kompaktowy)" }, "multiView": { - "label": "" + "label": "Pokaż jako widok wielordzeniowy" } }, "network": { "label": "Sieć", "enabled": { - "label": "" + "label": "Pokaż w widżecie" }, "span": { - "label": "" + "label": "Rozpiętość kolumn" }, "compactView": { - "label": "" + "label": "Pokaż jako tekst (kompaktowy)" } }, "cpu": { "label": "CPU", "enabled": { - "label": "" + "label": "Pokaż w widżecie" }, "span": { - "label": "" + "label": "Rozpiętość kolumn" }, "multiView": { - "label": "" + "label": "Pokaż jako widok wielordzeniowy" } }, "ram": { - "label": "", + "label": "RAM", "enabled": { - "label": "" + "label": "Pokaż w widżecie" }, "span": { - "label": "" + "label": "Rozpiętość kolumn" } }, "gpu": { "label": "GPU", "enabled": { - "label": "" + "label": "Pokaż w widżecie" }, "span": { - "label": "" + "label": "Rozpiętość kolumn" } } } @@ -84,8 +84,8 @@ "noService": "Nie znaleziono usługi Dash. Proszę dodać ją do pulpitu Homarra lub ustawić adres URL usługi Dash. w opcjach modułu", "noInformation": "Nie można uzyskać informacji z dash. - używasz najnowszej wersji?", "protocolDowngrade": { - "title": "", - "text": "" + "title": "Wykryto obniżenie jakości protokołu", + "text": "Połączenie z instancją Dash. odbywa się przy użyciu protokołu HTTP. Stanowi to zagrożenie dla bezpieczeństwa, ponieważ protokół HTTP jest nieszyfrowany i osoby atakujące mogą nadużywać tego połączenia. Upewnij się, że instancja Dash. korzysta z protokołu HTTPS, lub obniż poziom Homarr do HTTP (niezalecane)." } }, "graphs": { diff --git a/public/locales/pl/modules/iframe.json b/public/locales/pl/modules/iframe.json index 18c90c392..5f4803f77 100644 --- a/public/locales/pl/modules/iframe.json +++ b/public/locales/pl/modules/iframe.json @@ -1,14 +1,14 @@ { "descriptor": { - "name": "", - "description": "", + "name": "iFrame", + "description": "Osadzaj dowolne treści z internetu. Niektóre strony internetowe mogą ograniczać dostęp.", "settings": { - "title": "", + "title": "ustawienia iFrame", "embedUrl": { - "label": "" + "label": "Osadź URL" }, "allowFullScreen": { - "label": "" + "label": "Pozwól na pełny ekran" } } }, @@ -16,7 +16,7 @@ "errors": { "noUrl": { "title": "", - "text": "" + "text": "Upewnij się, że wprowadziłeś poprawny adres w konfiguracji swojego widgetu" } } } diff --git a/public/locales/pl/modules/media-requests-list.json b/public/locales/pl/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/pl/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/pl/modules/media-requests-stats.json b/public/locales/pl/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/pl/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/pl/modules/media-server.json b/public/locales/pl/modules/media-server.json index 2be958199..b74805937 100644 --- a/public/locales/pl/modules/media-server.json +++ b/public/locales/pl/modules/media-server.json @@ -1,23 +1,23 @@ { "descriptor": { - "name": "", - "description": "", + "name": "Serwery mediów", + "description": "Współdziałanie z serwerem multimediów Jellyfin lub Plex", "settings": { - "title": "" + "title": "Ustawienia dla widgetu serwera mediów" } }, "card": { "table": { "header": { - "session": "", - "user": "", - "currentlyPlaying": "" + "session": "Sesja", + "user": "Użytkownik", + "currentlyPlaying": "Aktualnie odtwarzane" } }, "errors": { "general": { - "title": "", - "text": "" + "title": "Nie można załadować zawartości", + "text": "Nie udało się pobrać informacji z serwera. Proszę sprawdzić logi, aby uzyskać więcej szczegółów" } } } diff --git a/public/locales/pl/modules/ping.json b/public/locales/pl/modules/ping.json index 6c52fab1a..02d75f947 100644 --- a/public/locales/pl/modules/ping.json +++ b/public/locales/pl/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "Wyświetla wskaźnik stanu zależny od kodu odpowiedzi HTTP danego adresu URL." + "description": "Wyświetla wskaźnik stanu w zależności od kodu odpowiedzi HTTP danego adresu URL." }, "states": { "online": "Dostępny {{response}}", diff --git a/public/locales/pl/modules/rss.json b/public/locales/pl/modules/rss.json index 230d75cf5..8107055fa 100644 --- a/public/locales/pl/modules/rss.json +++ b/public/locales/pl/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { - "name": "", + "name": "Widget RSS", "description": "", "settings": { - "title": "", + "title": "Ustawienia dla widgetu RSS", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/pl/modules/video-stream.json b/public/locales/pl/modules/video-stream.json index 539daa1c4..e84c69ea3 100644 --- a/public/locales/pl/modules/video-stream.json +++ b/public/locales/pl/modules/video-stream.json @@ -1,24 +1,24 @@ { "descriptor": { - "name": "", - "description": "", + "name": "Strumień wideo", + "description": "Osadź strumień wideo lub wideo z kamery lub strony internetowej", "settings": { - "title": "", + "title": "Ustawienia dla widżetu strumienia wideo", "FeedUrl": { - "label": "" + "label": "Adres URL kanału" }, "autoPlay": { - "label": "" + "label": "Autoodtwarzanie" }, "muted": { - "label": "" + "label": "Wyciszony dźwięk" }, "controls": { - "label": "" + "label": "Sterowanie odtwarzaczem wideo" } } }, "errors": { - "invalidStream": "" + "invalidStream": "Nieprawidłowy strumień" } } \ No newline at end of file diff --git a/public/locales/pl/settings/common.json b/public/locales/pl/settings/common.json index 3a8ac0589..b418f81c6 100644 --- a/public/locales/pl/settings/common.json +++ b/public/locales/pl/settings/common.json @@ -10,19 +10,19 @@ }, "credits": { "madeWithLove": "Wykonane z ❤️ przez @", - "thirdPartyContent": "", + "thirdPartyContent": "Zobacz zawartość firm trzecich", "thirdPartyContentTable": { - "dependencyName": "", + "dependencyName": "Zależność", "dependencyVersion": "Wersja" } }, "grow": "Rozwijaj siatkę (zajmij całą przestrzeń)", "layout": { "preview": { - "title": "", - "subtitle": "" + "title": "Podgląd", + "subtitle": "Zmiany zapisywane są automatycznie" }, - "divider": "", + "divider": "Opcje układu", "main": "Główna", "sidebar": "Pasek boczny", "cannotturnoff": "Nie można wyłączyć", diff --git a/public/locales/pl/settings/customization/color-selector.json b/public/locales/pl/settings/customization/color-selector.json index 020b5f898..61115487b 100644 --- a/public/locales/pl/settings/customization/color-selector.json +++ b/public/locales/pl/settings/customization/color-selector.json @@ -1,3 +1,4 @@ { + "colors": "Kolory", "suffix": "{{color}} kolor" } \ No newline at end of file diff --git a/public/locales/pl/settings/customization/general.json b/public/locales/pl/settings/customization/general.json index ee9d30b5a..69e74c464 100644 --- a/public/locales/pl/settings/customization/general.json +++ b/public/locales/pl/settings/customization/general.json @@ -1,21 +1,21 @@ { - "text": "", + "text": "Personalizacje pozwalają na skonfigurowanie i dostosowanie Homarr do swoich preferencji.", "accordeon": { "layout": { - "name": "", - "description": "" + "name": "Układ", + "description": "Włączanie i wyłączanie elementów w nagłówku i na pulpicie" }, "gridstack": { - "name": "", - "description": "" + "name": "Gridstack", + "description": "Dostosuj zachowanie i kolumny obszaru pulpitu" }, "pageMetadata": { - "name": "", - "description": "" + "name": "Metadane strony", + "description": "Dostosowanie tytułów, logo i PWA" }, "appereance": { - "name": "", - "description": "" + "name": "Wygląd", + "description": "Dostosuj tło, kolory i wygląd aplikacji" } } } \ No newline at end of file diff --git a/public/locales/pl/settings/customization/gridstack.json b/public/locales/pl/settings/customization/gridstack.json index 18c3d8233..ca248f5fa 100644 --- a/public/locales/pl/settings/customization/gridstack.json +++ b/public/locales/pl/settings/customization/gridstack.json @@ -1,10 +1,10 @@ { "columnsCount": { - "labelPreset": "", - "descriptionPreset": "", - "descriptionExceedsPreset": "" + "labelPreset": "Kolumny w rozmiarze {{size}}", + "descriptionPreset": "Liczba kolumn, gdy ekran ma mniej niż {{pixels}} pikseli szerokości", + "descriptionExceedsPreset": "Liczba kolumn, gdy rozmiar ekranu przekracza {{pixels}} pikseli" }, - "unsavedChanges": "", - "applyChanges": "", - "defaultValues": "" + "unsavedChanges": "Masz niezapisane zmiany. Kliknij przycisk Zastosuj zmiany poniżej, aby zastosować i zapisać.", + "applyChanges": "Zastosuj zmiany", + "defaultValues": "Wartości domyślne" } \ No newline at end of file diff --git a/public/locales/pl/settings/customization/page-appearance.json b/public/locales/pl/settings/customization/page-appearance.json index 9d266d1c3..69eb7d86e 100644 --- a/public/locales/pl/settings/customization/page-appearance.json +++ b/public/locales/pl/settings/customization/page-appearance.json @@ -1,28 +1,28 @@ { "pageTitle": { "label": "Tytuł strony", - "description": "" + "description": "Tytuł pulpitu w lewym górnym rogu" }, "metaTitle": { "label": "Meta Title", - "description": "" + "description": "Tytuł wyświetlany w karcie przeglądarki" }, "logo": { "label": "Logo", - "description": "" + "description": "Logo wyświetlane u góry po lewej stronie" }, "favicon": { "label": "Ikona", - "description": "" + "description": "Ikona wyświetlana w karcie przeglądarki" }, "background": { "label": "Tło" }, "customCSS": { "label": "Niestandardowy CSS", - "description": "", + "description": "Jeszcze bardziej dostosuj swój pulpit za pomocą CSS, zalecane tylko dla doświadczonych użytkowników", "placeholder": "Custom CSS zostanie zastosowany jako ostatni", - "applying": "" + "applying": "Zastosowanie CSS..." }, "buttons": { "submit": "Zgłoś" diff --git a/public/locales/pl/settings/general/config-changer.json b/public/locales/pl/settings/general/config-changer.json index e15b0e149..1fd388c78 100644 --- a/public/locales/pl/settings/general/config-changer.json +++ b/public/locales/pl/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "Potwierdź usunięcie konfiguracji", - "warningText": "Chciałbyś usunąć '{{configName}}'", - "text": "Należy pamiętać, że usunięcie nie jest odwracalne i dane zostaną trwale utracone. Po kliknięciu tego przycisku plik zostanie trwale usunięty z dysku. Upewnij się, że stworzyłeś odpowiednią kopię zapasową swojej konfiguracji.", + "warningText": "Właśnie zamierzasz usunąć '{{configName}}'", + "text": "Pamiętaj, że usunięcie jest nieodwracalne, a dane zostaną utracone na stałe. Po kliknięciu tego przycisku plik zostanie trwale usunięty z dysku. Upewnij się, że stworzysz kopię zapasową swojej konfiguracji.", "buttons": { "confirm": "Tak, usuń \"{{configName}}" } @@ -57,7 +57,7 @@ "message": "Nie udało się usunąć konfiguracji" }, "deleteFailedDefaultConfig": { - "title": "Domyślna konfiguracja nie może być usunięta", + "title": "Domyślna konfiguracja nie może być usunięta.", "message": "Konfiguracja nie została usunięta z systemu plików" } } diff --git a/public/locales/pl/widgets/error-boundary.json b/public/locales/pl/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/pl/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index 7efd7129d..978ae346e 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -9,13 +9,14 @@ "version": "Versão", "changePosition": "Mudar de posição", "remove": "Excluir", - "removeConfirm": "Tem a certeza de que quer remover {{item}} ?", + "removeConfirm": "", + "createItem": "", "sections": { "settings": "Configurações", "dangerZone": "Zona de risco" }, "secrets": { - "apiKey": "Chave Api", + "apiKey": "", "username": "Usuário", "password": "Senha" }, diff --git a/public/locales/pt/layout/modals/about.json b/public/locales/pt/layout/modals/about.json index a66436fbf..65e868009 100644 --- a/public/locales/pt/layout/modals/about.json +++ b/public/locales/pt/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr é um elegante, moderno painel de instrumentos que coloca todas as suas aplicações e serviços na ponta dos seus dedos. Com Homarr, pode aceder e controlar tudo num único local conveniente. Homarr integra-se perfeitamente com as aplicações que adicionou, fornecendo-lhe informações valiosas e dando-lhe um controlo completo. A instalação é tranquila, e Homarr suporta uma vasta gama de métodos de implantação.", "contact": "Com problemas ou perguntas? Ligue-se a nós!", "addToDashboard": "Adicionar ao Painel de instrumentos", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { "configurationSchemaVersion": "Versão do esquema de configuração", "configurationsCount": "Configurações disponíveis", diff --git a/public/locales/pt/layout/modals/add-app.json b/public/locales/pt/layout/modals/add-app.json index e8dc86b96..974cba2be 100644 --- a/public/locales/pt/layout/modals/add-app.json +++ b/public/locales/pt/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "Geral", - "behaviour": "Comportamento", + "behaviour": "", "network": "Rede", "appearance": "Aparência", "integration": "Integração" @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Ícone de aplicação", - "description": "Escolha um ícone a ser exibido no seu painel. Escolha entre {{suggestionsCount}} ícones ou insira sua própria URL", + "description": "", "autocomplete": { "title": "Nenhum resultado encontrado", "text": "Tente usar um termo de pesquisa mais específico. Se não conseguir encontrar o ícone desejado, cole a URL da imagem acima para obter um ícone personalizado" diff --git a/public/locales/pt/layout/modals/change-position.json b/public/locales/pt/layout/modals/change-position.json index 016aaea3a..e27a8718f 100644 --- a/public/locales/pt/layout/modals/change-position.json +++ b/public/locales/pt/layout/modals/change-position.json @@ -1,8 +1,6 @@ { - "xPosition": "Posição do eixo X", "width": "Largura", "height": "Altura", - "yPosition": "Posição do eixo Y", "zeroOrHigher": "0 ou superior", "betweenXandY": "Entre {{min}} e {{max}}" } \ No newline at end of file diff --git a/public/locales/pt/modules/common.json b/public/locales/pt/modules/common.json index b9243bc46..6fa228cf8 100644 --- a/public/locales/pt/modules/common.json +++ b/public/locales/pt/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Parâmetro não utilizado na configuração detectado
{{key}}. Homarr é incapaz de interpretar e utilizar este parâmetro. Para evitar qualquer comportamento inesperado, faça o backup da sua configuração e corrija a sua configuração." + "text": "" } } } diff --git a/public/locales/pt/modules/dashdot.json b/public/locales/pt/modules/dashdot.json index d8be25ae8..58b5b8ed2 100644 --- a/public/locales/pt/modules/dashdot.json +++ b/public/locales/pt/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Apresenta os gráficos de um Dash. exemplo externo dentro de Homarr.", + "description": "", "settings": { "title": "Definições para o Dash. widget", "url": { @@ -85,7 +85,7 @@ "noInformation": "Não é possível obter informações do Dash. Você está executando a versão mais recente?", "protocolDowngrade": { "title": "Downgrade de protocolo detectado", - "text": "O protocolo da sua instancia Dash. está sendo inseguro. Uma vez que HTTP não é criptografado e os invasores podem abusar dessa conexão. Certifique-se de que o Dash. está sendo executado em HTTPS ou configure Homarr para HTTP (não recomendado)." + "text": "" } }, "graphs": { diff --git a/public/locales/pt/modules/iframe.json b/public/locales/pt/modules/iframe.json index d1786265a..23178e2b7 100644 --- a/public/locales/pt/modules/iframe.json +++ b/public/locales/pt/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "", "description": "Incorporar qualquer conteúdo da internet. Alguns sites podem restringir o acesso.", "settings": { - "title": "Configurações do IFrame", + "title": "", "embedUrl": { "label": "Incorporar URL" }, @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Insira uma URL", + "title": "", "text": "Certifique-se de que você inseriu um endereço válido na configuração do seu widget" } } diff --git a/public/locales/pt/modules/media-requests-list.json b/public/locales/pt/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/pt/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/pt/modules/media-requests-stats.json b/public/locales/pt/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/pt/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/pt/modules/ping.json b/public/locales/pt/modules/ping.json index f515961c4..c2dc22556 100644 --- a/public/locales/pt/modules/ping.json +++ b/public/locales/pt/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Latência", - "description": "Apresenta um indicador de estado dependente do código de resposta HTTP de um determinado URL." + "description": "" }, "states": { "online": "Online {{response}}", diff --git a/public/locales/pt/modules/rss.json b/public/locales/pt/modules/rss.json index ef0b67e7f..940902a73 100644 --- a/public/locales/pt/modules/rss.json +++ b/public/locales/pt/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "Widget RSS", - "description": "Pega os itens de um feed RSS e os exibe. Geralmente usado para notícias on-line", + "description": "", "settings": { "title": "Configurações para o widget RSS", "rssFeedUrl": { - "label": "URL do feed RSS" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "Não foi possível recuperar o feed RSS", - "text": "Houve um problema ao alcançar o feed RSS. Certifique-se de que você configurou o feed corretamente e use uma URL de RSS válido, e que corresponda à especificação padrão oficial. Depois de atualizar o feed, talvez seja necessário salvar o painel de controle e atualizar a página." + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/pt/modules/torrents-status.json b/public/locales/pt/modules/torrents-status.json index b765229b0..554f8fac7 100644 --- a/public/locales/pt/modules/torrents-status.json +++ b/public/locales/pt/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Adicione um cliente Torrent suportado para ver os seus downloads actuais" }, "generic": { - "title": "Ocorreu um erro inesperado", + "title": "", "text": "Homarr foi incapaz de comunicar com os seus clientes Torrent. Por favor, verifique a sua configuração" } }, diff --git a/public/locales/pt/modules/video-stream.json b/public/locales/pt/modules/video-stream.json index b3e624dcd..27fea2dfc 100644 --- a/public/locales/pt/modules/video-stream.json +++ b/public/locales/pt/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "Configurações para o widget de transmissão de vídeo", "FeedUrl": { - "label": "url do feed" + "label": "" }, "autoPlay": { - "label": "Reprodução automática" + "label": "" }, "muted": { "label": "Silenciar áudio" diff --git a/public/locales/pt/settings/customization/general.json b/public/locales/pt/settings/customization/general.json index ac26367b1..59da6f909 100644 --- a/public/locales/pt/settings/customization/general.json +++ b/public/locales/pt/settings/customization/general.json @@ -15,7 +15,7 @@ }, "appereance": { "name": "Aparência", - "description": "Personalizar o plano de fundo, cores e aparência dos aplicativos" + "description": "" } } } \ No newline at end of file diff --git a/public/locales/pt/settings/customization/page-appearance.json b/public/locales/pt/settings/customization/page-appearance.json index 1595854eb..3423ae2ab 100644 --- a/public/locales/pt/settings/customization/page-appearance.json +++ b/public/locales/pt/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Meta Título", - "description": "O título, que está sendo exibido como o nome da sua aba" + "description": "" }, "logo": { "label": "Logo", - "description": "O logotipo do painel no canto superior esquerdo" + "description": "" }, "favicon": { "label": "Favicon", - "description": "O ícone, que está sendo usado na frente do nome da sua aba" + "description": "" }, "background": { "label": "Antecedentes" }, "customCSS": { "label": "CSS Personalizado", - "description": "Personalize todos os elementos no seu painel, recomendado apenas para usuários experientes", + "description": "", "placeholder": "O CSS personalizado será aplicado por último", "applying": "Aplicando CSS..." }, diff --git a/public/locales/pt/settings/general/config-changer.json b/public/locales/pt/settings/general/config-changer.json index e981d4ba8..776be67a3 100644 --- a/public/locales/pt/settings/general/config-changer.json +++ b/public/locales/pt/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "Confirme a eliminação da sua configuração", - "warningText": "Está prestes a eliminar '{{configName}}'", - "text": "Note, por favor, que a eliminação não é invertível e os seus dados serão perdidos permanentemente. Depois de clicar neste botão, o ficheiro será apagado permanentemente do seu disco. Assegure-se de criar uma cópia de segurança adequada da sua configuração.", + "warningText": "", + "text": "", "buttons": { "confirm": "Sim, eliminar '{{configName}}'" } @@ -57,7 +57,7 @@ "message": "A configuração de apagar falhou" }, "deleteFailedDefaultConfig": { - "title": "A configuração por defeito não pode ser apagada", + "title": "", "message": "A configuração não foi apagada do sistema de ficheiros" } } diff --git a/public/locales/pt/settings/general/search-engine.json b/public/locales/pt/settings/general/search-engine.json index 5a8225bf3..346042375 100644 --- a/public/locales/pt/settings/general/search-engine.json +++ b/public/locales/pt/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Motor de busca", "configurationName": "Configuração do motor de busca", "tips": { - "generalTip": "Há vários prefixos que pode usar! A adição destes infratores da sua consulta irá filtrar os resultados. !s (Web), !t (Torrents), !y (YouTube), e !m (Media).", + "generalTip": "", "placeholderTip": "%s pode ser utilizado como um local para a consulta." }, "customEngine": { diff --git a/public/locales/pt/widgets/error-boundary.json b/public/locales/pt/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/pt/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index ffb4a3a17..e55aec875 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -9,13 +9,14 @@ "version": "Версия", "changePosition": "Изменить положение", "remove": "Удалить", - "removeConfirm": "Вы действительно хотите удалить {{item}} ?", + "removeConfirm": "Вы действительно хотите удалить {{item}}?", + "createItem": "", "sections": { "settings": "Настройки", "dangerZone": "Опасная зона" }, "secrets": { - "apiKey": "Ключ API", + "apiKey": "API ключ", "username": "Логин", "password": "Пароль" }, diff --git a/public/locales/ru/layout/modals/about.json b/public/locales/ru/layout/modals/about.json index 56bf6e8c0..0adf8ab06 100644 --- a/public/locales/ru/layout/modals/about.json +++ b/public/locales/ru/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr - это элегантная, современная панель, на которой все ваши приложения и сервисы находятся под рукой. С Homarr вы можете получить доступ и управлять всем в одном удобном месте. Homarr легко интегрируется с приложениями, которые вы добавили, предоставляя вам ценную информацию и обеспечивая полный контроль. Установка не займет много времени, Homarr поддерживает широкий спектр методов развертывания.", "contact": "Проблемы или вопросы? Свяжитесь с нами!", "addToDashboard": "Добавить на панель", + "tip": "Mod относится к клавише модификатору, это клавиши Ctrl и Command/Super/Windows", + "key": "Горячие клавиши", + "action": "Действие", + "keybinds": "Сочетания клавиш", "metrics": { "configurationSchemaVersion": "Версия схемы конфигурации", "configurationsCount": "Доступные конфигурации", diff --git a/public/locales/ru/layout/modals/add-app.json b/public/locales/ru/layout/modals/add-app.json index d6ee7e981..4dec3cf77 100644 --- a/public/locales/ru/layout/modals/add-app.json +++ b/public/locales/ru/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Иконка приложения", - "description": "Выберите иконку, которая будет отображаться на вашей панели. Выберите из {{suggestionsCount}} иконок или введите собственный URL-адрес", + "description": "", "autocomplete": { "title": "Результаты не найдены", "text": "Попробуйте использовать более конкретное условие поиска. Если вы не можете найти нужную иконку, вставьте URL-адрес изображения выше для пользовательской иконки" diff --git a/public/locales/ru/modules/common.json b/public/locales/ru/modules/common.json index f5da987d9..eb23e76a3 100644 --- a/public/locales/ru/modules/common.json +++ b/public/locales/ru/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Обнаружен неиспользуемый параметр в конфигурации
{{key}}. Homarr не может интерпретировать и использовать этот параметр. Чтобы избежать неожиданного поведения, сделайте резервную копию конфигурации и исправьте ее." + "text": "" } } } diff --git a/public/locales/ru/modules/dashdot.json b/public/locales/ru/modules/dashdot.json index f071ab01f..9a2f5f981 100644 --- a/public/locales/ru/modules/dashdot.json +++ b/public/locales/ru/modules/dashdot.json @@ -21,7 +21,7 @@ "storage": { "label": "Хранилище", "enabled": { - "label": "" + "label": "Показать в виджете" }, "span": { "label": "Размеры столбцов" @@ -30,13 +30,13 @@ "label": "Показать в виде текста (компактный)" }, "multiView": { - "label": "" + "label": "Показать несколько дисков" } }, "network": { "label": "Сеть", "enabled": { - "label": "" + "label": "Показать в виджете" }, "span": { "label": "Размеры столбцов" @@ -48,19 +48,19 @@ "cpu": { "label": "ЦП", "enabled": { - "label": "" + "label": "Показать в виджете" }, "span": { "label": "Размеры столбцов" }, "multiView": { - "label": "" + "label": "Показать многоядерный вид" } }, "ram": { "label": "ОЗУ", "enabled": { - "label": "" + "label": "Показать в виджете" }, "span": { "label": "Размеры столбцов" @@ -69,7 +69,7 @@ "gpu": { "label": "ГП", "enabled": { - "label": "" + "label": "Показать в виджете" }, "span": { "label": "Размеры столбцов" @@ -85,7 +85,7 @@ "noInformation": "Не удается получить информацию из Dash. - Вы используете последнюю версию?", "protocolDowngrade": { "title": "Обнаружено понижение версии протокола соединения", - "text": "Понижение версии протокола соединения с Dash. Это является угрозой безопасности, так как протокол HTTP не зашифрован и злоумышленники могут перехватить данное соединение. Убедитесь, что Dash. работает также и на протоколе HTTPS, или переведите Homarr на HTTP (не рекомендуется)." + "text": "Соединение с вашим экземпляром Dash. использует HTTP. Это представляет угрозу безопасности, потому что HTTP не зашифрован и злоумышленники могут злоупотреблять этим соединением. Убедитесь, что Dash. использует HTTPS, или переведите Homarr на HTTP (не рекомендуется)." } }, "graphs": { diff --git a/public/locales/ru/modules/iframe.json b/public/locales/ru/modules/iframe.json index 51071876d..6e2d447fa 100644 --- a/public/locales/ru/modules/iframe.json +++ b/public/locales/ru/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "Встраивать любой контент из интернета. Некоторые веб-сайты могут ограничивать доступ.", "settings": { - "title": "Настройки IFrame", + "title": "Настройки iFrame", "embedUrl": { "label": "Вставить URL-адрес" }, @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Введите URL-адрес", + "title": "", "text": "Убедитесь, что вы ввели действительный адрес в конфигурации вашего виджета" } } diff --git a/public/locales/ru/modules/media-requests-list.json b/public/locales/ru/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/ru/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/ru/modules/media-requests-stats.json b/public/locales/ru/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/ru/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/ru/modules/rss.json b/public/locales/ru/modules/rss.json index fcca56515..40257026f 100644 --- a/public/locales/ru/modules/rss.json +++ b/public/locales/ru/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "Виджет RSS", - "description": "Захватывает элементы из RSS-канала и отображает их. Обычно используется для онлайн-новостей", + "description": "", "settings": { "title": "Настройки для виджета RSS", "rssFeedUrl": { - "label": "URL адрес RSS-канала" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "Не удалось получить RSS-канал", - "text": "Возникла проблема при подключении к RSS-каналу. Убедитесь, что вы'правильно настроили канал и используете действительный URL адрес RSS, соответствующий официальной спецификации. После обновления канала, вам может потребоваться сохранить панель и обновить страницу." + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/ru/modules/video-stream.json b/public/locales/ru/modules/video-stream.json index 6efa4a11b..5fcef2678 100644 --- a/public/locales/ru/modules/video-stream.json +++ b/public/locales/ru/modules/video-stream.json @@ -5,7 +5,7 @@ "settings": { "title": "Настройки для виджета трансляции видео", "FeedUrl": { - "label": "URL-адрес канала" + "label": "URL-адрес потока" }, "autoPlay": { "label": "Автовоспроизведение" diff --git a/public/locales/ru/settings/customization/page-appearance.json b/public/locales/ru/settings/customization/page-appearance.json index d4637e6de..6bdcd025e 100644 --- a/public/locales/ru/settings/customization/page-appearance.json +++ b/public/locales/ru/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Мета-заголовок", - "description": "Заголовок, который отображается как имя вкладки" + "description": "Заголовок, который отображается на вкладке вашего браузера" }, "logo": { "label": "Логотип", - "description": "Логотип панели в левом верхнем углу" + "description": "Логотип, который отображается в верхнем левом углу" }, "favicon": { "label": "Иконка", - "description": "Иконка, которая отображается во вкладке перед названием страницы" + "description": "Значок, который отображается на вкладке вашего браузера" }, "background": { "label": "Фон" }, "customCSS": { "label": "Пользовательский CSS", - "description": "Настройте все элементы панели, рекомендуется только для опытных пользователей", + "description": "Далее, настройте свою панель с помощью CSS, рекомендуется только для опытных пользователей", "placeholder": "Пользовательский CSS будет применяться в последнюю очередь", "applying": "Применение CSS..." }, diff --git a/public/locales/ru/settings/general/config-changer.json b/public/locales/ru/settings/general/config-changer.json index d8983405d..89cc10c86 100644 --- a/public/locales/ru/settings/general/config-changer.json +++ b/public/locales/ru/settings/general/config-changer.json @@ -37,7 +37,7 @@ "confirmDeletion": { "title": "Подтвердите удаление вашей конфигурации", "warningText": "Вы собираетесь удалить '{{configName}}'", - "text": "Пожалуйста, обратите внимание, что удаление необратимо и ваши данные будут утеряны навсегда. После нажатия этой кнопки файл будет навсегда удален с диска. Убедитесь, что вы создаете резервную копию конфигурации.", + "text": "Обратите внимание, что удаление не обратимо и ваши данные будут утеряны навсегда. После нажатия этой кнопки файл будет навсегда удален с диска. Убедитесь, что вы создали резервную копию конфигурации.", "buttons": { "confirm": "Да, удалить '{{configName}}'" } diff --git a/public/locales/ru/widgets/error-boundary.json b/public/locales/ru/widgets/error-boundary.json new file mode 100644 index 000000000..3528d8326 --- /dev/null +++ b/public/locales/ru/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Упс, произошла ошибка!", + "buttons": { + "details": "Подробнее", + "tryAgain": "Попробовать снова" + } + }, + "modal": { + "text": "", + "label": "Ваша ошибка", + "reportButton": "Сообщить об ошибке" + } +} \ No newline at end of file diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index ac605abbf..e8d4595e2 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -9,13 +9,14 @@ "version": "Verzia", "changePosition": "Zmeniť pozíciu", "remove": "Odstrániť", - "removeConfirm": "Ste si istý ze chcete odstrániť {{item}} ?", + "removeConfirm": "Ste si istý ze chcete odstrániť {{item}}?", + "createItem": "+ vytvoriť {{item}}", "sections": { "settings": "Nastavenia", "dangerZone": "Nebezpečná zóna" }, "secrets": { - "apiKey": "Api kľúč", + "apiKey": "API kľúč", "username": "Používateľské meno", "password": "Heslo" }, diff --git a/public/locales/sk/layout/modals/about.json b/public/locales/sk/layout/modals/about.json index f61e4254d..66015e4b3 100644 --- a/public/locales/sk/layout/modals/about.json +++ b/public/locales/sk/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr je elegantný, moderný prístrojový panel, ktorý vám poskytne všetky aplikácie a služby na dosah ruky. Pomocou aplikácie Homarr môžete mať prístup ku všetkému a ovládať ho na jednom pohodlnom mieste. Homarr sa bezproblémovo integruje s aplikáciami, ktoré ste pridali, poskytuje vám cenné informácie a umožňuje vám úplnú kontrolu. Inštalácia je jednoduchá a aplikácia Homarr podporuje širokú škálu metód nasadenia.", "contact": "Máte problémy alebo otázky? Spojte sa s nami!", "addToDashboard": "Pridať na prístrojovú dosku", + "tip": "Mod označuje kláves modifikátora, je to Ctrl a Command/Super/Windows", + "key": "Klávesová skratka", + "action": "Akcia", + "keybinds": "Kľúčové väzby", "metrics": { "configurationSchemaVersion": "Verzia konfiguračnej schémy", "configurationsCount": "Dostupné konfigurácie", diff --git a/public/locales/sk/layout/modals/add-app.json b/public/locales/sk/layout/modals/add-app.json index 5e3c79f2f..02082d444 100644 --- a/public/locales/sk/layout/modals/add-app.json +++ b/public/locales/sk/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Ikona aplikácie", - "description": "Vyberte si ikonu, ktorá sa má zobrazovať na prístrojovej doske. Vyberte si z ikon {{suggestionsCount}} alebo zadajte vlastnú adresu URL", + "description": "", "autocomplete": { "title": "Nenašli sa žiadne výsledky", "text": "Skúste použiť konkrétnejší vyhľadávací výraz. Ak nemôžete nájsť požadovanú ikonu, vložte vyššie uvedenú adresu URL obrázka pre vlastnú ikonu" diff --git a/public/locales/sk/modules/common.json b/public/locales/sk/modules/common.json index 748c7a306..fd004e68d 100644 --- a/public/locales/sk/modules/common.json +++ b/public/locales/sk/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Zistil sa nepoužitý parameter v konfigurácii
{{key}}. Homarr nedokáže interpretovať a použiť tento parameter. Ak sa chcete vyhnúť akémukoľvek neočakávanému správaniu, zálohujte svoju konfiguráciu a opravte ju." + "text": "" } } } diff --git a/public/locales/sk/modules/dashdot.json b/public/locales/sk/modules/dashdot.json index db1c21731..5367a9f08 100644 --- a/public/locales/sk/modules/dashdot.json +++ b/public/locales/sk/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Zobrazovať grafy externej Dash. vo vnútri Homarru.", + "description": "Zobrazí grafy externého Dash. Instancie vo vnútri Homarr.", "settings": { "title": "Nastavenia pre Dash. mini aplikácie", "url": { @@ -85,7 +85,7 @@ "noInformation": "Nie je možné získať informácie z Dash. - používate najnovšiu verziu?", "protocolDowngrade": { "title": "Zistený downgrade protokol", - "text": "Protokol k vášmu Dash. inštancii sa downgraduje. Ide o bezpečnostné riziko, pretože HTTP je nešifrované a útočníci by mohli toto pripojenie zneužiť. Uistite sa, že Dash. beží aj na HTTPS alebo downgradujte Homarr na HTTP (neodporúča sa)." + "text": "Pripojenie k vašej inštancii Dash. používa protokol HTTP. To predstavuje bezpečnostné riziko, pretože protokol HTTP nie je šifrovaný a útočníci by mohli toto pripojenie zneužiť. Uistite sa, že Dash. používa HTTPS, alebo znížte úroveň Homarr na HTTP (neodporúča sa)." } }, "graphs": { diff --git a/public/locales/sk/modules/iframe.json b/public/locales/sk/modules/iframe.json index 1200294c7..703f85b85 100644 --- a/public/locales/sk/modules/iframe.json +++ b/public/locales/sk/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "Vložte akýkoľvek obsah z internetu. Niektoré webové stránky môžu obmedziť prístup.", "settings": { - "title": "Nastavenia IFrame", + "title": "Nastavenia iFrame", "embedUrl": { "label": "Vložiť adresu URL" }, @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Zadajte adresu URL", + "title": "", "text": "Skontrolujte, či ste v konfigurácii mini aplikácie zadali platnú adresu" } } diff --git a/public/locales/sk/modules/media-requests-list.json b/public/locales/sk/modules/media-requests-list.json new file mode 100644 index 000000000..b1e3f3ff8 --- /dev/null +++ b/public/locales/sk/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "Žiadosti médií", + "description": "Zobrazenie zoznamu všetkých mediálnych požiadaviek z Overseerr alebo Jellyseerr", + "settings": { + "title": "Zoznam požiadaviek médií" + } + }, + "noRequests": "Nenašli sa žiadne požiadavky. Skontrolujte, či ste správne nakonfigurovali svoje aplikácie.", + "pending": "Na schválenie čaká {countPendingApproval} žiadostí.", + "nonePending": "V súčasnosti nie sú k dispozícii žiadne schválenia. Môžete začať!", + "state": { + "approved": "Schválené", + "pendingApproval": "Čaká sa na schválenie", + "declined": "Odmietnuté" + } +} diff --git a/public/locales/sk/modules/media-requests-stats.json b/public/locales/sk/modules/media-requests-stats.json new file mode 100644 index 000000000..516999fcd --- /dev/null +++ b/public/locales/sk/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "Štatistiky požiadaviek médií", + "description": "Štatistiky o vašich požiadavkách na médiá", + "settings": { + "title": "Štatistiky požiadaviek médií" + } + }, + "stats": { + "pending": "Čakajúce schválenia", + "tvRequests": "TV požiadavky", + "movieRequests": "Filmové požiadavky" + } +} diff --git a/public/locales/sk/modules/rss.json b/public/locales/sk/modules/rss.json index 155069e90..a7292861d 100644 --- a/public/locales/sk/modules/rss.json +++ b/public/locales/sk/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "RSS mini aplikácia", - "description": "Stiahne položky z informačného kanála RSS a zobrazí ich. Bežne sa používa pre online správy", + "description": "", "settings": { "title": "Nastavenia mini aplikácie RSS", "rssFeedUrl": { - "label": "URL adresa RSS" + "label": "URL adresa RSS", + "description": "URL adresy kanálov RSS, ktoré chcete zobraziť." + }, + "refreshInterval": { + "label": "Interval obnovovania (v minútach)" } - } - }, - "card": { - "errors": { - "general": { - "title": "Nie je možné načítať kanál RSS", - "text": "Vyskytol sa problém s kontaktovaním informačného kanála RSS. Uistite sa, že ste ' informačný kanál správne nakonfigurovali a používate platnú adresu URL RSS, ktorá zodpovedá oficiálnej štandardnej špecifikácii. Po aktualizácii informačného kanála možno budete musieť uložiť informačný panel a obnoviť stránku." + }, + "card": { + "errors": { + "general": { + "title": "Nie je možné načítať kanál RSS", + "text": "Vyskytol sa problém s dosiahnutím kanála RSS. Uistite sa, že ste správne nakonfigurovali kanál RSS pomocou platnej adresy URL. Adresy URL by mali zodpovedať oficiálnej špecifikácii. Po aktualizácii kanála bude možno potrebné obnoviť ovládací panel." + } } } } diff --git a/public/locales/sk/modules/video-stream.json b/public/locales/sk/modules/video-stream.json index 669d1b86b..35beee759 100644 --- a/public/locales/sk/modules/video-stream.json +++ b/public/locales/sk/modules/video-stream.json @@ -5,7 +5,7 @@ "settings": { "title": "Nastavenia pre mini aplikáciu videostreamu", "FeedUrl": { - "label": "Url adresa" + "label": "Adresa URL" }, "autoPlay": { "label": "Automatické prehrávanie" diff --git a/public/locales/sk/settings/customization/page-appearance.json b/public/locales/sk/settings/customization/page-appearance.json index f0f5e483b..25d15e87a 100644 --- a/public/locales/sk/settings/customization/page-appearance.json +++ b/public/locales/sk/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Meta názov", - "description": "Názov, ktorý sa zobrazuje ako názov vašej karty" + "description": "Názov zobrazený na karte prehliadača" }, "logo": { "label": "Logo", - "description": "Logo prístrojovej dosky vľavo hore" + "description": "Logo zobrazené vľavo hore" }, "favicon": { "label": "Favicon", - "description": "Ikona, ktorá sa používa pred názvom karty" + "description": "Ikona zobrazená na karte prehliadača" }, "background": { "label": "Pozadie" }, "customCSS": { "label": "Vlastné CSS", - "description": "Prispôsobenie všetkých prvkov na prístrojovej doske, odporúča sa len skúseným používateľom", + "description": "Ďalej si prispôsobte ovládací panel pomocou CSS, odporúča sa len pre skúsených používateľov", "placeholder": "Vlastné CSS sa použije ako posledné", "applying": "Aplikuje sa CSS..." }, diff --git a/public/locales/sk/settings/general/config-changer.json b/public/locales/sk/settings/general/config-changer.json index d7071e548..9ff8cd6e3 100644 --- a/public/locales/sk/settings/general/config-changer.json +++ b/public/locales/sk/settings/general/config-changer.json @@ -37,7 +37,7 @@ "confirmDeletion": { "title": "Potvrdenie odstránenia konfigurácie", "warningText": "Chystáte sa vymazať '{{configName}}'", - "text": "Upozorňujeme, že vymazanie nie je možné zvrátiť a vaše údaje budú natrvalo stratené. Po kliknutí na toto tlačidlo sa súbor natrvalo odstráni z vášho disku. Uistite sa, že ste si vytvorili primeranú zálohu konfigurácie.", + "text": "Upozorňujeme, že vymazanie nie je možné vrátiť späť a vaše údaje budú natrvalo stratené. Po kliknutí na toto tlačidlo sa súbor natrvalo odstráni z vášho disku. Uistite sa, že ste si vytvorili primeranú zálohu konfigurácie.", "buttons": { "confirm": "Áno, vymažte '{{configName}}'" } @@ -57,7 +57,7 @@ "message": "Odstránenie konfigurácie zlyhalo" }, "deleteFailedDefaultConfig": { - "title": "Predvolená konfigurácia sa nedá odstrániť", + "title": "Predvolenú konfiguráciu nemožno odstrániť", "message": "Konfigurácia nebola odstránená zo systému súborov" } } diff --git a/public/locales/sk/settings/general/search-engine.json b/public/locales/sk/settings/general/search-engine.json index 8087221ec..2adf0e08d 100644 --- a/public/locales/sk/settings/general/search-engine.json +++ b/public/locales/sk/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Vyhľadávač", "configurationName": "Konfigurácia vyhľadávača", "tips": { - "generalTip": "Môžete použiť viacero predpon! Ich pridaním pred dotaz sa budú výsledky filtrovať. !s (Web), !t (Torrenty), !y (YouTube) a !m (Médiá).", + "generalTip": "Môžete použiť viacero predpon! Ich pridaním pred dotaz sa výsledky vyfiltrujú. !s (Web), !t (Torrenty), !y (YouTube) a !m (Médiá).", "placeholderTip": "%s možno použiť ako zástupný symbol pre dotaz." }, "customEngine": { diff --git a/public/locales/sk/widgets/error-boundary.json b/public/locales/sk/widgets/error-boundary.json new file mode 100644 index 000000000..76b1a1b6d --- /dev/null +++ b/public/locales/sk/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ups, došlo k chybe!", + "buttons": { + "details": "Detaily", + "tryAgain": "Skúste znova" + } + }, + "modal": { + "text": "", + "label": "Vaša chyba", + "reportButton": "Nahlásiť chybu" + } +} \ No newline at end of file diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index 5e291d3de..b92544eaa 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -9,13 +9,14 @@ "version": "Različica", "changePosition": "Spremeni položaj", "remove": "Odstrani", - "removeConfirm": "Ali ste prepričani, da želite odstraniti {{item}} ?", + "removeConfirm": "Ali ste prepričani, da želite odstraniti {{item}}?", + "createItem": "", "sections": { "settings": "Nastavitve", "dangerZone": "Nevarno območje" }, "secrets": { - "apiKey": "Api ključ", + "apiKey": "API ključ", "username": "Uporabniško ime", "password": "Geslo" }, diff --git a/public/locales/sl/layout/modals/about.json b/public/locales/sl/layout/modals/about.json index 609179cfa..b7fb226da 100644 --- a/public/locales/sl/layout/modals/about.json +++ b/public/locales/sl/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr je elegantna, sodobna nadzorna plošča, s katero so vse vaše aplikacije in storitve na dosegu roke. Z aplikacijo Homarr lahko do vsega dostopate in nadzorujete na enem priročnem mestu. Homarr se brez težav poveže z aplikacijami, ki ste jih dodali, in vam zagotavlja dragocene informacije ter popoln nadzor. Namestitev je preprosta, Homarr pa podpira širok nabor načinov namestitve.", "contact": "Imate težave ali vprašanja? Povežite se z nami!", "addToDashboard": "Dodajanje v nadzorno ploščo", + "tip": "Mod se nanaša na modifikacijsko tipko, to so tipke Ctrl in Command/Super/Windows", + "key": "Bližnjična tipka", + "action": "Dejanje", + "keybinds": "Vezave tipk", "metrics": { "configurationSchemaVersion": "Različica konfiguracijske sheme", "configurationsCount": "Razpoložljive konfiguracije", diff --git a/public/locales/sl/layout/modals/add-app.json b/public/locales/sl/layout/modals/add-app.json index 187a28594..e53427bdb 100644 --- a/public/locales/sl/layout/modals/add-app.json +++ b/public/locales/sl/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "Splošno", - "behaviour": "Vedenje", + "behaviour": "Obnašanje", "network": "Omrežje", "appearance": "Videz", "integration": "Integracija" @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Ikona aplikacije", - "description": "Izberite ikono, ki bo prikazana na nadzorni plošči. Izbirate lahko med ikonami {{suggestionsCount}} ali vnesete svoj URL", + "description": "", "autocomplete": { "title": "Ni rezultatov", "text": "Poskusite uporabiti bolj specifičen iskalni izraz. Če želene ikone ne najdete, prilepite zgornji naslov URL slike za ikono po meri" diff --git a/public/locales/sl/modules/common.json b/public/locales/sl/modules/common.json index 097a44509..c2a7719e6 100644 --- a/public/locales/sl/modules/common.json +++ b/public/locales/sl/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Odkrit neuporabljen parameter v konfiguraciji
{{key}}. Homarr tega parametra ne more interpretirati in uporabiti. Da bi se izognili nepričakovanemu vedenju, naredite varnostno kopijo konfiguracije in jo popravite." + "text": "" } } } diff --git a/public/locales/sl/modules/dashdot.json b/public/locales/sl/modules/dashdot.json index 28a1f9132..e9420fccc 100644 --- a/public/locales/sl/modules/dashdot.json +++ b/public/locales/sl/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Prikaže grafe zunanjega primerka Dash. znotraj Homarra.", + "description": "Prikaže grafe zunanje instance Dash. znotraj Homarr.", "settings": { "title": "Nastavitve za pripomoček Dash", "url": { @@ -85,7 +85,7 @@ "noInformation": "Ne morem pridobiti informacij iz Dash. - ali uporabljate najnovejšo različico?", "protocolDowngrade": { "title": "Odkrit nižji protokol", - "text": "Protokol do vašega Dash. vmesnika se znižuje. To predstavlja varnostno tveganje, saj protokol HTTP ni šifriran in napadalci lahko zlorabijo to povezavo. Prepričajte se, da Dash. deluje tudi v protokolu HTTPS, ali pa znižajte stopnjo Homarr na HTTP (ni priporočljivo)." + "text": "Povezava z vašim primerkom Dash. uporablja protokol HTTP. To predstavlja varnostno tveganje, saj HTTP ni šifriran in napadalci lahko zlorabijo to povezavo. Prepričajte se, da Dash. uporablja HTTPS, ali pa Homarr prestavite na HTTP (ni priporočljivo)." } }, "graphs": { diff --git a/public/locales/sl/modules/iframe.json b/public/locales/sl/modules/iframe.json index 4326b0e81..f0a6e5cc4 100644 --- a/public/locales/sl/modules/iframe.json +++ b/public/locales/sl/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "Vstavite katero koli vsebino iz interneta. Nekatera spletna mesta lahko omejijo dostop.", "settings": { - "title": "Nastavitve okvirja IFrame", + "title": "nastavitve okvirja IFrame", "embedUrl": { "label": "URL za vstavljanje" }, @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "Vnesite naslov URL", + "title": "", "text": "Prepričajte se, da ste v konfiguracijo svojega pripomočka vnesli veljaven naslov" } } diff --git a/public/locales/sl/modules/media-requests-list.json b/public/locales/sl/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/sl/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/sl/modules/media-requests-stats.json b/public/locales/sl/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/sl/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/sl/modules/ping.json b/public/locales/sl/modules/ping.json index 03e0df982..5d1c47ae7 100644 --- a/public/locales/sl/modules/ping.json +++ b/public/locales/sl/modules/ping.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Ping", - "description": "Prikaže indikator stanja, ki je odvisen od odzivne kode HTTP danega URL-ja." + "description": "Prikaže indikator stanja glede na odzivno kodo HTTP danega URL-ja." }, "states": { "online": "Povezan {{response}}", diff --git a/public/locales/sl/modules/rss.json b/public/locales/sl/modules/rss.json index a6a31649d..27cf37b8e 100644 --- a/public/locales/sl/modules/rss.json +++ b/public/locales/sl/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "RSS pripomoček", - "description": "Prevzame elemente iz vira RSS in jih prikaže. Običajno se uporablja za spletne novice", + "description": "", "settings": { "title": "Nastavitve za RSS pripomoček", "rssFeedUrl": { - "label": "URL naslov vira RSS" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "Ni mogoče pridobiti vira RSS", - "text": "Prišlo je do težave pri doseganju vira RSS. Prepričajte se, da ste pravilno nastavili vir in uporabili veljavni URL naslov RSS, ki ustreza uradni standardni specifikaciji. Po posodobitvi vira boste morda morali shraniti nadzorno ploščo in osvežiti stran." + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/sl/modules/torrents-status.json b/public/locales/sl/modules/torrents-status.json index 1db9d2f5a..1926bf1ec 100644 --- a/public/locales/sl/modules/torrents-status.json +++ b/public/locales/sl/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Dodajte podprt odjemalec Torrent, da si ogledate trenutne prenose" }, "generic": { - "title": "Zgodila se je nepričakovana napaka", + "title": "Prišlo je do nepričakovane napake", "text": "Homarr ni mogel komunicirati z vašimi odjemalci Torrent. Prosimo, preverite svojo konfiguracijo" } }, diff --git a/public/locales/sl/modules/video-stream.json b/public/locales/sl/modules/video-stream.json index cfb629949..4ae86cf43 100644 --- a/public/locales/sl/modules/video-stream.json +++ b/public/locales/sl/modules/video-stream.json @@ -5,7 +5,7 @@ "settings": { "title": "Nastavitve za gradnik videoprenosa", "FeedUrl": { - "label": "URL naslov pretoka" + "label": "URL vira" }, "autoPlay": { "label": "Samodejno predvajanje" diff --git a/public/locales/sl/settings/customization/general.json b/public/locales/sl/settings/customization/general.json index ed867874d..25bf79f33 100644 --- a/public/locales/sl/settings/customization/general.json +++ b/public/locales/sl/settings/customization/general.json @@ -15,7 +15,7 @@ }, "appereance": { "name": "Videz", - "description": "Prilagodite ozadje, barve in videz aplikacij" + "description": "Prilagodite ozadje, barve in videz aplikacije" } } } \ No newline at end of file diff --git a/public/locales/sl/settings/customization/page-appearance.json b/public/locales/sl/settings/customization/page-appearance.json index bc2f65f3e..d0528335b 100644 --- a/public/locales/sl/settings/customization/page-appearance.json +++ b/public/locales/sl/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Meta naslov", - "description": "Naslov, ki se prikaže kot ime zavihka" + "description": "Naslov, prikazan v zavihku brskalnika" }, "logo": { "label": "Logotip", - "description": "Logotip armaturne plošče v zgornjem levem kotu" + "description": "Logotip prikazan v zgornjem levem kotu" }, "favicon": { "label": "Favicon", - "description": "Ikona, ki se uporablja pred imenom zavihka" + "description": "Ikona, prikazana v zavihku brskalnika" }, "background": { "label": "Ozadje" }, "customCSS": { "label": "Po meri CSS", - "description": "Prilagodite vse elemente na nadzorni plošči, priporočljivo le za izkušene uporabnike", + "description": "Dadatno prilagodite pogled s CSS. Priporočljivo le za izkušene uporabnike", "placeholder": "Prilagojeni CSS bo uporabljen kot zadnji", "applying": "Uporaba CSS..." }, diff --git a/public/locales/sl/settings/general/config-changer.json b/public/locales/sl/settings/general/config-changer.json index f2acfe046..c7d2f3ce2 100644 --- a/public/locales/sl/settings/general/config-changer.json +++ b/public/locales/sl/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "Potrdite brisanje konfiguracije", - "warningText": "Želite izbrisati '{{configName}}'", - "text": "Upoštevajte, da izbrisa ni mogoče spremeniti in da bodo vaši podatki trajno izgubljeni. Ko kliknete ta gumb, bo datoteka trajno izbrisana z vašega diska. Poskrbite, da ustvarite ustrezno varnostno kopijo svoje konfiguracije.", + "warningText": "Pobrisali boste '{{configName}}'", + "text": "Upoštevajte, da izbrisa ni mogoče povrniti in da bodo vaši podatki trajno izgubljeni. Ko kliknete ta gumb, bo datoteka trajno izbrisana z vašega diska. Poskrbite, da ustvarite ustrezno varnostno kopijo svoje konfiguracije.", "buttons": { "confirm": "Da, izbrišite '{{configName}}'" } diff --git a/public/locales/sl/settings/general/search-engine.json b/public/locales/sl/settings/general/search-engine.json index 45f831fcc..484b33092 100644 --- a/public/locales/sl/settings/general/search-engine.json +++ b/public/locales/sl/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Iskalnik", "configurationName": "Nastavitve iskalnika", "tips": { - "generalTip": "Uporabite lahko več predpon! Če jih dodate pred poizvedbo, se rezultati filtrirajo. !s (splet), !t (torrenti), !y (YouTube) in !m (mediji).", + "generalTip": "Uporabite lahko več predpon! Če jih dodate pred poizvedbo, boste filtrirali rezultate. !s (splet), !t (torrenti), !y (YouTube) in !m (mediji).", "placeholderTip": "%s lahko uporabite kot nadomestno ime za poizvedbo." }, "customEngine": { diff --git a/public/locales/sl/widgets/error-boundary.json b/public/locales/sl/widgets/error-boundary.json new file mode 100644 index 000000000..d8dca36c6 --- /dev/null +++ b/public/locales/sl/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ups, prišlo je do napake!", + "buttons": { + "details": "Podrobnosti", + "tryAgain": "Poskusite znova" + } + }, + "modal": { + "text": "", + "label": "Vaša napaka", + "reportButton": "Prijavite to napako" + } +} \ No newline at end of file diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 3afa381ce..b26ea1c89 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -9,7 +9,8 @@ "version": "Version", "changePosition": "Ändra position", "remove": "Ta bort", - "removeConfirm": "Är du säker på att du vill ta bort {{item}} ?", + "removeConfirm": "Är du säker på att du vill ta bort {{item}}?", + "createItem": "", "sections": { "settings": "Inställningar", "dangerZone": "Farozon" diff --git a/public/locales/sv/layout/modals/about.json b/public/locales/sv/layout/modals/about.json index bf41ad5d4..aa227437b 100644 --- a/public/locales/sv/layout/modals/about.json +++ b/public/locales/sv/layout/modals/about.json @@ -2,6 +2,10 @@ "description": "Homarr är en stilren, modern instrumentpanel som ger dig tillgång till alla dina appar och tjänster. Med Homarr kan du få tillgång till och kontrollera allt på ett bekvämt ställe. Homarr integreras sömlöst med de appar du har lagt till, vilket ger dig värdefull information och ger dig fullständig kontroll. Installationen är enkel och Homarr stöder ett stort antal installationsmetoder.", "contact": "Har du problem eller frågor? Kontakta oss!", "addToDashboard": "Lägg till på instrumentpanel", + "tip": "Mod är din modifiertangent, det är Ctrl och kommando/Super/Windows-tangenten", + "key": "Genvägstangent", + "action": "Åtgärd", + "keybinds": "Knapptilldelning", "metrics": { "configurationSchemaVersion": "Version av konfigurationsschemat", "configurationsCount": "Tillgängliga konfigurationer", diff --git a/public/locales/sv/layout/modals/add-app.json b/public/locales/sv/layout/modals/add-app.json index 43e2fe3af..a13682fec 100644 --- a/public/locales/sv/layout/modals/add-app.json +++ b/public/locales/sv/layout/modals/add-app.json @@ -39,7 +39,7 @@ "appearance": { "icon": { "label": "Appikon", - "description": "Välj en ikon som ska visas på kontrollpanelen. Välj mellan {{suggestionsCount}} ikoner eller ange din egen URL", + "description": "", "autocomplete": { "title": "Hittade inga resultat", "text": "Försök att använda en mer specifik sökterm. Om du inte kan hitta önskad ikon, klistra in bild-URL ovan för en anpassad ikon" diff --git a/public/locales/sv/modules/common.json b/public/locales/sv/modules/common.json index 85ebdf33c..c1eafbab8 100644 --- a/public/locales/sv/modules/common.json +++ b/public/locales/sv/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "En oanvänd parameter i konfigurationen har upptäckts
{{key}}. Homarr kan inte tolka och använda denna parameter. För att undvika oväntat beteende bör du säkerhetskopiera din konfiguration och korrigera den." + "text": "" } } } diff --git a/public/locales/sv/modules/dashdot.json b/public/locales/sv/modules/dashdot.json index 67f97a5f7..99d68045e 100644 --- a/public/locales/sv/modules/dashdot.json +++ b/public/locales/sv/modules/dashdot.json @@ -85,7 +85,7 @@ "noInformation": "Kan inte få information från dash. - Kör du den senaste versionen?", "protocolDowngrade": { "title": "Nedgradering av protokoll upptäcktes", - "text": "Protokollet till din Dash.-instans håller på att nedgraderas. Detta är en säkerhetsrisk eftersom HTTP är okrypterat och angripare kan missbruka denna anslutning. Se till att Dash. också körs på HTTPS eller nedgradera Homarr till HTTP (rekommenderas inte)." + "text": "Anslutningen till din Dash.-instans använder HTTP. Detta är en säkerhetsrisk eftersom HTTP är okrypterat och angripare kan missbruka anslutningen. Se till att Dash. använder HTTPS eller nedgradera Homarr till HTTP (rekommenderas inte)." } }, "graphs": { diff --git a/public/locales/sv/modules/iframe.json b/public/locales/sv/modules/iframe.json index 18c90c392..0fb5bb633 100644 --- a/public/locales/sv/modules/iframe.json +++ b/public/locales/sv/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "", + "name": "iFrame", "description": "", "settings": { - "title": "", + "title": "iFrame-inställningar", "embedUrl": { "label": "" }, diff --git a/public/locales/sv/modules/media-requests-list.json b/public/locales/sv/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/sv/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/sv/modules/media-requests-stats.json b/public/locales/sv/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/sv/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/sv/modules/rss.json b/public/locales/sv/modules/rss.json index 230d75cf5..0ae05342b 100644 --- a/public/locales/sv/modules/rss.json +++ b/public/locales/sv/modules/rss.json @@ -5,15 +5,19 @@ "settings": { "title": "", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/sv/modules/video-stream.json b/public/locales/sv/modules/video-stream.json index 539daa1c4..1aebb3188 100644 --- a/public/locales/sv/modules/video-stream.json +++ b/public/locales/sv/modules/video-stream.json @@ -5,10 +5,10 @@ "settings": { "title": "", "FeedUrl": { - "label": "" + "label": "Flödes-URL" }, "autoPlay": { - "label": "" + "label": "Automatisk uppspelning" }, "muted": { "label": "" diff --git a/public/locales/sv/settings/customization/page-appearance.json b/public/locales/sv/settings/customization/page-appearance.json index 62eae221e..58cdc56da 100644 --- a/public/locales/sv/settings/customization/page-appearance.json +++ b/public/locales/sv/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "Metatitel", - "description": "Titeln som visas som fliknamn" + "description": "Titeln som visas i din webbläsares flik" }, "logo": { "label": "Logotyp", - "description": "Instrumentbrädans logotyp längst upp till vänster" + "description": "Logotypen som visas längst upp till vänster" }, "favicon": { "label": "Favicon", - "description": "Ikonen, som används framför flikens namn" + "description": "Ikonen som visas i din webbläsares flik" }, "background": { "label": "Bakgrund" }, "customCSS": { "label": "Anpassad CSS", - "description": "Anpassa alla element på instrumentpanelen, rekommenderas endast för erfarna användare", + "description": "Vidare kan du anpassa din instrumentpanel med CSS, vilket endast rekommenderas för erfarna användare", "placeholder": "Anpassad CSS tillämpas sist", "applying": "Tillämpar CSS..." }, diff --git a/public/locales/sv/settings/general/config-changer.json b/public/locales/sv/settings/general/config-changer.json index 8a3ca55ef..b8d4aafac 100644 --- a/public/locales/sv/settings/general/config-changer.json +++ b/public/locales/sv/settings/general/config-changer.json @@ -37,7 +37,7 @@ "confirmDeletion": { "title": "Bekräfta radering av din konfiguration", "warningText": "Du är på väg att radera '{{configName}}'", - "text": "Observera att raderingen inte kan göras om och att dina uppgifter kommer att gå förlorade permanent. När du har klickat på den här knappen kommer filen att raderas permanent från din disk. Se till att skapa en lämplig säkerhetskopia av din konfiguration.", + "text": "Observera att raderingen inte kan återställas och att dina uppgifter kommer att gå förlorade för alltid. När du har klickat på den här knappen raderas filen permanent från din disk. Se till att skapa en lämplig säkerhetskopia av din konfiguration.", "buttons": { "confirm": "Ja, radera '{{configName}}'" } diff --git a/public/locales/sv/widgets/error-boundary.json b/public/locales/sv/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/sv/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index a8feb9e50..c0970c518 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -9,13 +9,14 @@ "version": "Версія", "changePosition": "Змінити положення", "remove": "Видалити", - "removeConfirm": "Ви впевнені, що хочете видалити {{item}} ?", + "removeConfirm": "Ви впевнені, що хочете видалити {{item}}?", + "createItem": "", "sections": { "settings": "Налаштування", "dangerZone": "Небезпечна зона" }, "secrets": { - "apiKey": "Ключ API", + "apiKey": "API ключ", "username": "Логін", "password": "Пароль" }, diff --git a/public/locales/uk/layout/modals/about.json b/public/locales/uk/layout/modals/about.json index 83e01a3b0..95efbb0c2 100644 --- a/public/locales/uk/layout/modals/about.json +++ b/public/locales/uk/layout/modals/about.json @@ -2,13 +2,17 @@ "description": "Homarr - це витончена, сучасна інформаційна панель, яка надає всі ваші додатки та сервіси під рукою. З Homarr ви можете отримати доступ до всього і контролювати все в одному зручному місці. Homarr легко інтегрується з додатками, які ви додали, надаючи вам цінну інформацію та забезпечуючи повний контроль. Встановлення дуже просте, і Homarr підтримує широкий спектр методів розгортання.", "contact": "Виникли проблеми або питання? Зв'яжіться з нами!", "addToDashboard": "Додати до панелі інструментів", + "tip": "Mod відноситься до клавіші модифікатора, це клавіші Ctrl та Command/Super/Windows", + "key": "Гарячі клавіши", + "action": "Дії", + "keybinds": "Сполучення клавіш", "metrics": { - "configurationSchemaVersion": "", - "configurationsCount": "", + "configurationSchemaVersion": "Версія схеми конфігурації", + "configurationsCount": "Доступні конфігурації", "version": "Версія", - "nodeEnvironment": "", - "i18n": "", - "locales": "", + "nodeEnvironment": "Середовище вузла", + "i18n": "Завантажено інтернаціональні переклади", + "locales": "Налаштовано інтернаціональні локалі", "experimental_disableEditMode": "ЕКСПЕРИМЕНТАЛЬНО: Вимкнути режим редагування" } } \ No newline at end of file diff --git a/public/locales/uk/layout/modals/add-app.json b/public/locales/uk/layout/modals/add-app.json index ccd59222b..096e838d9 100644 --- a/public/locales/uk/layout/modals/add-app.json +++ b/public/locales/uk/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "Загальне", - "behaviour": "Поведінка", + "behaviour": "Модель поведінки", "network": "Мережа", "appearance": "Вигляд", "integration": "Інтеграція" @@ -41,12 +41,12 @@ "label": "Іконка програми", "description": "", "autocomplete": { - "title": "", - "text": "" + "title": "Результатів не знайдено", + "text": "Спробуйте використати більш конкретний пошуковий термін. Якщо ви не можете знайти потрібну піктограму, вставте URL-адресу зображення вище для створення власної піктограми" }, "noItems": { - "title": "", - "text": "" + "title": "Завантаження зовнішніх іконок", + "text": "Це може зайняти кілька секунд" } } }, diff --git a/public/locales/uk/layout/modals/change-position.json b/public/locales/uk/layout/modals/change-position.json index 4e9079512..0374396d4 100644 --- a/public/locales/uk/layout/modals/change-position.json +++ b/public/locales/uk/layout/modals/change-position.json @@ -1,8 +1,8 @@ { - "xPosition": "Положення осі X", + "xPosition": "Положення по осі X", "width": "Ширина", "height": "Висота", - "yPosition": "Положення осі Y", + "yPosition": "Положення по осі Y", "zeroOrHigher": "0 або вище", "betweenXandY": "Між {{min}} та {{max}}" } \ No newline at end of file diff --git a/public/locales/uk/modules/common.json b/public/locales/uk/modules/common.json index 9382da365..1963ca573 100644 --- a/public/locales/uk/modules/common.json +++ b/public/locales/uk/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Параметр невикористані в конфігурації виявив
{{key}}. Homarr не в змозі інтерпретувати та використовувати цей параметр. Щоб уникнути будь-якої несподіваної поведінки, зробіть резервну копію конфігурації та виправте вашу конфігурацію." + "text": "" } } } diff --git a/public/locales/uk/modules/dashdot.json b/public/locales/uk/modules/dashdot.json index f65d4f5a0..86cfbaa3d 100644 --- a/public/locales/uk/modules/dashdot.json +++ b/public/locales/uk/modules/dashdot.json @@ -1,7 +1,7 @@ { "descriptor": { "name": "Dash.", - "description": "Показує графіки зовнішньої Dash. всередині Homarr.", + "description": "Відображає графіки зовнішнього Dash. всередині Homarr.", "settings": { "title": "Налаштування віджета Dash.", "url": { @@ -84,8 +84,8 @@ "noService": "Dash. сервіс не знайдено. Будь ласка, додайте його до головної панелі чи встановіть Dash. URL в налаштуваннях модулю", "noInformation": "Не вдалося отримати інформацію з Dash. - чи ви використовуєте останню версію?", "protocolDowngrade": { - "title": "", - "text": "" + "title": "Виявлено зниження рівня протоколу", + "text": "З'єднання з вашим екземпляром Dash. здійснюється за протоколом HTTP. Це загрожує безпеці, оскільки HTTP не зашифрований, і зловмисники можуть зловживати цим з'єднанням. Переконайтеся, що Dash. використовує HTTPS, або знизьте налаштування Homarr до HTTP (не рекомендується)." } }, "graphs": { diff --git a/public/locales/uk/modules/iframe.json b/public/locales/uk/modules/iframe.json index 18c90c392..8da476cfa 100644 --- a/public/locales/uk/modules/iframe.json +++ b/public/locales/uk/modules/iframe.json @@ -1,14 +1,14 @@ { "descriptor": { - "name": "", - "description": "", + "name": "IFrame", + "description": "Вставити будь-який контент з інтернету. Деякі вебсайти можуть обмежувати доступ.", "settings": { - "title": "", + "title": "Налаштування iFrame", "embedUrl": { - "label": "" + "label": "Вставити URL" }, "allowFullScreen": { - "label": "" + "label": "Дозволити повноекранний режим" } } }, @@ -16,7 +16,7 @@ "errors": { "noUrl": { "title": "", - "text": "" + "text": "Переконайтеся, що Ви ввели правильну адресу в налаштуваннях вашого віджета" } } } diff --git a/public/locales/uk/modules/media-requests-list.json b/public/locales/uk/modules/media-requests-list.json new file mode 100644 index 000000000..d43c74360 --- /dev/null +++ b/public/locales/uk/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "Схвалено", + "pendingApproval": "Очікує схвалення", + "declined": "Відхилено" + } +} diff --git a/public/locales/uk/modules/media-requests-stats.json b/public/locales/uk/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/uk/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/uk/modules/rss.json b/public/locales/uk/modules/rss.json index 55d312096..ab0518939 100644 --- a/public/locales/uk/modules/rss.json +++ b/public/locales/uk/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "RSS-віджет", - "description": "Витягує предмети з RSS-стрічки та показує їх. Часто використовується для новин онлайн", + "description": "", "settings": { "title": "Налаштування віджету RSS", "rssFeedUrl": { - "label": "URL-адреса RSS стрічки" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "Не вдалося отримати RSS стрічку", - "text": "Виникла проблема з доступом до RSS-стрічки. Переконайтеся, що ви'правильно налаштували стрічку і використовуєте правильну адресу RSS, яка відповідає офіційній стандартній специфікації. Після оновлення стрічки вам може знадобитися зберегти вашу інформаційну панель і оновити сторінку." + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/uk/modules/torrents-status.json b/public/locales/uk/modules/torrents-status.json index 69e8e03bc..e6fd31010 100644 --- a/public/locales/uk/modules/torrents-status.json +++ b/public/locales/uk/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "Додайте підтримуваний клієнт завантаження Usenet, щоб переглянути поточні завантаження" }, "generic": { - "title": "Сталась непередбачена помилка", + "title": "Трапилась неочікувана помилка", "text": "Homarr не зміг зв'язатися з вашими клієнтами для завантаження. Будь ласка, перевірте свою конфігурацію" } }, diff --git a/public/locales/uk/modules/video-stream.json b/public/locales/uk/modules/video-stream.json index 4f4f3ec9d..85b3e1206 100644 --- a/public/locales/uk/modules/video-stream.json +++ b/public/locales/uk/modules/video-stream.json @@ -8,7 +8,7 @@ "label": "URL-адреса стрічки" }, "autoPlay": { - "label": "Автоматичне відтворення" + "label": "Автовідтворення" }, "muted": { "label": "Звук вимкнуто" diff --git a/public/locales/uk/settings/common.json b/public/locales/uk/settings/common.json index 69855599f..759eac671 100644 --- a/public/locales/uk/settings/common.json +++ b/public/locales/uk/settings/common.json @@ -10,19 +10,19 @@ }, "credits": { "madeWithLove": "Зроблено з ❤️ by @", - "thirdPartyContent": "", + "thirdPartyContent": "Переглянути сторонні матеріали", "thirdPartyContentTable": { - "dependencyName": "", + "dependencyName": "Залежність", "dependencyVersion": "Версія" } }, "grow": "Виростити сітку (зайняти весь простір)", "layout": { "preview": { - "title": "", - "subtitle": "" + "title": "Попередній перегляд", + "subtitle": "Зміни будуть збережені автоматично" }, - "divider": "", + "divider": "Варіанти компонування", "main": "Основне", "sidebar": "Бокова панель", "cannotturnoff": "Неможливо вимкнути", diff --git a/public/locales/uk/settings/customization/color-selector.json b/public/locales/uk/settings/customization/color-selector.json index 8f79746bf..f9a660012 100644 --- a/public/locales/uk/settings/customization/color-selector.json +++ b/public/locales/uk/settings/customization/color-selector.json @@ -1,3 +1,4 @@ { + "colors": "Кольори", "suffix": "{{color}} колір" } \ No newline at end of file diff --git a/public/locales/uk/settings/customization/general.json b/public/locales/uk/settings/customization/general.json index ee9d30b5a..99dee01ec 100644 --- a/public/locales/uk/settings/customization/general.json +++ b/public/locales/uk/settings/customization/general.json @@ -1,21 +1,21 @@ { - "text": "", + "text": "Налаштування дозволяють вам конфігурувати та підлаштовувати роботу з Homarr відповідно до ваших уподобань.", "accordeon": { "layout": { - "name": "", - "description": "" + "name": "Макет", + "description": "Увімкнення та вимкнення елементів на плитках хедера та інформаційної панелі" }, "gridstack": { "name": "", - "description": "" + "description": "Налаштуйте поведінку та стовпці в області інформаційної панелі" }, "pageMetadata": { - "name": "", - "description": "" + "name": "Метадані сторінки", + "description": "Налаштуйте заголовки, логотип та PWA" }, "appereance": { - "name": "", - "description": "" + "name": "Вигляд", + "description": "Налаштування фону, кольорів і додатків" } } } \ No newline at end of file diff --git a/public/locales/uk/settings/customization/gridstack.json b/public/locales/uk/settings/customization/gridstack.json index 18c3d8233..316dd07ef 100644 --- a/public/locales/uk/settings/customization/gridstack.json +++ b/public/locales/uk/settings/customization/gridstack.json @@ -1,10 +1,10 @@ { "columnsCount": { - "labelPreset": "", - "descriptionPreset": "", - "descriptionExceedsPreset": "" + "labelPreset": "Кількість стовпців в {{size}}", + "descriptionPreset": "Кількість стовпців, коли екран має менше ніж {{pixels}} пікселів в ширину", + "descriptionExceedsPreset": "Кількість колонок, коли розмір екрану перевищує {{pixels}} пікселів" }, - "unsavedChanges": "", - "applyChanges": "", + "unsavedChanges": "У вас є незбережені зміни. Натисніть кнопку Застосувати зміни нижче, щоб застосувати та зберегти зміни.", + "applyChanges": "Застосувати зміни", "defaultValues": "" } \ No newline at end of file diff --git a/public/locales/uk/settings/customization/page-appearance.json b/public/locales/uk/settings/customization/page-appearance.json index 722e1985e..ffbb619d8 100644 --- a/public/locales/uk/settings/customization/page-appearance.json +++ b/public/locales/uk/settings/customization/page-appearance.json @@ -1,28 +1,28 @@ { "pageTitle": { "label": "Заголовок сторінки", - "description": "" + "description": "Заголовок інформаційної панелі вгорі ліворуч" }, "metaTitle": { "label": "Мета-заголовок", - "description": "" + "description": "Назва, що відображається у вкладці вашого браузера" }, "logo": { "label": "Логотип", - "description": "" + "description": "Логотип відображається вгорі ліворуч" }, "favicon": { "label": "Іконка", - "description": "" + "description": "Іконка, що відображається у вкладці вашого браузера" }, "background": { "label": "Фон" }, "customCSS": { "label": "Власний CSS", - "description": "", + "description": "Крім того, налаштуйте дашборд за допомогою CSS, що рекомендується лише досвідченим користувачам", "placeholder": "Власний CSS буде оброблятися в останню чергу", - "applying": "" + "applying": "Застосувати CSS..." }, "buttons": { "submit": "Надіслати" diff --git a/public/locales/uk/settings/general/config-changer.json b/public/locales/uk/settings/general/config-changer.json index a4af2ec93..cfec91a79 100644 --- a/public/locales/uk/settings/general/config-changer.json +++ b/public/locales/uk/settings/general/config-changer.json @@ -37,7 +37,7 @@ "confirmDeletion": { "title": "Підтвердьте видалення конфігурації", "warningText": "Ви збираєтеся видалити '{{configName}}'", - "text": "Зверніть увагу, що видалення не є безповоротним і ваші дані будуть втрачені безповоротно. Після натискання цієї кнопки файл буде безповоротно видалено з вашого диска. Переконайтеся, що ви створили адекватну резервну копію вашої конфігурації.", + "text": "Зверніть увагу, що видалення є незворотнім, і ваші дані будуть втрачені безповоротно. Після натискання цієї кнопки файл буде безповоротно видалено з вашого диска. Переконайтеся, що ви створили належну резервну копію вашої конфігурації.", "buttons": { "confirm": "Так, видалити '{{configName}}'" } diff --git a/public/locales/uk/settings/general/search-engine.json b/public/locales/uk/settings/general/search-engine.json index 839abdab7..0ffc9f10a 100644 --- a/public/locales/uk/settings/general/search-engine.json +++ b/public/locales/uk/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "Пошукова система", "configurationName": "Налаштування пошукової системи", "tips": { - "generalTip": "Існують кілька префіксів, які ви можете використовувати! Додавання їх перед запитом фільтруватиме результати. !s (Web), !t (Torrents), !y (YouTube) and !m (Media).", + "generalTip": "Ви можете використовувати кілька префіксів! Додавання їх перед запитом відфільтрує результати. !s (веб), !t (торренти), !y (YouTube) і !m (медіа).", "placeholderTip": "%s можна використовувати як заповнювач для запиту." }, "customEngine": { diff --git a/public/locales/uk/widgets/error-boundary.json b/public/locales/uk/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/uk/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index ed6a295dc..cd62c1269 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -9,13 +9,14 @@ "version": "Phiên bản", "changePosition": "Đổi vị trí", "remove": "Xóa", - "removeConfirm": "Bạn có chắc muốn xoá {{item}} ?", + "removeConfirm": "Bạn có chắc muốn xoá {{item}}?", + "createItem": "", "sections": { "settings": "Cài đặt", "dangerZone": "Khu vực nguy hiểm" }, "secrets": { - "apiKey": "Khóa API", + "apiKey": "Khoá API", "username": "Tên người dùng", "password": "Mật khẩu" }, diff --git a/public/locales/vi/layout/modals/about.json b/public/locales/vi/layout/modals/about.json index 4f83dd4bd..8fbf04565 100644 --- a/public/locales/vi/layout/modals/about.json +++ b/public/locales/vi/layout/modals/about.json @@ -1,14 +1,18 @@ { - "description": "", - "contact": "", - "addToDashboard": "", + "description": "Homarr là một bảng điều khiển nuột nà, hiện đại, giúp bạn đặt tất cả các ứng dụng và dịch vụ ngay trong tầm với. Với Homarr, bạn có thể truy cập và kiểm soát mọi thứ thuận tiện từ một nơi nhất định. Homarr tích hợp liền mạch với các ứng dụng bạn đã thêm, cung cấp các thông tin quan trọng tới bạn và trao cho bạn toàn quyền kiểm soát. Cài đặt Homarr rất dễ dàng, và Homarr còn hỗ trợ nhiều phương thức triển khai nữa.", + "contact": "Gặp khó khăn hoặc có thắc mắc? Hãy liên hệ với chúng tôi!", + "addToDashboard": "Thêm vào bảng điều khiển", + "tip": "", + "key": "Phím tắt", + "action": "", + "keybinds": "", "metrics": { - "configurationSchemaVersion": "", - "configurationsCount": "", + "configurationSchemaVersion": "Phiên bản lược đồ cấu hình", + "configurationsCount": "Cấu hình có sẵn", "version": "Phiên bản", - "nodeEnvironment": "", - "i18n": "", - "locales": "", - "experimental_disableEditMode": "" + "nodeEnvironment": "Môi trường node", + "i18n": "Bản dịch I18n đã tải", + "locales": "Cấu hình ngôn ngữ l18n đã thiết lập", + "experimental_disableEditMode": "THỬ NGHIỆM: Tắt chế độ chỉnh sửa" } } \ No newline at end of file diff --git a/public/locales/vi/layout/modals/add-app.json b/public/locales/vi/layout/modals/add-app.json index b0e97ca9f..8ee378403 100644 --- a/public/locales/vi/layout/modals/add-app.json +++ b/public/locales/vi/layout/modals/add-app.json @@ -1,76 +1,76 @@ { "tabs": { - "general": "", - "behaviour": "", + "general": "Chung", + "behaviour": "Hành vi", "network": "Mạng", - "appearance": "", - "integration": "" + "appearance": "Hiển thị", + "integration": "Tích hợp" }, "general": { "appname": { - "label": "", - "description": "" + "label": "Tên ứng dụng", + "description": "Tên dùng để hiển thị trên bảng điều khiển." }, "internalAddress": { - "label": "", - "description": "" + "label": "Địa chỉ nội bộ", + "description": "Địa chỉ IP nội bộ của ứng dụng." }, "externalAddress": { - "label": "", - "description": "" + "label": "Địa chỉ bên ngoài", + "description": "Đường dẫn được mở khi nhấp vào ứng dụng." } }, "behaviour": { "isOpeningNewTab": { - "label": "", - "description": "" + "label": "Mở trong tab mới", + "description": "Mở ứng dụng trong tab mới thay vì tab hiện tại." } }, "network": { "statusChecker": { - "label": "", - "description": "" + "label": "Kiểm tra trạng thái", + "description": "Kiểm tra trạng thái trực tuyến cửa ứng dụng bằng một yêu cầu HTTP(S) đơn giản." }, "statusCodes": { - "label": "", - "description": "" + "label": "Mã trạng thái HTTP", + "description": "Các mã trạng thái HTTP được coi là trực tuyến." } }, "appearance": { "icon": { - "label": "", + "label": "Biểu tượng ứng dụng", "description": "", "autocomplete": { - "title": "", - "text": "" + "title": "Không có kết quả", + "text": "Hãy thử sử dụng cụm từ tìm kiếm cụ thể hơn. Nếu bạn không tìm thấy biểu tượng mình muốn, hãy dán URL hình ảnh vào bên trên để dùng biểu tượng tùy chỉnh" }, "noItems": { - "title": "", - "text": "" + "title": "Đang tải biểu tượng ngoài", + "text": "Có thể mất vài giây" } } }, "integration": { "type": { - "label": "", - "description": "", - "placeholder": "", - "defined": "", - "undefined": "", - "public": "", - "private": "", - "explanationPrivate": "", - "explanationPublic": "" + "label": "Cấu hình tích hợp", + "description": "Cấu hình tích hợp sẽ được sử dụng để kết nối ứng dụng của bạn.", + "placeholder": "Chọn loại tích hợp", + "defined": "Đã định", + "undefined": "Chưa định", + "public": "Công khai", + "private": "Riêng tư", + "explanationPrivate": "Một bí mật riêng tư sẽ chỉ được gửi đến máy chủ một lần. Khi trình duyệt của bạn đã làm mới trang, nó sẽ không bao giờ được gửi lại nữa.", + "explanationPublic": "Một bí mật công khai sẽ luôn được gửi tới ứng dụng khách và có thể truy cập được qua API. Nó không được chứa bất kỳ giá trị bí mật nào như tên người dùng, mật khẩu, mã thông báo, chứng chỉ, v.v!" }, "secrets": { - "description": "", - "warning": "", - "clear": "", - "save": "", - "update": "" + "description": "Để cập nhật một bí mật, hãy nhập một giá trị và nhấp vào nút Lưu. Để xóa một bí mật, hãy sử dụng nút Xóa bí mật.", + "warning": "Thông tin đăng nhập của bạn dùng để truy cập vào tích hợp và bạn nên đừng bao giờ chia sẻ chúng với bất kỳ ai. Nhóm Homarr sẽ không bao giờ yêu cầu thông tin đăng nhập. Hãy nhớ lưu trữ và quản lý khóa của bạn một cách an toàn.", + "clear": "Xóa bí mật", + "save": "Lưu bí mật", + "update": "Cập nhật bí mật" } }, "validation": { - "popover": "" + "popover": "Biểu mẫu của bạn chứa dữ liệu không hợp lệ, vì vậy không thể lưu nó. Vui lòng khắc phục mọi vấn đề và nhấp lại vào nút này để lưu các thay đổi của bạn" } } diff --git a/public/locales/vi/modules/common.json b/public/locales/vi/modules/common.json index 5189d85c8..014084f9d 100644 --- a/public/locales/vi/modules/common.json +++ b/public/locales/vi/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "Đã phát hiện tham số không được sử dụng trong cấu hình
{{key}}. Homarr hiện không thể diễn giải và sử dụng tham số này. Để tránh hành vi không mong muốn, vui lòng sao lưu và sửa đổi cấu hình của bạn đúng cách." + "text": "" } } } diff --git a/public/locales/vi/modules/dashdot.json b/public/locales/vi/modules/dashdot.json index 4d3febbb7..2dc01c902 100644 --- a/public/locales/vi/modules/dashdot.json +++ b/public/locales/vi/modules/dashdot.json @@ -11,68 +11,68 @@ "label": "Hiển thị phần trăm" }, "columns": { - "label": "" + "label": "Cột hiển thị" }, "graphHeight": { - "label": "" + "label": "Chiều cao của biểu đồ" }, "graphsOrder": { - "label": "", + "label": "Biểu đồ (thứ tự)", "storage": { "label": "Bộ nhớ", "enabled": { - "label": "" + "label": "Hiển thị trong tiện ích" }, "span": { - "label": "" + "label": "Số cột chiếm" }, "compactView": { - "label": "" + "label": "Hiển thị bằng chữ (gọn)" }, "multiView": { - "label": "" + "label": "Chế độ hiện đa ổ đĩa" } }, "network": { "label": "Mạng", "enabled": { - "label": "" + "label": "Hiển thị trong tiện ích" }, "span": { - "label": "" + "label": "Số cột chiếm" }, "compactView": { - "label": "" + "label": "Hiển thị bằng chữ (gọn)" } }, "cpu": { "label": "CPU", "enabled": { - "label": "" + "label": "Hiển thị trong tiện ích" }, "span": { - "label": "" + "label": "Số cột chiếm" }, "multiView": { - "label": "" + "label": "Chế độ hiện đa nhân" } }, "ram": { - "label": "", + "label": "RAM", "enabled": { - "label": "" + "label": "Hiển thị trong tiện ích" }, "span": { - "label": "" + "label": "Số cột chiếm" } }, "gpu": { "label": "GPU", "enabled": { - "label": "" + "label": "Hiển thị trong tiện ích" }, "span": { - "label": "" + "label": "Số cột chiếm" } } } @@ -85,7 +85,7 @@ "noInformation": "Không thể nhận thông tin từ dash. - bạn có đang chạy phiên bản mới nhất không?", "protocolDowngrade": { "title": "Phát hiện hạ cấp giao thức", - "text": "Giao thức cho phiên bản Dash của bạn. không ở chế độ bảo mật. Đây được coi là rủi ro bảo mật vì HTTP không hỗ trợ mã hóa và những kẻ tấn công có thể lạm dụng nó. Hãy chắc chắn rằng Dash. hoạt động ở chế độ HTTPS hoặc xóa chế độ HTTPS khỏi Homarr (không được khuyến nghị)." + "text": "Dash. của bạn đang sử dụng HTTP. Đây là một rủi ro bảo mật, vì HTTP không được mã hóa và những kẻ tấn công có thể lạm dụng phương thức này. Hãy đảm bảo rằng Dash. sử dụng HTTPS hoặc hạ cấp Homarr xuống HTTP (không khuyến nghị)." } }, "graphs": { diff --git a/public/locales/vi/modules/iframe.json b/public/locales/vi/modules/iframe.json index 18c90c392..bfda9276a 100644 --- a/public/locales/vi/modules/iframe.json +++ b/public/locales/vi/modules/iframe.json @@ -1,14 +1,14 @@ { "descriptor": { - "name": "", - "description": "", + "name": "iFrame", + "description": "Nhúng bất kỳ nội dung nào từ internet. Một số trang web có thể hạn chế quyền truy cập.", "settings": { - "title": "", + "title": "Cài đặt iFrame", "embedUrl": { - "label": "" + "label": "URL nhúng" }, "allowFullScreen": { - "label": "" + "label": "Cho phép toàn màn hình" } } }, @@ -16,7 +16,7 @@ "errors": { "noUrl": { "title": "", - "text": "" + "text": "Đảm bảo rằng bạn đã nhập một địa chỉ hợp lệ trong cấu hình tiện ích" } } } diff --git a/public/locales/vi/modules/media-requests-list.json b/public/locales/vi/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/vi/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/vi/modules/media-requests-stats.json b/public/locales/vi/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/vi/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/vi/modules/media-server.json b/public/locales/vi/modules/media-server.json index 2be958199..aeffba869 100644 --- a/public/locales/vi/modules/media-server.json +++ b/public/locales/vi/modules/media-server.json @@ -1,23 +1,23 @@ { "descriptor": { - "name": "", - "description": "", + "name": "Máy chủ đa phương tiện", + "description": "Tương tác với máy chủ Jellyfin hoặc Plex của bạn", "settings": { - "title": "" + "title": "Cài đặt cho máy chủ đa phương tiện" } }, "card": { "table": { "header": { - "session": "", - "user": "", - "currentlyPlaying": "" + "session": "Phiên", + "user": "Người dùng", + "currentlyPlaying": "Hiện đang phát" } }, "errors": { "general": { - "title": "", - "text": "" + "title": "Không thể tải nội dung", + "text": "Không thể lấy thông tin từ máy chủ. Vui lòng kiểm tra nhật ký để biết thêm chi tiết" } } } diff --git a/public/locales/vi/modules/rss.json b/public/locales/vi/modules/rss.json index 230d75cf5..5e4b82043 100644 --- a/public/locales/vi/modules/rss.json +++ b/public/locales/vi/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { - "name": "", + "name": "Tiện ích RSS", "description": "", "settings": { - "title": "", + "title": "Cài đặt cho tiện ích RSS", "rssFeedUrl": { + "label": "", + "description": "" + }, + "refreshInterval": { "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "", - "text": "" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/vi/modules/video-stream.json b/public/locales/vi/modules/video-stream.json index 539daa1c4..8c0d0792d 100644 --- a/public/locales/vi/modules/video-stream.json +++ b/public/locales/vi/modules/video-stream.json @@ -1,24 +1,24 @@ { "descriptor": { - "name": "", - "description": "", + "name": "Luồng video", + "description": "Nhúng luồng hoặc video từ camera hoặc trang web", "settings": { - "title": "", + "title": "Cài đặt cho tiện ích luồng video", "FeedUrl": { - "label": "" + "label": "URL nguồn" }, "autoPlay": { - "label": "" + "label": "Tự động phát" }, "muted": { - "label": "" + "label": "Tắt âm thanh" }, "controls": { - "label": "" + "label": "Trình điều khiển video" } } }, "errors": { - "invalidStream": "" + "invalidStream": "Luồng không hợp lệ" } } \ No newline at end of file diff --git a/public/locales/vi/settings/common.json b/public/locales/vi/settings/common.json index 52e8a0709..0f86edda3 100644 --- a/public/locales/vi/settings/common.json +++ b/public/locales/vi/settings/common.json @@ -6,33 +6,33 @@ "customizations": "Cá nhân hoá" }, "tips": { - "configTip": "" + "configTip": "Tải tệp cấu hình của bạn lên chỉ bằng cách kéo và thả tệp vào trong trang!" }, "credits": { "madeWithLove": "From @ with ❤️", - "thirdPartyContent": "", + "thirdPartyContent": "Xem nội dung bên thứ ba", "thirdPartyContentTable": { - "dependencyName": "", + "dependencyName": "Phụ thuộc", "dependencyVersion": "Phiên bản" } }, "grow": "Khung giãn (chiếm toàn bộ không gian)", "layout": { "preview": { - "title": "", - "subtitle": "" + "title": "Xem trước", + "subtitle": "Thay đổi sẽ được tự động lưu" }, - "divider": "", - "main": "", - "sidebar": "", - "cannotturnoff": "", - "dashboardlayout": "", - "enablersidebar": "", - "enablelsidebar": "", - "enablesearchbar": "", - "enabledocker": "", - "enableping": "", - "enablelsidebardesc": "", - "enablersidebardesc": "" + "divider": "Tùy chọn bố cục", + "main": "Chính", + "sidebar": "Thanh bên", + "cannotturnoff": "Không thể tắt", + "dashboardlayout": "Bố cục bảng điều khiển", + "enablersidebar": "Bật thanh bên phải", + "enablelsidebar": "Bật thanh bên trái", + "enablesearchbar": "Bật thanh tìm kiếm", + "enabledocker": "Bật tích hợp docker", + "enableping": "Bật chức năng Ping", + "enablelsidebardesc": "Tuỳ thích. Chỉ có thể được sử dụng cho các ứng dụng và tích hợp", + "enablersidebardesc": "Tuỳ thích. Chỉ có thể được sử dụng cho các ứng dụng và tích hợp" } } diff --git a/public/locales/vi/settings/customization/general.json b/public/locales/vi/settings/customization/general.json index 28da46431..2cbe418a9 100644 --- a/public/locales/vi/settings/customization/general.json +++ b/public/locales/vi/settings/customization/general.json @@ -1,21 +1,21 @@ { - "text": "", + "text": "Tùy chỉnh cho phép bạn định cấu hình và điều chỉnh trải nghiệm Homarr theo ý thích của mình.", "accordeon": { "layout": { "name": "Bố cục", - "description": "" + "description": "Bật và tắt các thành phần trên tiêu đề và ô bảng điều khiển" }, "gridstack": { - "name": "", - "description": "" + "name": "Chồng lưới", + "description": "Tùy chỉnh hành vi và các cột của khu vực bảng điều khiển của bạn" }, "pageMetadata": { "name": "Metadata trang", - "description": "" + "description": "Điều chỉnh tiêu đề, logo và PWA" }, "appereance": { "name": "Hiển thị", - "description": "" + "description": "Tuỳ chỉnh nền, màu và hiển thị của các ứng dụng" } } } \ No newline at end of file diff --git a/public/locales/vi/settings/customization/gridstack.json b/public/locales/vi/settings/customization/gridstack.json index af30d7355..8c0147689 100644 --- a/public/locales/vi/settings/customization/gridstack.json +++ b/public/locales/vi/settings/customization/gridstack.json @@ -1,10 +1,10 @@ { "columnsCount": { - "labelPreset": "", - "descriptionPreset": "", - "descriptionExceedsPreset": "" + "labelPreset": "Số cột cho kích thước {{size}}", + "descriptionPreset": "Số cột khi màn hình có chiều rộng ít hơn {{pixels}} pixel", + "descriptionExceedsPreset": "Số cột khi màn hình có chiều rộng vượt quá {{pixels}} pixel" }, - "unsavedChanges": "", + "unsavedChanges": "Bạn có các thay đổi chưa lưu. Nhấp vào nút Áp dụng thay đổi bên dưới để áp dụng và lưu.", "applyChanges": "Áp dụng thay đổi", "defaultValues": "Giá trị mặc định" } \ No newline at end of file diff --git a/public/locales/vi/settings/customization/page-appearance.json b/public/locales/vi/settings/customization/page-appearance.json index dd2265cea..cbd51a8e7 100644 --- a/public/locales/vi/settings/customization/page-appearance.json +++ b/public/locales/vi/settings/customization/page-appearance.json @@ -1,26 +1,26 @@ { "pageTitle": { "label": "Tiêu đề trang", - "description": "" + "description": "Tiêu đề bảng điều khiển ở góc trái" }, "metaTitle": { "label": "Tiêu đề meta", - "description": "" + "description": "Tiêu đề hiển thị trên tab trình duyệt của bạn" }, "logo": { "label": "Logo", - "description": "" + "description": "Logo bảng điều khiển ở góc trái" }, "favicon": { "label": "Favicon", - "description": "" + "description": "Biểu tượng hiển thị trên tab trình duyệt của bạn" }, "background": { "label": "Hình nền" }, "customCSS": { "label": "CSS tuỳ chỉnh", - "description": "", + "description": "Ngoài ra có thể tùy chỉnh bảng điều khiển của bạn bằng CSS, chỉ được đề xuất cho người dùng có kinh nghiệm", "placeholder": "CSS tùy chỉnh sẽ được áp dụng sau cùng", "applying": "Đang áp dụng CSS..." }, diff --git a/public/locales/vi/settings/general/config-changer.json b/public/locales/vi/settings/general/config-changer.json index 6ede7dab7..7a3675c3c 100644 --- a/public/locales/vi/settings/general/config-changer.json +++ b/public/locales/vi/settings/general/config-changer.json @@ -1,6 +1,6 @@ { "configSelect": { - "label": "", + "label": "Chuyển cấu hình", "description": "{{configCount}} cấu hình có sẵn", "loadingNew": "Đang tải cấu hình...", "pleaseWait": "Vui lòng chờ cho đến khi cấu hình mới được tải!" @@ -36,10 +36,10 @@ }, "confirmDeletion": { "title": "Xác nhận xóa cấu hình của bạn", - "warningText": "", - "text": "", + "warningText": "Bạn sắp xóa '{{configName}}'", + "text": "Xin lưu ý rằng thao tác này không thể hoàn tác và dữ liệu của bạn sẽ bị mất vĩnh viễn. Sau khi nhấp vào nút này, tệp sẽ bị xóa vĩnh viễn khỏi đĩa của bạn. Hãy nhớ tạo một bản sao lưu thích hợp cho cấu hình của bạn.", "buttons": { - "confirm": "" + "confirm": "Vâng, xoá '{{configName}}'" } } }, @@ -58,7 +58,7 @@ }, "deleteFailedDefaultConfig": { "title": "Cấu hình mặc định không thể bị xoá", - "message": "" + "message": "Cấu hình không bị xóa khỏi hệ thống tệp" } } }, @@ -75,12 +75,12 @@ } }, "accept": { - "title": "", - "text": "" + "title": "Tải lên cấu hình", + "text": "Kéo tệp vào đây để tải lên một cấu hình. Chỉ hỗ trợ tệp JSON." }, "reject": { - "title": "", - "text": "" + "title": "Kéo và Thả bị từ chối", + "text": "Định dạng tệp này không được hỗ trợ. Vui lòng chỉ tải tệp JSON." } } } diff --git a/public/locales/vi/widgets/error-boundary.json b/public/locales/vi/widgets/error-boundary.json new file mode 100644 index 000000000..793b21507 --- /dev/null +++ b/public/locales/vi/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "Ối, đã xảy ra lỗi!", + "buttons": { + "details": "Chi tiết", + "tryAgain": "Thử lại" + } + }, + "modal": { + "text": "", + "label": "Lỗi của bạn", + "reportButton": "Báo cáo lỗi này" + } +} \ No newline at end of file diff --git a/public/locales/zh/common.json b/public/locales/zh/common.json index 2a1c757f6..0c76984bb 100644 --- a/public/locales/zh/common.json +++ b/public/locales/zh/common.json @@ -9,13 +9,14 @@ "version": "版本", "changePosition": "改变位置", "remove": "移除", - "removeConfirm": "确定要删除 {{item}} 吗?", + "removeConfirm": "你确定要删除 {{item}} 吗?", + "createItem": "", "sections": { "settings": "设置", "dangerZone": "危险操作" }, "secrets": { - "apiKey": "Api密钥", + "apiKey": "API密钥", "username": "用户名", "password": "密码" }, diff --git a/public/locales/zh/layout/modals/about.json b/public/locales/zh/layout/modals/about.json index 3717aa10d..244f0bd13 100644 --- a/public/locales/zh/layout/modals/about.json +++ b/public/locales/zh/layout/modals/about.json @@ -1,14 +1,18 @@ { - "description": "Homarr是一个 顺滑现代化 的面板,它把你所有的应用和服务汇于指尖。有了Homarr,你可以在一个页面访问和控制一切。Homarr与你添加的应用无缝交互,为你提供有价值的信息并由你完全把控。安装Homarr轻松简单,并且支持多种部署方式。", + "description": "Homarr是一个 顺滑的现代化 的面板,它把你所有的应用和服务汇于指尖。有了Homarr,你可以在一个页面访问和控制一切。Homarr与你添加的应用无缝交互,为你提供有价值的信息并由你完全控制。安装Homarr轻松简单,并且支持多种部署方式。", "contact": "遇到困难或问题?请与我们联系!", - "addToDashboard": "添加到面板", + "addToDashboard": "添加到控制面板", + "tip": "", + "key": "", + "action": "", + "keybinds": "", "metrics": { - "configurationSchemaVersion": "配置方案版本", - "configurationsCount": "可用配置", + "configurationSchemaVersion": "配置样式版本", + "configurationsCount": "可用的配置", "version": "版本", "nodeEnvironment": "节点环境", "i18n": "加载了I18n翻译名称空间", "locales": "配置的I18n区域设置", - "experimental_disableEditMode": "" + "experimental_disableEditMode": "实验: 禁用编辑模式" } } \ No newline at end of file diff --git a/public/locales/zh/layout/modals/add-app.json b/public/locales/zh/layout/modals/add-app.json index a38a664ba..fdaeeb1d6 100644 --- a/public/locales/zh/layout/modals/add-app.json +++ b/public/locales/zh/layout/modals/add-app.json @@ -1,7 +1,7 @@ { "tabs": { "general": "一般", - "behaviour": "行为", + "behaviour": "", "network": "网络", "appearance": "外观", "integration": "融合" @@ -41,12 +41,12 @@ "label": "应用图标", "description": "", "autocomplete": { - "title": "", - "text": "" + "title": "未找到相应结果", + "text": "尝试使用一个更具体的搜索词。如果你找不到你想要的图标,请粘贴上面的图片URL,以获得一个自定义图标。" }, "noItems": { - "title": "", - "text": "" + "title": "加载外部图标", + "text": "这可能需要几秒钟" } } }, diff --git a/public/locales/zh/modules/common.json b/public/locales/zh/modules/common.json index c37b13e11..d95286e50 100644 --- a/public/locales/zh/modules/common.json +++ b/public/locales/zh/modules/common.json @@ -4,7 +4,7 @@ }, "errors": { "unmappedOptions": { - "text": "在配置中检测到未使用的参数
{{key}}。Homarr目前还无法解释和使用这个参数。为了避免任何意外情况的发生,请备份你的配置并正确修改你的配置。" + "text": "" } } } diff --git a/public/locales/zh/modules/dashdot.json b/public/locales/zh/modules/dashdot.json index 341fd67f4..817df9efa 100644 --- a/public/locales/zh/modules/dashdot.json +++ b/public/locales/zh/modules/dashdot.json @@ -14,53 +14,53 @@ "label": "" }, "graphHeight": { - "label": "" + "label": "图形的高度" }, "graphsOrder": { "label": "", "storage": { "label": "存储", "enabled": { - "label": "" + "label": "在小工具中显示" }, "span": { "label": "" }, "compactView": { - "label": "" + "label": "显示为文本(紧凑)" }, "multiView": { - "label": "" + "label": "显示为多驱动视图" } }, "network": { "label": "网络", "enabled": { - "label": "" + "label": "在小工具中显示" }, "span": { "label": "" }, "compactView": { - "label": "" + "label": "显示为文本(紧凑)" } }, "cpu": { "label": "CPU", "enabled": { - "label": "" + "label": "在小工具中显示" }, "span": { "label": "" }, "multiView": { - "label": "" + "label": "显示为多核视图" } }, "ram": { - "label": "", + "label": "内存", "enabled": { - "label": "" + "label": "在小工具中显示" }, "span": { "label": "" @@ -69,7 +69,7 @@ "gpu": { "label": "GPU", "enabled": { - "label": "" + "label": "在小工具中显示" }, "span": { "label": "" diff --git a/public/locales/zh/modules/iframe.json b/public/locales/zh/modules/iframe.json index 43dd325ac..57e6b6f26 100644 --- a/public/locales/zh/modules/iframe.json +++ b/public/locales/zh/modules/iframe.json @@ -1,9 +1,9 @@ { "descriptor": { - "name": "IFrame", + "name": "iFrame", "description": "嵌入互联网上的任何内容。一些网站可能限制访问。", "settings": { - "title": "IFrame设置", + "title": "iFrame设置", "embedUrl": { "label": "嵌入URL" }, @@ -15,7 +15,7 @@ "card": { "errors": { "noUrl": { - "title": "输入 URL", + "title": "", "text": "确保您在小部件配置中输入了一个有效的地址" } } diff --git a/public/locales/zh/modules/media-requests-list.json b/public/locales/zh/modules/media-requests-list.json new file mode 100644 index 000000000..72c9da211 --- /dev/null +++ b/public/locales/zh/modules/media-requests-list.json @@ -0,0 +1,17 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "noRequests": "", + "pending": "", + "nonePending": "", + "state": { + "approved": "", + "pendingApproval": "", + "declined": "" + } +} diff --git a/public/locales/zh/modules/media-requests-stats.json b/public/locales/zh/modules/media-requests-stats.json new file mode 100644 index 000000000..0ea9c580e --- /dev/null +++ b/public/locales/zh/modules/media-requests-stats.json @@ -0,0 +1,14 @@ +{ + "descriptor": { + "name": "", + "description": "", + "settings": { + "title": "" + } + }, + "stats": { + "pending": "", + "tvRequests": "", + "movieRequests": "" + } +} diff --git a/public/locales/zh/modules/rss.json b/public/locales/zh/modules/rss.json index 5424c1b3a..85f800113 100644 --- a/public/locales/zh/modules/rss.json +++ b/public/locales/zh/modules/rss.json @@ -1,19 +1,23 @@ { "descriptor": { "name": "RSS小工具", - "description": "从RSS提要中抓取项目并显示它们。常用于在线新闻", + "description": "", "settings": { "title": "设置RSS小部件", "rssFeedUrl": { - "label": "RSS订阅网址" + "label": "", + "description": "" + }, + "refreshInterval": { + "label": "" } - } - }, - "card": { - "errors": { - "general": { - "title": "无法检索到RSS源", - "text": "触发RSS 种子时出现问题。 请确保您've 正确配置了种子并使用一个符合官方标准规格的有效RSS url。 更新种子后,您可能需要保存您的面板并刷新页面。" + }, + "card": { + "errors": { + "general": { + "title": "", + "text": "" + } } } } diff --git a/public/locales/zh/modules/torrents-status.json b/public/locales/zh/modules/torrents-status.json index 98b71ad74..2e63b40b8 100644 --- a/public/locales/zh/modules/torrents-status.json +++ b/public/locales/zh/modules/torrents-status.json @@ -50,7 +50,7 @@ "text": "添加一个支持Torrent的客户端来查看你当前的下载情况" }, "generic": { - "title": "发生了一个未知的错误", + "title": "发生了一个意外的错误", "text": "Homarr无法与您的Torrent客户端通信。请检查您的配置" } }, diff --git a/public/locales/zh/modules/video-stream.json b/public/locales/zh/modules/video-stream.json index 7afa408e0..6fe7de322 100644 --- a/public/locales/zh/modules/video-stream.json +++ b/public/locales/zh/modules/video-stream.json @@ -5,7 +5,7 @@ "settings": { "title": "设置视频流小部件", "FeedUrl": { - "label": "订阅URL" + "label": "订阅源的URL" }, "autoPlay": { "label": "自动播放" diff --git a/public/locales/zh/settings/customization/general.json b/public/locales/zh/settings/customization/general.json index 763c37441..01426d32e 100644 --- a/public/locales/zh/settings/customization/general.json +++ b/public/locales/zh/settings/customization/general.json @@ -15,7 +15,7 @@ }, "appereance": { "name": "外观", - "description": "自定义背景,颜色和应用程序外观" + "description": "自定义背景、颜色和应用程序的外观" } } } \ No newline at end of file diff --git a/public/locales/zh/settings/customization/page-appearance.json b/public/locales/zh/settings/customization/page-appearance.json index 0e7b445a0..a95c0dd47 100644 --- a/public/locales/zh/settings/customization/page-appearance.json +++ b/public/locales/zh/settings/customization/page-appearance.json @@ -5,22 +5,22 @@ }, "metaTitle": { "label": "元标题", - "description": "标题显示为您的标签名称" + "description": "在你的浏览器标签中显示的标题" }, "logo": { "label": "徽标", - "description": "左上角的仪表盘标志" + "description": "显示在左上方的标志" }, "favicon": { "label": "网站图标", - "description": "在您的选项卡名称前面使用的图标" + "description": "在你的浏览器标签中显示的图标" }, "background": { "label": "背景" }, "customCSS": { "label": "自定义CSS", - "description": "自定义你的仪表板上的所有元素,只推荐给有经验的用户", + "description": "此外,使用CSS定制你的仪表板,只推荐给有经验的用户。", "placeholder": "自定义 CSS 将在最后应用", "applying": "应用CSS..." }, diff --git a/public/locales/zh/settings/general/config-changer.json b/public/locales/zh/settings/general/config-changer.json index 484b45273..9b0bd46c0 100644 --- a/public/locales/zh/settings/general/config-changer.json +++ b/public/locales/zh/settings/general/config-changer.json @@ -36,8 +36,8 @@ }, "confirmDeletion": { "title": "确认删除你的配置", - "warningText": "你即将删除 '{{configName}}'。", - "text": "请注意,删除是不可逆的,您的数据将永久丢失。点击此按钮后,该文件将从您的磁盘上永久删除。请确保为您的配置创建足够的备份。", + "warningText": "您要删除的是 '{{configName}}' 。", + "text": "请注意,删除是不可逆转的,你的数据将被永久地丢失。点击这个按钮后,该文件将从你的磁盘中永久删除。请确保为你的配置创建一个充分的备份。", "buttons": { "confirm": "是的,删除 '{{configName}}' 。" } @@ -57,7 +57,7 @@ "message": "配置删除失败" }, "deleteFailedDefaultConfig": { - "title": "默认值不能被删除", + "title": "默认配置不能被删除", "message": "配置没有从文件系统中删除" } } diff --git a/public/locales/zh/settings/general/search-engine.json b/public/locales/zh/settings/general/search-engine.json index 91f1be4c7..8fef0bc63 100644 --- a/public/locales/zh/settings/general/search-engine.json +++ b/public/locales/zh/settings/general/search-engine.json @@ -2,7 +2,7 @@ "title": "搜索引擎", "configurationName": "搜索引擎设置", "tips": { - "generalTip": "你可以使用多种前缀!在你的查询语句前面添加这些信息将过滤结果。!s (Web)、!t (torrent)、!y (YouTube)、!m (Media)。", + "generalTip": "你可以使用多个前缀!在你的查询前加入这些前缀将过滤结果。!s (Web), !t (Torrents), !y (YouTube), 和 !m (Media)。", "placeholderTip": "%s 可以作为查询的占位符。" }, "customEngine": { diff --git a/public/locales/zh/widgets/error-boundary.json b/public/locales/zh/widgets/error-boundary.json new file mode 100644 index 000000000..1782aed72 --- /dev/null +++ b/public/locales/zh/widgets/error-boundary.json @@ -0,0 +1,14 @@ +{ + "card": { + "title": "", + "buttons": { + "details": "", + "tryAgain": "" + } + }, + "modal": { + "text": "", + "label": "", + "reportButton": "" + } +} \ No newline at end of file diff --git a/src/components/AppAvatar.test.tsx b/src/components/AppAvatar.test.tsx new file mode 100644 index 000000000..6fe1947b0 --- /dev/null +++ b/src/components/AppAvatar.test.tsx @@ -0,0 +1,13 @@ +import { render, screen, cleanup } from '@testing-library/react'; +import { describe, expect, it, afterEach } from 'vitest'; +import { AppAvatar } from './AppAvatar'; + +describe('AppAvatar', () => { + afterEach(cleanup); + + it('display placeholder when no url', () => { + render(); + + expect(screen.getByTestId('app-avatar')).toBeDefined(); + }); +}); diff --git a/src/components/AppAvatar.tsx b/src/components/AppAvatar.tsx index 08ca5c7b4..e5fcbfa25 100644 --- a/src/components/AppAvatar.tsx +++ b/src/components/AppAvatar.tsx @@ -11,6 +11,7 @@ export const AppAvatar = ({ return ( - + {t('configSelect.pleaseWait')} diff --git a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx index 8f366fd9f..cd175fa99 100644 --- a/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx +++ b/src/components/Dashboard/Modals/AboutModal/AboutModal.tsx @@ -1,18 +1,19 @@ import { + Accordion, ActionIcon, Anchor, Badge, Button, createStyles, - Divider, Grid, Group, HoverCard, + Kbd, Modal, - Stack, Table, Text, Title, + Tooltip, } from '@mantine/core'; import { IconAnchor, @@ -35,6 +36,8 @@ import { useConfigContext } from '../../../../config/provider'; import { useConfigStore } from '../../../../config/store'; import { useEditModeInformationStore } from '../../../../hooks/useEditModeInformation'; import { usePackageAttributesStore } from '../../../../tools/client/zustands/usePackageAttributesStore'; +import { useColorTheme } from '../../../../tools/color'; +import Tip from '../../../layout/Tip'; import { usePrimaryGradient } from '../../../layout/useGradient'; import Credits from '../../../Settings/Common/Credits'; @@ -50,6 +53,23 @@ export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutMod const informations = useInformationTableItems(newVersionAvailable); const { t } = useTranslation(['common', 'layout/modals/about']); + const keybinds = [ + { key: 'Mod + J', shortcut: 'Toggle light/dark mode' }, + { key: 'Mod + K', shortcut: 'Focus on search bar' }, + { key: 'Mod + B', shortcut: 'Open docker widget' }, + { key: 'Mod + E', shortcut: 'Toggle Edit mode' }, + ]; + const rows = keybinds.map((element) => ( + + + {element.key} + + + {element.shortcut} + + + )); + return ( closeModal()} @@ -76,7 +96,7 @@ export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutMod - +
{informations.map((item, index) => ( @@ -100,8 +120,26 @@ export const AboutModal = ({ opened, closeModal, newVersionAvailable }: AboutMod ))}
+ + + }> + {t('layout/modals/about:keybinds')} + + + + + + + + + + {rows} +
{t('layout/modals/about:key')}{t('layout/modals/about:action')}
+ {t('layout/modals/about:tip')} +
+
+
- {t('layout/modals/about:contact')} @@ -161,9 +199,9 @@ interface ExtendedInitOptions extends InitOptions { } const useInformationTableItems = (newVersionAvailable?: string): InformationTableItem[] => { - const colorGradiant = usePrimaryGradient(); const { attributes } = usePackageAttributesStore(); const { editModeEnabled } = useEditModeInformationStore(); + const { primaryColor } = useColorTheme(); const { configVersion } = useConfigContext(); const { configs } = useConfigStore(); @@ -177,15 +215,19 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl icon: , label: 'experimental_disableEditMode', content: ( - + WARNING - - This is an experimental feature, where the edit mode is disabled entirely - no config - modifications are possbile anymore. All update requests for the config will be dropped - on the API. This will be removed in future versions, as Homarr will receive a proper - authentication system, which will make this obsolete. - - + ), }, ]; @@ -201,7 +243,7 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl icon: , label: 'i18n', content: ( - + {usedI18nNamespaces.length} ), @@ -210,7 +252,7 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl icon: , label: 'locales', content: ( - + {initOptions.locales.length} ), @@ -223,7 +265,7 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl icon: , label: 'configurationSchemaVersion', content: ( - + {configVersion} ), @@ -232,7 +274,7 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl icon: , label: 'configurationsCount', content: ( - + {configs.length} ), @@ -242,7 +284,7 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl label: 'version', content: ( - + {attributes.packageVersion ?? 'Unknown'} {newVersionAvailable && ( @@ -282,7 +324,7 @@ const useInformationTableItems = (newVersionAvailable?: string): InformationTabl icon: , label: 'nodeEnvironment', content: ( - + {attributes.environment} ), diff --git a/src/components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal.tsx b/src/components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal.tsx index 241503adb..b6a9e3677 100644 --- a/src/components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal.tsx +++ b/src/components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal.tsx @@ -54,8 +54,8 @@ export const ChangeWidgetPositionModal = ({ closeModal(id); }; - const widthData = useWidthData(innerProps.widgetId); - const heightData = useHeightData(innerProps.widgetId); + const widthData = useWidthData(innerProps.widgetType); + const heightData = useHeightData(innerProps.widgetType); return ( } + dropdownComponent={(props: any) => } + dropdownPosition="bottom" required onChange={(event) => { if (allowAppNamePropagation) { diff --git a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/GenericSecretInput.tsx b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/GenericSecretInput.tsx index 895dbf015..b65b0f5b7 100644 --- a/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/GenericSecretInput.tsx +++ b/src/components/Dashboard/Modals/EditAppModal/Tabs/IntegrationTab/Components/InputElements/GenericSecretInput.tsx @@ -6,7 +6,6 @@ import { Grid, Group, PasswordInput, - Stack, ThemeIcon, Title, Text, @@ -40,7 +39,7 @@ export const GenericSecretInput = ({ const Icon = setIcon; - const [displayUpdateField, setDisplayUpdateField] = useState(false); + const [displayUpdateField, setDisplayUpdateField] = useState(!secretIsPresent); const { t } = useTranslation(['layout/modals/add-app', 'common']); return ( @@ -51,26 +50,26 @@ export const GenericSecretInput = ({ - + {t(label)} - {secretIsPresent ? ( - - {t('integration.type.defined')} - - ) : ( - - {t('integration.type.undefined')} - - )} + + {secretIsPresent + ? t('integration.type.defined') + : t('integration.type.undefined')} + {type === 'private' ? ( - + {type === 'private' ? 'Private: Once saved, you cannot read out this value again' : 'Public: Can be read out repeatedly'} - + - {displayUpdateField === true ? ( { const { t } = useTranslation('layout/modals/add-app'); + const acceptableStatusCodes = (form.values.network.statusCodes ?? ['200']).map((x) => + x.toString() + ); return ( { data={StatusCodes} clearable searchable - defaultValue={form.values.network.okStatus.map((x) => `${x}`)} + defaultValue={acceptableStatusCodes} variant="default" {...form.getInputProps('network.statusCodes')} /> diff --git a/src/components/Dashboard/Modals/SelectElement/Components/Overview/AvailableElementsOverview.tsx b/src/components/Dashboard/Modals/SelectElement/Components/Overview/AvailableElementsOverview.tsx index d746ae334..0ec7e091d 100644 --- a/src/components/Dashboard/Modals/SelectElement/Components/Overview/AvailableElementsOverview.tsx +++ b/src/components/Dashboard/Modals/SelectElement/Components/Overview/AvailableElementsOverview.tsx @@ -95,7 +95,7 @@ export const AvailableElementTypes = ({ }, network: { enabledStatusChecker: true, - okStatus: [200], + statusCodes: ['200'], }, behaviour: { isOpeningNewTab: true, diff --git a/src/components/Dashboard/Modals/SelectElement/Components/Shared/GenericElementType.tsx b/src/components/Dashboard/Modals/SelectElement/Components/Shared/GenericElementType.tsx index fbf9cd169..cde3d46e4 100644 --- a/src/components/Dashboard/Modals/SelectElement/Components/Shared/GenericElementType.tsx +++ b/src/components/Dashboard/Modals/SelectElement/Components/Shared/GenericElementType.tsx @@ -29,7 +29,7 @@ export const GenericAvailableElementType = ({ : image; return ( - + diff --git a/src/components/Dashboard/Modals/SelectElement/Components/StaticElementsTab/AvailableStaticElementsTab.tsx b/src/components/Dashboard/Modals/SelectElement/Components/StaticElementsTab/AvailableStaticElementsTab.tsx index ef0da1757..6ae6b5562 100644 --- a/src/components/Dashboard/Modals/SelectElement/Components/StaticElementsTab/AvailableStaticElementsTab.tsx +++ b/src/components/Dashboard/Modals/SelectElement/Components/StaticElementsTab/AvailableStaticElementsTab.tsx @@ -19,7 +19,7 @@ export const AvailableStaticTypes = ({ onClickBack }: AvailableStaticTypesProps) they don't integrate with any apps and their content never changes. - + { const { t } = useTranslation('layout/element-selector/selector'); - const activeWidgets = useConfigContext().config?.widgets ?? []; return ( <> @@ -23,11 +21,9 @@ export const AvailableIntegrationElements = ({ - {Object.entries(widgets) - .filter(([widgetId]) => !activeWidgets.some((aw) => aw.id === widgetId)) - .map(([k, v]) => ( - - ))} + {Object.entries(widgets).map(([k, v]) => ( + + ))} ); diff --git a/src/components/Dashboard/Modals/SelectElement/Components/WidgetsTab/WidgetElementType.tsx b/src/components/Dashboard/Modals/SelectElement/Components/WidgetsTab/WidgetElementType.tsx index ce3a2b708..8ff521b09 100644 --- a/src/components/Dashboard/Modals/SelectElement/Components/WidgetsTab/WidgetElementType.tsx +++ b/src/components/Dashboard/Modals/SelectElement/Components/WidgetsTab/WidgetElementType.tsx @@ -2,6 +2,7 @@ import { useModals } from '@mantine/modals'; import { showNotification } from '@mantine/notifications'; import { IconChecks, TablerIcon } from '@tabler/icons'; import { useTranslation } from 'next-i18next'; +import { v4 as uuidv4 } from 'uuid'; import { useConfigContext } from '../../../../../../config/provider'; import { useConfigStore } from '../../../../../../config/store'; import { IWidget, IWidgetDefinition } from '../../../../../../widgets/widgets'; @@ -32,9 +33,10 @@ export const WidgetElementType = ({ id, image, disabled, widget }: WidgetElement (prev) => ({ ...prev, widgets: [ - ...prev.widgets.filter((w) => w.id !== widget.id), + ...prev.widgets, { - id: widget.id, + id: uuidv4(), + type: widget.id, properties: Object.entries(widget.options).reduce((prev, [k, v]) => { const newPrev = prev; newPrev[k] = v.defaultValue; diff --git a/src/components/Dashboard/Tiles/Apps/AppPing.tsx b/src/components/Dashboard/Tiles/Apps/AppPing.tsx index d94cdc676..0a14bb9f2 100644 --- a/src/components/Dashboard/Tiles/Apps/AppPing.tsx +++ b/src/components/Dashboard/Tiles/Apps/AppPing.tsx @@ -19,7 +19,7 @@ export const AppPing = ({ app }: AppPingProps) => { queryKey: ['ping', { id: app.id, name: app.name }], queryFn: async () => { const response = await fetch(`/api/modules/ping?url=${encodeURI(app.url)}`); - const isOk = app.network.okStatus.includes(response.status); + const isOk = app.network.statusCodes.includes(response.status.toString()); return { status: response.status, state: isOk ? 'online' : 'down', @@ -60,5 +60,3 @@ export const AppPing = ({ app }: AppPingProps) => { ); }; - -type PingState = 'loading' | 'down' | 'online'; diff --git a/src/components/Dashboard/Tiles/Apps/AppTile.tsx b/src/components/Dashboard/Tiles/Apps/AppTile.tsx index 1c9edd328..83989478a 100644 --- a/src/components/Dashboard/Tiles/Apps/AppTile.tsx +++ b/src/components/Dashboard/Tiles/Apps/AppTile.tsx @@ -36,7 +36,13 @@ export const AppTile = ({ className, app }: AppTileProps) => { className="dashboard-tile-app" > @@ -87,12 +93,10 @@ export const AppTile = ({ className, app }: AppTileProps) => { const useStyles = createStyles((theme, _params, getRef) => ({ image: { - ref: getRef('image'), maxHeight: '90%', maxWidth: '90%', }, appName: { - ref: getRef('appName'), wordBreak: 'break-word', }, button: { diff --git a/src/components/Dashboard/Tiles/GenericTileMenu.tsx b/src/components/Dashboard/Tiles/GenericTileMenu.tsx index fba87edfa..d414d0613 100644 --- a/src/components/Dashboard/Tiles/GenericTileMenu.tsx +++ b/src/components/Dashboard/Tiles/GenericTileMenu.tsx @@ -24,9 +24,9 @@ export const GenericTileMenu = ({ } return ( - + - + diff --git a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx index f58f30750..34d7d985d 100644 --- a/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx +++ b/src/components/Dashboard/Tiles/Widgets/WidgetsEditModal.tsx @@ -26,6 +26,7 @@ import { DraggableList } from './DraggableList'; export type WidgetEditModalInnerProps = { widgetId: string; + widgetType: string; options: IWidget['properties']; widgetOptions: IWidget['properties']; }; @@ -37,7 +38,7 @@ export const WidgetsEditModal = ({ id, innerProps, }: ContextModalProps) => { - const { t } = useTranslation([`modules/${innerProps.widgetId}`, 'common']); + const { t } = useTranslation([`modules/${innerProps.widgetType}`, 'common']); const [moduleProperties, setModuleProperties] = useState(innerProps.options); const items = Object.entries(innerProps.widgetOptions ?? {}) as [ string, @@ -45,7 +46,7 @@ export const WidgetsEditModal = ({ ][]; // Find the Key in the "Widgets" Object that matches the widgetId - const currentWidgetDefinition = Widgets[innerProps.widgetId as keyof typeof Widgets]; + const currentWidgetDefinition = Widgets[innerProps.widgetType as keyof typeof Widgets]; const { name: configName } = useConfigContext(); const updateConfig = useConfigStore((x) => x.updateConfig); @@ -100,7 +101,7 @@ export const WidgetsEditModal = ({ + {t(`descriptor.settings.${key}.label`)} ); + case 'multiple-text': + return ( + ({ value: name, label: name }))} + label={t(`descriptor.settings.${key}.label`)} + description={t(`descriptor.settings.${key}.description`)} + defaultValue={value as string[]} + withinPortal + searchable + creatable + getCreateLabel={(query) => t('common:createItem', { item: query })} + onChange={(values) => + handleChange( + key, + values.map((item: string) => item) + ) + } + /> + ); /* eslint-enable no-case-declarations */ default: return null; diff --git a/src/components/Dashboard/Tiles/Widgets/WidgetsMenu.tsx b/src/components/Dashboard/Tiles/Widgets/WidgetsMenu.tsx index a1a0d7983..491ae346f 100644 --- a/src/components/Dashboard/Tiles/Widgets/WidgetsMenu.tsx +++ b/src/components/Dashboard/Tiles/Widgets/WidgetsMenu.tsx @@ -10,6 +10,7 @@ import { WidgetsRemoveModalInnerProps } from './WidgetsRemoveModal'; export type WidgetChangePositionModalInnerProps = { widgetId: string; + widgetType: string; widget: IWidget; wrapperColumnCount: number; }; @@ -27,8 +28,8 @@ export const WidgetsMenu = ({ integration, widget }: WidgetsMenuProps) => { // Match widget.id with WidgetsDefinitions // First get the keys const keys = Object.keys(WidgetsDefinitions); - // Then find the key that matches the widget.id - const widgetDefinition = keys.find((key) => key === widget.id); + // Then find the key that matches the widget.type + const widgetDefinition = keys.find((key) => key === widget.type); // Then get the widget definition const widgetDefinitionObject = WidgetsDefinitions[widgetDefinition as keyof typeof WidgetsDefinitions]; @@ -38,13 +39,8 @@ export const WidgetsMenu = ({ integration, widget }: WidgetsMenuProps) => { modal: 'integrationRemove', title: {t('common:remove')}, innerProps: { - widgetId: integration, - }, - styles: { - inner: { - position: 'sticky', - top: 30, - }, + widgetId: widget.id, + widgetType: integration, }, }); }; @@ -55,16 +51,11 @@ export const WidgetsMenu = ({ integration, widget }: WidgetsMenuProps) => { size: 'xl', title: null, innerProps: { - widgetId: integration, + widgetId: widget.id, + widgetType: integration, widget, wrapperColumnCount, }, - styles: { - inner: { - position: 'sticky', - top: 30, - }, - }, }); }; @@ -73,19 +64,13 @@ export const WidgetsMenu = ({ integration, widget }: WidgetsMenuProps) => { modal: 'integrationOptions', title: {t('descriptor.settings.title')}, innerProps: { - widgetId: integration, + widgetId: widget.id, + widgetType: integration, options: widget.properties, // Cast as the right type for the correct widget widgetOptions: widgetDefinitionObject.options as any, }, zIndex: 5, - styles: { - inner: { - position: 'sticky', - top: 30, - maxHeight: '100%', - }, - }, }); }; diff --git a/src/components/Dashboard/Tiles/Widgets/WidgetsRemoveModal.tsx b/src/components/Dashboard/Tiles/Widgets/WidgetsRemoveModal.tsx index f92e34380..e50229c0b 100644 --- a/src/components/Dashboard/Tiles/Widgets/WidgetsRemoveModal.tsx +++ b/src/components/Dashboard/Tiles/Widgets/WidgetsRemoveModal.tsx @@ -7,6 +7,7 @@ import { useConfigStore } from '../../../../config/store'; export type WidgetsRemoveModalInnerProps = { widgetId: string; + widgetType: string; }; export const WidgetsRemoveModal = ({ @@ -14,7 +15,7 @@ export const WidgetsRemoveModal = ({ id, innerProps, }: ContextModalProps) => { - const { t } = useTranslation([`modules/${innerProps.widgetId}`, 'common']); + const { t } = useTranslation([`modules/${innerProps.widgetType}`, 'common']); const { name: configName } = useConfigContext(); if (!configName) return null; const updateConfig = useConfigStore((x) => x.updateConfig); @@ -35,7 +36,7 @@ export const WidgetsRemoveModal = ({ ]} - values={{ item: innerProps.widgetId }} + values={{ item: innerProps.widgetType }} /> + + + ); +} + +export function EditModeToggle() { + const { editModeEnabled } = useEditModeInformationStore(); + const Icon = editModeEnabled ? IconEdit : IconEditOff; + + return ( + } + onClick={() => + openModal({ + title: 'Toggle edit mode', + centered: true, + size: 'lg', + children: , + }) + } + > + {editModeEnabled ? 'Enable edit mode' : 'Disable edit mode'} + + ); +} diff --git a/src/config/provider.tsx b/src/config/provider.tsx index 3559287d9..3f9a52704 100644 --- a/src/config/provider.tsx +++ b/src/config/provider.tsx @@ -16,8 +16,8 @@ const ConfigContext = createContext({ name: 'unknown', config: undefined, configVersion: undefined, - increaseVersion: () => console.error('Provider not set'), - setConfigName: () => console.error('Provider not set'), + increaseVersion: () => {}, + setConfigName: () => {}, }); export const ConfigProvider = ({ children }: { children: ReactNode }) => { diff --git a/src/config/store.ts b/src/config/store.ts index 7a6971344..bca63e0b7 100644 --- a/src/config/store.ts +++ b/src/config/store.ts @@ -48,6 +48,7 @@ export const useConfigStore = create((set, get) => ({ const previousConfig: ConfigType = JSON.parse(JSON.stringify(currentConfig.value)); const updatedConfig = updateCallback(currentConfig.value); + set((old) => ({ ...old, configs: [ diff --git a/src/constants/constants.ts b/src/constants/constants.ts new file mode 100644 index 000000000..41410816d --- /dev/null +++ b/src/constants/constants.ts @@ -0,0 +1 @@ +export const MIN_WIDTH_MOBILE = 500; diff --git a/src/hooks/icons/useGetDashboardIcons.tsx b/src/hooks/icons/useGetDashboardIcons.tsx index 854322693..707461eec 100644 --- a/src/hooks/icons/useGetDashboardIcons.tsx +++ b/src/hooks/icons/useGetDashboardIcons.tsx @@ -10,5 +10,7 @@ export const useGetDashboardIcons = () => return data as NormalizedIconRepositoryResult[]; }, refetchOnMount: false, + // Cache for infinity, refetch every so often. + cacheTime: Infinity, refetchOnWindowFocus: false, }); diff --git a/src/hooks/useScreenLargerThan.ts b/src/hooks/useScreenLargerThan.ts index 4cb70371c..b499917c5 100644 --- a/src/hooks/useScreenLargerThan.ts +++ b/src/hooks/useScreenLargerThan.ts @@ -4,5 +4,5 @@ import { useMediaQuery } from '@mantine/hooks'; export const useScreenLargerThan = (size: MantineSize | number) => { const { breakpoints } = useMantineTheme(); const pixelCount = typeof size === 'string' ? breakpoints[size] : size; - return useMediaQuery(`(min-width: ${pixelCount}px)`); + return useMediaQuery(`(min-width: ${pixelCount})`); }; diff --git a/src/hooks/widgets/dashDot/api.ts b/src/hooks/widgets/dashDot/api.ts index 34a290475..36c82a55e 100644 --- a/src/hooks/widgets/dashDot/api.ts +++ b/src/hooks/widgets/dashDot/api.ts @@ -11,7 +11,7 @@ import type { } from '../../../pages/api/modules/usenet/history'; import { UsenetInfoRequestParams, UsenetInfoResponse } from '../../../pages/api/modules/usenet'; import { UsenetPauseRequestParams } from '../../../pages/api/modules/usenet/pause'; -import { queryClient } from '../../../tools/queryClient'; +import { queryClient } from '../../../tools/server/configurations/tanstack/queryClient.tool'; import { UsenetResumeRequestParams } from '../../../pages/api/modules/usenet/resume'; const POLLING_INTERVAL = 2000; @@ -29,7 +29,7 @@ export const useGetUsenetInfo = (params: UsenetInfoRequestParams) => refetchInterval: POLLING_INTERVAL, keepPreviousData: true, retry: 2, - enabled: !!params.appId, + enabled: Boolean(params.appId), } ); diff --git a/src/hooks/widgets/download-speed/useGetNetworkSpeed.tsx b/src/hooks/widgets/download-speed/useGetNetworkSpeed.tsx index 965607e1c..2af50a67e 100644 --- a/src/hooks/widgets/download-speed/useGetNetworkSpeed.tsx +++ b/src/hooks/widgets/download-speed/useGetNetworkSpeed.tsx @@ -1,11 +1,12 @@ import { useQuery } from '@tanstack/react-query'; import { NormalizedDownloadQueueResponse } from '../../../types/api/downloads/queue/NormalizedDownloadQueueResponse'; -export const useGetDownloadClientsQueue = () => useQuery({ - queryKey: ['network-speed'], - queryFn: async (): Promise => { - const response = await fetch('/api/modules/downloads'); - return response.json(); - }, - refetchInterval: 3000, -}); +export const useGetDownloadClientsQueue = () => + useQuery({ + queryKey: ['network-speed'], + queryFn: async (): Promise => { + const response = await fetch('/api/modules/downloads'); + return response.json(); + }, + refetchInterval: 3000, + }); diff --git a/src/hooks/widgets/rss/useGetRssFeed.tsx b/src/hooks/widgets/rss/useGetRssFeed.tsx deleted file mode 100644 index 2fc9e07e3..000000000 --- a/src/hooks/widgets/rss/useGetRssFeed.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { useQuery } from '@tanstack/react-query'; - -export const useGetRssFeed = (feedUrl: string) => - useQuery({ - queryKey: ['rss-feed', feedUrl], - queryFn: async () => { - const response = await fetch('/api/modules/rss'); - return response.json(); - }, - }); diff --git a/src/middleware.ts b/src/middleware.ts index 79f85b693..6652e8d41 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -1,8 +1,8 @@ -import { NextFetchEvent, NextRequest, NextResponse } from 'next/server'; +import { NextRequest, NextResponse } from 'next/server'; -// eslint-disable-next-line consistent-return -export function middleware(req: NextRequest, ev: NextFetchEvent) { +export function middleware(req: NextRequest) { const { cookies } = req; + // Don't even bother with the middleware if there is no defined password if (!process.env.PASSWORD) return NextResponse.next(); diff --git a/src/modules/Docker/ContainerActionBar.tsx b/src/modules/Docker/ContainerActionBar.tsx index 3b8943908..fa3aa79fe 100644 --- a/src/modules/Docker/ContainerActionBar.tsx +++ b/src/modules/Docker/ContainerActionBar.tsx @@ -17,8 +17,8 @@ import { useState } from 'react'; import { TFunction } from 'react-i18next'; import { v4 as uuidv4 } from 'uuid'; import { useConfigContext } from '../../config/provider'; -import { tryMatchService } from '../../tools/addToHomarr'; import { openContextModalGeneric } from '../../tools/mantineModalManagerExtensions'; +import { MatchingImages, ServiceType, tryMatchPort } from '../../tools/types'; import { AppType } from '../../types/app'; let t: TFunction<'modules/docker', undefined>; @@ -35,7 +35,7 @@ function sendDockerCommand( title: `${t(`actions.${action}.start`)} ${containerName}`, message: undefined, autoClose: false, - disallowClose: true, + withCloseButton: false, }); axios .get(`/api/docker/container/${containerId}?action=${action}`) @@ -177,7 +177,7 @@ export default function ContainerActionBar({ selected, reload }: ContainerAction }, network: { enabledStatusChecker: true, - okStatus: [200], + statusCodes: ['200'], }, behaviour: { isOpeningNewTab: true, @@ -206,3 +206,36 @@ export default function ContainerActionBar({ selected, reload }: ContainerAction ); } + +/** + * @deprecated legacy code + */ +function tryMatchType(imageName: string): ServiceType { + const match = MatchingImages.find(({ image }) => imageName.includes(image)); + if (match) { + return match.type; + } + // TODO: Remove this legacy code + return 'Other'; +} + +/** + * @deprecated + * @param container the container to match + * @returns a new service + */ +const tryMatchService = (container: Dockerode.ContainerInfo | undefined) => { + if (container === undefined) return {}; + const name = container.Names[0].substring(1); + const type = tryMatchType(container.Image); + const port = tryMatchPort(type.toLowerCase())?.value ?? container.Ports[0]?.PublicPort; + return { + name, + id: container.Id, + type: tryMatchType(container.Image), + url: `localhost${port ? `:${port}` : ''}`, + icon: `https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/${name + .replace(/\s+/g, '-') + .toLowerCase()}.png`, + }; +}; diff --git a/src/modules/Docker/ContainerState.tsx b/src/modules/Docker/ContainerState.tsx index d124f9f44..667f62f61 100644 --- a/src/modules/Docker/ContainerState.tsx +++ b/src/modules/Docker/ContainerState.tsx @@ -1,4 +1,4 @@ -import { Badge, BadgeVariant, MantineSize } from '@mantine/core'; +import { Badge, BadgeProps, MantineSize } from '@mantine/core'; import { useTranslation } from 'next-i18next'; import Dockerode from 'dockerode'; @@ -14,7 +14,7 @@ export default function ContainerState(props: ContainerStateProps) { const options: { size: MantineSize; radius: MantineSize; - variant: BadgeVariant; + variant: BadgeProps['variant']; } = { size: 'md', radius: 'md', diff --git a/src/modules/Docker/DockerModule.tsx b/src/modules/Docker/DockerModule.tsx index 91de2247b..5c80f5a4e 100644 --- a/src/modules/Docker/DockerModule.tsx +++ b/src/modules/Docker/DockerModule.tsx @@ -54,7 +54,7 @@ export default function DockerMenuButton(props: any) { }, 300); } - if (!dockerEnabled) { + if (!dockerEnabled || process.env.DISABLE_EDIT_MODE === 'true') { return null; } @@ -66,10 +66,13 @@ export default function DockerMenuButton(props: any) { onClose={() => setOpened(false)} padding="xl" position="right" - size="full" + size="100%" title={} + transitionProps={{ + transition: 'pop', + }} styles={{ - drawer: { + content: { display: 'flex', flexDirection: 'column', }, diff --git a/src/modules/Docker/DockerTable.tsx b/src/modules/Docker/DockerTable.tsx index b2ba3c3c2..9ab7ff49b 100644 --- a/src/modules/Docker/DockerTable.tsx +++ b/src/modules/Docker/DockerTable.tsx @@ -1,19 +1,19 @@ import { - Table, - Checkbox, - Group, Badge, + Checkbox, createStyles, + Group, ScrollArea, - TextInput, - useMantineTheme, + Table, Text, + TextInput, } from '@mantine/core'; import { useElementSize } from '@mantine/hooks'; import { IconSearch } from '@tabler/icons'; import Dockerode from 'dockerode'; import { useTranslation } from 'next-i18next'; import { useEffect, useState } from 'react'; +import { MIN_WIDTH_MOBILE } from '../../constants/constants'; import ContainerState from './ContainerState'; const useStyles = createStyles((theme) => ({ @@ -34,7 +34,6 @@ export default function DockerTable({ containers: Dockerode.ContainerInfo[]; selection: Dockerode.ContainerInfo[]; }) { - const MIN_WIDTH_MOBILE = useMantineTheme().breakpoints.xs; const [usedContainers, setContainers] = useState(containers); const { classes, cx } = useStyles(); const [search, setSearch] = useState(''); diff --git a/src/modules/common/MediaDisplay.tsx b/src/modules/common/MediaDisplay.tsx index 453a262e3..10811f78a 100644 --- a/src/modules/common/MediaDisplay.tsx +++ b/src/modules/common/MediaDisplay.tsx @@ -153,7 +153,7 @@ export function RadarrMediaDisplay(props: any) { export function SonarrMediaDisplay(props: any) { const { media }: { media: any } = props; const { config } = useConfigContext(); - const calendar = config?.widgets.find((w) => w.id === 'calendar'); + const calendar = config?.widgets.find((w) => w.type === 'calendar'); const useSonarrv4 = calendar?.properties.useSonarrv4 ?? false; // Find a poster CoverType diff --git a/src/modules/overseerr/RequestModal.tsx b/src/modules/overseerr/RequestModal.tsx index 93e6e4920..c58bc4174 100644 --- a/src/modules/overseerr/RequestModal.tsx +++ b/src/modules/overseerr/RequestModal.tsx @@ -221,7 +221,7 @@ function askForMedia(type: MediaType, id: number, name: string, seasons?: number color: 'orange', loading: true, autoClose: false, - disallowClose: true, + withCloseButton: false, icon: , }); axios diff --git a/src/pages/404.tsx b/src/pages/404.tsx index aadf66175..0f49c2aa5 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -9,8 +9,9 @@ import { } from '@mantine/core'; import React from 'react'; -import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; +import { GetServerSidePropsContext } from 'next'; import Link from 'next/link'; +import { getServerSideTranslations } from '../tools/server/getServerSideTranslations'; const useStyles = createStyles((theme) => ({ root: { @@ -56,7 +57,7 @@ const useStyles = createStyles((theme) => ({ maxWidth: 540, margin: 'auto', marginTop: theme.spacing.xl, - marginBottom: theme.spacing.xl * 1.5, + marginBottom: `calc(${theme.spacing.xl} * 1.5)`, }, })); @@ -94,12 +95,11 @@ export default function Custom404() { ); } - -export async function getStaticProps({ locale }: { locale: string }) { +export async function getStaticProps({ req, res, locale }: GetServerSidePropsContext) { + const translations = await getServerSideTranslations(['common'], locale, undefined, undefined); return { props: { - ...(await serverSideTranslations(locale, ['common'])), - // Will be passed to the page component as props + ...translations, }, }; } diff --git a/src/pages/[slug].tsx b/src/pages/[slug].tsx index c3ac1b272..9ce096887 100644 --- a/src/pages/[slug].tsx +++ b/src/pages/[slug].tsx @@ -23,7 +23,7 @@ export async function getServerSideProps({ const configPath = path.join(process.cwd(), 'data/configs', `${configName}.json`); const configExists = fs.existsSync(configPath); - const translations = await getServerSideTranslations(req, res, dashboardNamespaces, locale); + const translations = await getServerSideTranslations(dashboardNamespaces, locale, req, res); if (!configExists) { // Redirect to 404 diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index e55dd6bef..36862b5ea 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -2,8 +2,6 @@ import { ColorScheme, ColorSchemeProvider, MantineProvider, MantineTheme } from import { useColorScheme, useHotkeys, useLocalStorage } from '@mantine/hooks'; import { ModalsProvider } from '@mantine/modals'; import Consola from 'consola'; -import { NotificationsProvider } from '@mantine/notifications'; -import { QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { getCookie } from 'cookies-next'; import { GetServerSidePropsContext } from 'next'; @@ -11,7 +9,11 @@ import { appWithTranslation } from 'next-i18next'; import { AppProps } from 'next/app'; import Head from 'next/head'; import { useEffect, useState } from 'react'; +import { Notifications } from '@mantine/notifications'; import 'video.js/dist/video-js.css'; +import AsyncStorage from '@react-native-async-storage/async-storage'; +import { PersistQueryClientProvider } from '@tanstack/react-query-persist-client'; +import { createAsyncStoragePersister } from '@tanstack/query-async-storage-persister'; import { ChangeAppPositionModal } from '../components/Dashboard/Modals/ChangePosition/ChangeAppPositionModal'; import { ChangeWidgetPositionModal } from '../components/Dashboard/Modals/ChangePosition/ChangeWidgetPositionModal'; import { EditAppModal } from '../components/Dashboard/Modals/EditAppModal/EditAppModal'; @@ -22,12 +24,12 @@ import { CategoryEditModal } from '../components/Dashboard/Wrappers/Category/Cat import { ConfigProvider } from '../config/provider'; import { usePackageAttributesStore } from '../tools/client/zustands/usePackageAttributesStore'; import { ColorTheme } from '../tools/color'; -import { queryClient } from '../tools/queryClient'; +import { queryClient } from '../tools/server/configurations/tanstack/queryClient.tool'; import { getServiceSidePackageAttributes, ServerSidePackageAttributesType, } from '../tools/server/getPackageVersion'; -import { theme } from '../tools/theme'; +import { theme } from '../tools/server/theme/theme'; import { useEditModeInformationStore } from '../hooks/useEditModeInformation'; import '../styles/global.scss'; @@ -38,6 +40,7 @@ function App( colorScheme: ColorScheme; packageAttributes: ServerSidePackageAttributesType; editModeEnabled: boolean; + defaultColorScheme: ColorScheme; } ) { const { Component, pageProps } = props; @@ -55,7 +58,7 @@ function App( // hook will return either 'dark' or 'light' on client // and always 'light' during ssr as window.matchMedia is not available - const preferredColorScheme = useColorScheme(); + const preferredColorScheme = useColorScheme(props.defaultColorScheme); const [colorScheme, setColorScheme] = useLocalStorage({ key: 'mantine-color-scheme', defaultValue: preferredColorScheme, @@ -76,6 +79,10 @@ function App( const toggleColorScheme = (value?: ColorScheme) => setColorScheme(value || (colorScheme === 'dark' ? 'light' : 'dark')); + const asyncStoragePersister = createAsyncStoragePersister({ + storage: AsyncStorage, + }); + useHotkeys([['mod+J', () => toggleColorScheme()]]); return ( @@ -83,7 +90,10 @@ function App( - + - - - - - + + + + - + ); } @@ -144,10 +153,18 @@ App.getInitialProps = ({ ctx }: { ctx: GetServerSidePropsContext }) => { 'EXPERIMENTAL: You have disabled the edit mode. Modifications are no longer possible and any requests on the API will be dropped. If you want to disable this, unset the DISABLE_EDIT_MODE environment variable. This behaviour may be removed in future versions of Homarr' ); } + + if (process.env.DEFAULT_COLOR_SCHEME !== undefined) { + Consola.debug(`Overriding the default color scheme with ${process.env.DEFAULT_COLOR_SCHEME}`); + } + + const colorScheme: ColorScheme = (process.env.DEFAULT_COLOR_SCHEME as ColorScheme) ?? 'light'; + return { colorScheme: getCookie('color-scheme', ctx) || 'light', packageAttributes: getServiceSidePackageAttributes(), editModeEnabled: !disableEditMode, + defaultColorScheme: colorScheme, }; }; diff --git a/src/pages/api/configs/tryPassword.tsx b/src/pages/api/configs/tryPassword.tsx index 381845abf..1632985ab 100644 --- a/src/pages/api/configs/tryPassword.tsx +++ b/src/pages/api/configs/tryPassword.tsx @@ -2,26 +2,31 @@ import Consola from 'consola'; import { NextApiRequest, NextApiResponse } from 'next'; function Post(req: NextApiRequest, res: NextApiResponse) { - const { tried } = req.body; - // Try to match the password with the PASSWORD env variable - if (tried === process.env.PASSWORD) { + const { tried, type = 'password' } = req.body; + // If the type of password is "edit", we run this branch to check the edit password + if (type === 'edit') { + if (tried === process.env.EDIT_MODE_PASSWORD) { + process.env.DISABLE_EDIT_MODE = process.env.DISABLE_EDIT_MODE === 'true' ? 'false' : 'true'; + return res.status(200).json({ + success: true, + }); + } + } else if (tried === process.env.PASSWORD) { return res.status(200).json({ success: true, }); } - // Warn that there was a wrong password attempt (date : wrong password, person's IP) Consola.warn( `${new Date().toLocaleString()} : Wrong password attempt, from ${ req.headers['x-forwarded-for'] }` ); - return res.status(200).json({ + return res.status(401).json({ success: false, }); } export default async (req: NextApiRequest, res: NextApiResponse) => { - // Filter out if the request is a POST or a GET if (req.method === 'POST') { return Post(req, res); } diff --git a/src/pages/api/docker/DockerSingleton.ts b/src/pages/api/docker/DockerSingleton.ts index 804444274..9694059be 100644 --- a/src/pages/api/docker/DockerSingleton.ts +++ b/src/pages/api/docker/DockerSingleton.ts @@ -9,7 +9,12 @@ export default class DockerSingleton extends Docker { public static getInstance(): DockerSingleton { if (!DockerSingleton.dockerInstance) { - DockerSingleton.dockerInstance = new DockerSingleton(); + DockerSingleton.dockerInstance = new Docker({ + // If env variable DOCKER_HOST is not set, it will use the default socket + ...(process.env.DOCKER_HOST && { host: process.env.DOCKER_HOST }), + // Same thing for docker port + ...(process.env.DOCKER_PORT && { port: process.env.DOCKER_PORT }), + }); } return DockerSingleton.dockerInstance; } diff --git a/src/pages/api/icons/index.ts b/src/pages/api/icons/index.ts index 7b1c6a4f9..9649f9cbe 100644 --- a/src/pages/api/icons/index.ts +++ b/src/pages/api/icons/index.ts @@ -6,10 +6,26 @@ import { UnpkgIconsRepository } from '../../../tools/server/images/unpkg-icons-r const Get = async (request: NextApiRequest, response: NextApiResponse) => { const respositories = [ new LocalIconsRepository(), - new JsdelivrIconsRepository(JsdelivrIconsRepository.tablerRepository, 'Walkxcode Dashboard Icons', 'Walkxcode on Github'), - new UnpkgIconsRepository(UnpkgIconsRepository.tablerRepository, 'Tabler Icons', 'Tabler Icons - GitHub (MIT)'), - new JsdelivrIconsRepository(JsdelivrIconsRepository.papirusRepository, 'Papirus Icons', 'Papirus Development Team on GitHub (Apache 2.0)'), - new JsdelivrIconsRepository(JsdelivrIconsRepository.homelabSvgAssetsRepository, 'Homelab Svg Assets', 'loganmarchione on GitHub (MIT)'), + new JsdelivrIconsRepository( + JsdelivrIconsRepository.tablerRepository, + 'Walkxcode Dashboard Icons', + 'Walkxcode on Github' + ), + new UnpkgIconsRepository( + UnpkgIconsRepository.tablerRepository, + 'Tabler Icons', + 'Tabler Icons - GitHub (MIT)' + ), + new JsdelivrIconsRepository( + JsdelivrIconsRepository.papirusRepository, + 'Papirus Icons', + 'Papirus Development Team on GitHub (Apache 2.0)' + ), + new JsdelivrIconsRepository( + JsdelivrIconsRepository.homelabSvgAssetsRepository, + 'Homelab Svg Assets', + 'loganmarchione on GitHub (MIT)' + ), ]; const fetches = respositories.map((rep) => rep.fetch()); const data = await Promise.all(fetches); diff --git a/src/pages/api/modules/calendar.ts b/src/pages/api/modules/calendar.ts index ab3694eda..668d667a9 100644 --- a/src/pages/api/modules/calendar.ts +++ b/src/pages/api/modules/calendar.ts @@ -4,6 +4,7 @@ import Consola from 'consola'; import { NextApiRequest, NextApiResponse } from 'next'; +import { z } from 'zod'; import { AppIntegrationType } from '../../../types/app'; import { getConfig } from '../../../tools/config/getConfig'; @@ -18,28 +19,36 @@ export default async (req: NextApiRequest, res: NextApiResponse) => { }); }; +const getQuerySchema = z.object({ + month: z + .string() + .regex(/^\d+$/) + .transform((x) => parseInt(x, 10)), + year: z + .string() + .regex(/^\d+$/) + .transform((x) => parseInt(x, 10)), + widgetId: z.string().uuid(), + configName: z.string(), +}); + async function Get(req: NextApiRequest, res: NextApiResponse) { - // Parse req.body as a AppItem - const { - month: monthString, - year: yearString, - configName, - } = req.query as { month: string; year: string; configName: string }; + const parseResult = getQuerySchema.safeParse(req.query); - const month = parseInt(monthString, 10); - const year = parseInt(yearString, 10); - - if (Number.isNaN(month) || Number.isNaN(year) || !configName) { + if (!parseResult.success) { return res.status(400).json({ statusCode: 400, - message: 'Missing required parameter in url: year, month or configName', + message: 'Invalid query parameters, please specify the widgetId, month, year and configName', }); } + // Parse req.body as a AppItem + const { month, year, widgetId, configName } = parseResult.data; + const config = getConfig(configName); // Find the calendar widget in the config - const calendar = config.widgets.find((w) => w.id === 'calendar'); + const calendar = config.widgets.find((w) => w.type === 'calendar' && w.id === widgetId); const useSonarrv4 = calendar?.properties.useSonarrv4 ?? false; const mediaAppIntegrationTypes: AppIntegrationType['type'][] = [ @@ -53,7 +62,7 @@ async function Get(req: NextApiRequest, res: NextApiResponse) { ); const IntegrationTypeEndpointMap = new Map([ - ['sonarr', useSonarrv4 ? '/api/v3/calendar' : '/api/calendar'], + ['sonarr', useSonarrv4 ? '/api/v3/calendar' : '/api/calendar'], ['radarr', '/api/v3/calendar'], ['lidarr', '/api/v1/calendar'], ['readarr', '/api/v1/calendar'], diff --git a/src/pages/api/modules/dashdot/info.ts b/src/pages/api/modules/dashdot/info.ts index 2a188d9b8..1f7b178a0 100644 --- a/src/pages/api/modules/dashdot/info.ts +++ b/src/pages/api/modules/dashdot/info.ts @@ -1,20 +1,29 @@ import axios from 'axios'; import { NextApiRequest, NextApiResponse } from 'next'; +import { z } from 'zod'; import { getConfig } from '../../../../tools/config/getConfig'; import { IDashDotTile } from '../../../../widgets/dashDot/DashDotTile'; -async function Get(req: NextApiRequest, res: NextApiResponse) { - const { configName } = req.query; +const getQuerySchema = z.object({ + configName: z.string(), + widgetId: z.string().uuid(), +}); - if (!configName || typeof configName !== 'string') { +async function Get(req: NextApiRequest, res: NextApiResponse) { + const parseResult = getQuerySchema.safeParse(req.query); + + if (!parseResult.success) { return res.status(400).json({ - message: 'Missing required configName in url', + statusCode: 400, + message: 'Invalid query parameters, please specify the widgetId and configName', }); } + const { configName, widgetId } = parseResult.data; + const config = getConfig(configName); - const dashDotWidget = config.widgets.find((x) => x.id === 'dashdot'); + const dashDotWidget = config.widgets.find((x) => x.type === 'dashdot' && x.id === widgetId); if (!dashDotWidget) { return res.status(400).json({ diff --git a/src/pages/api/modules/dashdot/storage.ts b/src/pages/api/modules/dashdot/storage.ts index 8f15a8fa8..30b188c30 100644 --- a/src/pages/api/modules/dashdot/storage.ts +++ b/src/pages/api/modules/dashdot/storage.ts @@ -1,19 +1,28 @@ import axios from 'axios'; import { NextApiRequest, NextApiResponse } from 'next'; +import { z } from 'zod'; import { getConfig } from '../../../../tools/config/getConfig'; import { IDashDotTile } from '../../../../widgets/dashDot/DashDotTile'; -async function Get(req: NextApiRequest, res: NextApiResponse) { - const { configName } = req.query; +const getQuerySchema = z.object({ + configName: z.string(), + widgetId: z.string().uuid(), +}); - if (!configName || typeof configName !== 'string') { +async function Get(req: NextApiRequest, res: NextApiResponse) { + const parseResult = getQuerySchema.safeParse(req.query); + + if (!parseResult.success) { return res.status(400).json({ - message: 'Missing required configName in url', + statusCode: 400, + message: 'Invalid query parameters, please specify the widgetId and configName', }); } + const { configName, widgetId } = parseResult.data; + const config = getConfig(configName); - const dashDotWidget = config.widgets.find((x) => x.id === 'dashdot'); + const dashDotWidget = config.widgets.find((x) => x.type === 'dashdot' && x.id === widgetId); if (!dashDotWidget) { return res.status(400).json({ diff --git a/src/pages/api/modules/downloads/index.ts b/src/pages/api/modules/downloads/index.ts index d7d5dc086..6d80db458 100644 --- a/src/pages/api/modules/downloads/index.ts +++ b/src/pages/api/modules/downloads/index.ts @@ -61,7 +61,9 @@ const Get = async (request: NextApiRequest, response: NextApiResponse) => { const responseBody = { apps: data, failedApps: failedClients } as NormalizedDownloadQueueResponse; if (failedClients.length > 0) { - Consola.warn(`${failedClients.length} download clients failed. Please check your configuration and the above log`); + Consola.warn( + `${failedClients.length} download clients failed. Please check your configuration and the above log` + ); } return response.status(200).json(responseBody); diff --git a/src/pages/api/modules/media-requests/index.spec.ts b/src/pages/api/modules/media-requests/index.spec.ts new file mode 100644 index 000000000..69a6460a1 --- /dev/null +++ b/src/pages/api/modules/media-requests/index.spec.ts @@ -0,0 +1,292 @@ +import Consola from 'consola'; +import { createMocks } from 'node-mocks-http'; +import { describe, expect, it, vi } from 'vitest'; +import 'vitest-fetch-mock'; +import { ConfigType } from '../../../../types/config'; +import MediaRequestsRoute from './index'; + +const mockedGetConfig = vi.fn(); + +describe('media-requests api', () => { + it('reduce when empty list of requests', async () => { + // Arrange + const { req, res } = createMocks(); + + vi.mock('./../../../../tools/config/getConfig.ts', () => ({ + get getConfig() { + return mockedGetConfig; + }, + })); + mockedGetConfig.mockReturnValue({ + apps: [], + }); + + // Act + await MediaRequestsRoute(req, res); + + // Assert + expect(res._getStatusCode()).toBe(200); + expect(res.finished).toBe(true); + expect(JSON.parse(res._getData())).toEqual([]); + }); + + it('log error when fetch was not successful', async () => { + // Arrange + const { req, res } = createMocks(); + + vi.mock('./../../../../tools/config/getConfig.ts', () => ({ + get getConfig() { + return mockedGetConfig; + }, + })); + mockedGetConfig.mockReturnValue({ + apps: [ + { + integration: { + type: 'overseerr', + properties: [ + { + field: 'apiKey', + type: 'private', + value: 'abc', + }, + ], + }, + }, + ], + } as ConfigType); + const logSpy = vi.spyOn(Consola, 'error'); + + // Act + await MediaRequestsRoute(req, res); + + // Assert + expect(res._getStatusCode()).toBe(200); + expect(res.finished).toBe(true); + expect(JSON.parse(res._getData())).toEqual([]); + + expect(logSpy).toHaveBeenCalledOnce(); + expect(logSpy.mock.lastCall).toEqual([ + 'Failed to request data from Overseerr: FetchError: invalid json response body at reason: Unexpected end of JSON input', + ]); + + logSpy.mockRestore(); + }); + + it('fetch and return requests in response', async () => { + // Arrange + const { req, res } = createMocks({ + method: 'GET', + }); + + vi.mock('./../../../../tools/config/getConfig.ts', () => ({ + get getConfig() { + return mockedGetConfig; + }, + })); + mockedGetConfig.mockReturnValue({ + apps: [ + { + url: 'http://my-overseerr.local', + integration: { + type: 'overseerr', + properties: [ + { + field: 'apiKey', + type: 'private', + value: 'abc', + }, + ], + }, + }, + ], + } as ConfigType); + const logSpy = vi.spyOn(Consola, 'error'); + + fetchMock.mockResponse((request) => { + if (request.url === 'http://my-overseerr.local/api/v1/request?take=25&skip=0&sort=added') { + return JSON.stringify({ + pageInfo: { pages: 3, pageSize: 20, results: 42, page: 1 }, + results: [ + { + id: 44, + status: 2, + createdAt: '2023-04-06T19:38:45.000Z', + updatedAt: '2023-04-06T19:38:45.000Z', + type: 'movie', + is4k: false, + serverId: 0, + profileId: 4, + tags: [], + isAutoRequest: false, + media: { + downloadStatus: [], + downloadStatus4k: [], + id: 999, + mediaType: 'movie', + tmdbId: 99999999, + tvdbId: null, + imdbId: null, + status: 5, + status4k: 1, + createdAt: '2023-02-06T19:38:45.000Z', + updatedAt: '2023-02-06T20:00:04.000Z', + lastSeasonChange: '2023-08-06T19:38:45.000Z', + mediaAddedAt: '2023-05-14T06:30:34.000Z', + serviceId: 0, + serviceId4k: null, + externalServiceId: 32, + externalServiceId4k: null, + externalServiceSlug: '000000000000', + externalServiceSlug4k: null, + ratingKey: null, + ratingKey4k: null, + jellyfinMediaId: '0000', + jellyfinMediaId4k: null, + mediaUrl: + 'http://your-jellyfin.local/web/index.html#!/details?id=mn8q2j4gq038g&context=home&serverId=jf83fj34gm340g', + serviceUrl: 'http://your-jellyfin.local/movie/0000', + }, + seasons: [], + modifiedBy: { + permissions: 2, + warnings: [], + id: 1, + email: 'example-user@homarr.dev', + plexUsername: null, + jellyfinUsername: 'example-user', + username: null, + recoveryLinkExpirationDate: null, + userType: 3, + plexId: null, + jellyfinUserId: '00000000000000000', + jellyfinDeviceId: '111111111111111111', + jellyfinAuthToken: '2222222222222222222', + plexToken: null, + avatar: '/os_logo_square.png', + movieQuotaLimit: null, + movieQuotaDays: null, + tvQuotaLimit: null, + tvQuotaDays: null, + createdAt: '2022-07-03T19:53:08.000Z', + updatedAt: '2022-07-03T19:53:08.000Z', + requestCount: 34, + displayName: 'Example User', + }, + requestedBy: { + permissions: 2, + warnings: [], + id: 1, + email: 'example-user@homarr.dev', + plexUsername: null, + jellyfinUsername: 'example-user', + username: null, + recoveryLinkExpirationDate: null, + userType: 3, + plexId: null, + jellyfinUserId: '00000000000000000', + jellyfinDeviceId: '111111111111111111', + jellyfinAuthToken: '2222222222222222222', + plexToken: null, + avatar: '/os_logo_square.png', + movieQuotaLimit: null, + movieQuotaDays: null, + tvQuotaLimit: null, + tvQuotaDays: null, + createdAt: '2022-07-03T19:53:08.000Z', + updatedAt: '2022-07-03T19:53:08.000Z', + requestCount: 34, + displayName: 'Example User', + }, + seasonCount: 0, + }, + ], + }); + } + + if (request.url === 'http://my-overseerr.local/api/v1/movie/99999999') { + return JSON.stringify({ + id: 0, + adult: false, + budget: 0, + genres: [ + { + id: 18, + name: 'Dashboards', + }, + ], + relatedVideos: [], + originalLanguage: 'jp', + originalTitle: 'Homarrrr Movie', + popularity: 9.352, + productionCompanies: [], + productionCountries: [], + releaseDate: '2023-12-08', + releases: { + results: [], + }, + revenue: 0, + spokenLanguages: [ + { + english_name: 'Japanese', + iso_639_1: 'jp', + name: '日本語', + }, + ], + status: 'Released', + title: 'Homarr Movie', + video: false, + voteAverage: 9.999, + voteCount: 0, + backdropPath: '/mhjq8jr0qgrjnghnh.jpg', + homepage: '', + imdbId: 'tt0000000', + overview: 'A very cool movie', + posterPath: '/hf4j0928gq543njgh8935nqh8.jpg', + runtime: 97, + tagline: '', + credits: {}, + collection: null, + externalIds: { + facebookId: null, + imdbId: null, + instagramId: null, + twitterId: null, + }, + watchProviders: [], + keywords: [], + }); + } + + return Promise.reject(new Error(`Bad url: ${request.url}`)); + }); + + // Act + await MediaRequestsRoute(req, res); + + // Assert + expect(res._getStatusCode()).toBe(200); + expect(res.finished).toBe(true); + expect(JSON.parse(res._getData())).toEqual([ + { + airDate: '2023-12-08', + backdropPath: 'https://image.tmdb.org/t/p/original//mhjq8jr0qgrjnghnh.jpg', + createdAt: '2023-04-06T19:38:45.000Z', + href: 'http://my-overseerr.local/movie/99999999', + id: 44, + name: 'Homarrrr Movie', + posterPath: + 'https://image.tmdb.org/t/p/w600_and_h900_bestv2//hf4j0928gq543njgh8935nqh8.jpg', + status: 2, + type: 'movie', + userLink: 'http://my-overseerr.local/users/1', + userName: 'Example User', + userProfilePicture: 'http://my-overseerr.local//os_logo_square.png', + }, + ]); + + expect(logSpy).not.toHaveBeenCalled(); + + logSpy.mockRestore(); + }); +}); diff --git a/src/pages/api/modules/media-requests/index.ts b/src/pages/api/modules/media-requests/index.ts new file mode 100644 index 000000000..bbe9f0ef2 --- /dev/null +++ b/src/pages/api/modules/media-requests/index.ts @@ -0,0 +1,165 @@ +import { getCookie } from 'cookies-next'; +import Consola from 'consola'; +import { NextApiRequest, NextApiResponse } from 'next'; +import { getConfig } from '../../../../tools/config/getConfig'; + +import { MediaRequest } from '../../../../widgets/media-requests/media-request-types'; +import { ConfigAppType } from '../../../../types/app'; + +const Get = async (request: NextApiRequest, response: NextApiResponse) => { + const configName = getCookie('config-name', { req: request }); + const config = getConfig(configName?.toString() ?? 'default'); + + const apps = config.apps.filter((app) => + ['overseerr', 'jellyseerr'].includes(app.integration?.type ?? '') + ); + + Consola.log(`Retrieving media requests from ${apps.length} apps`); + + const promises = apps.map((app): Promise => { + const apiKey = app.integration?.properties.find((prop) => prop.field === 'apiKey')?.value ?? ''; + const headers: HeadersInit = { 'X-Api-Key': apiKey }; + return fetch(`${app.url}/api/v1/request?take=25&skip=0&sort=added`, { + headers, + }) + .then(async (response) => { + const body = (await response.json()) as OverseerrResponse; + + const requests = await Promise.all( + body.results.map(async (item): Promise => { + const genericItem = await retrieveDetailsForItem( + app.url, + item.type, + headers, + item.media.tmdbId + ); + return { + appId: app.id, + createdAt: item.createdAt, + id: item.id, + rootFolder: item.rootFolder, + type: item.type, + name: genericItem.name, + userName: item.requestedBy.displayName, + userProfilePicture: constructAvatarUrl(app, item), + userLink: `${app.url}/users/${item.requestedBy.id}`, + airDate: genericItem.airDate, + status: item.status, + backdropPath: `https://image.tmdb.org/t/p/original/${genericItem.backdropPath}`, + posterPath: `https://image.tmdb.org/t/p/w600_and_h900_bestv2/${genericItem.posterPath}`, + href: `${app.url}/movie/${item.media.tmdbId}`, + }; + }) + ); + + return Promise.resolve(requests); + }) + .catch((err) => { + Consola.error(`Failed to request data from Overseerr: ${err}`); + return Promise.resolve([]); + }); + }); + + const mediaRequests = (await Promise.all(promises)).reduce((prev, cur) => prev.concat(cur), []); + + return response.status(200).json(mediaRequests); +}; + +const constructAvatarUrl = (app: ConfigAppType, item: OverseerrResponseItem) => { + const isAbsolute = + item.requestedBy.avatar.startsWith('http://') || item.requestedBy.avatar.startsWith('https://'); + + if (isAbsolute) { + return item.requestedBy.avatar; + } + + return `${app.url}/${item.requestedBy.avatar}`; +}; + +const retrieveDetailsForItem = async ( + baseUrl: string, + type: OverseerrResponseItem['type'], + headers: HeadersInit, + id: number +): Promise => { + if (type === 'tv') { + const tvResponse = await fetch(`${baseUrl}/api/v1/tv/${id}`, { + headers, + }); + + const series = (await tvResponse.json()) as OverseerrSeries; + + return { + name: series.name, + airDate: series.firstAirDate, + backdropPath: series.backdropPath, + posterPath: series.backdropPath, + }; + } + + const movieResponse = await fetch(`${baseUrl}/api/v1/movie/${id}`, { + headers, + }); + + const movie = (await movieResponse.json()) as OverseerrMovie; + + return { + name: movie.originalTitle, + airDate: movie.releaseDate, + backdropPath: movie.backdropPath, + posterPath: movie.posterPath, + }; +}; + +type GenericOverseerrItem = { + name: string; + airDate: string; + backdropPath: string; + posterPath: string; +}; + +type OverseerrMovie = { + originalTitle: string; + releaseDate: string; + backdropPath: string; + posterPath: string; +}; + +type OverseerrSeries = { + name: string; + firstAirDate: string; + backdropPath: string; + posterPath: string; +}; + +type OverseerrResponse = { + results: OverseerrResponseItem[]; +}; + +type OverseerrResponseItem = { + id: number; + status: number; + createdAt: string; + type: 'movie' | 'tv'; + rootFolder: string; + requestedBy: OverseerrResponseItemUser; + media: OverseerrResponseItemMedia; +}; + +type OverseerrResponseItemMedia = { + tmdbId: number; +}; + +type OverseerrResponseItemUser = { + id: number; + displayName: string; + avatar: string; +}; + +export default async (request: NextApiRequest, response: NextApiResponse) => { + if (request.method === 'GET') { + return Get(request, response); + } + + return response.status(405); +}; diff --git a/src/pages/api/modules/media-server/index.ts b/src/pages/api/modules/media-server/index.ts index 09430878d..9085c02bc 100644 --- a/src/pages/api/modules/media-server/index.ts +++ b/src/pages/api/modules/media-server/index.ts @@ -110,8 +110,9 @@ const handleServer = async (app: ConfigAppType): Promise = new Parser({ }, }); +const getQuerySchema = z.object({ + widgetId: z.string().uuid(), + feedUrl: z.string(), +}); + export const Get = async (request: NextApiRequest, response: NextApiResponse) => { const configName = getCookie('config-name', { req: request }); const config = getConfig(configName?.toString() ?? 'default'); - const rssWidget = config.widgets.find((x) => x.id === 'rss') as IRssWidget | undefined; + const parseResult = getQuerySchema.safeParse(request.query); + if (!parseResult.success) { + response.status(400).json({ message: 'invalid query parameters, please specify the widgetId' }); + return; + } + + const rssWidget = config.widgets.find( + (x) => x.type === 'rss' && x.id === parseResult.data.widgetId + ) as IRssWidget | undefined; if ( !rssWidget || !rssWidget.properties.rssFeedUrl || @@ -40,9 +50,9 @@ export const Get = async (request: NextApiRequest, response: NextApiResponse) => return; } - Consola.info('Requesting RSS feed...'); + Consola.info(`Requesting RSS feed at url ${parseResult.data.feedUrl}`); const stopWatch = new Stopwatch(); - const feed = await parser.parseURL(rssWidget.properties.rssFeedUrl); + const feed = await parser.parseURL(parseResult.data.feedUrl); Consola.info(`Retrieved RSS feed after ${stopWatch.getEllapsedMilliseconds()} milliseconds`); const orderedFeed = { @@ -53,6 +63,7 @@ export const Get = async (request: NextApiRequest, response: NextApiResponse) => title: item.title ? decode(item.title) : undefined, content: decode(item.content), enclosure: createEnclosure(item), + link: createLink(item), })) .sort((a: { pubDate: number }, b: { pubDate: number }) => { if (!a.pubDate || !b.pubDate) { @@ -70,6 +81,14 @@ export const Get = async (request: NextApiRequest, response: NextApiResponse) => }); }; +const createLink = (item: any) => { + if (item.link) { + return item.link; + } + + return item.guid; +}; + const createEnclosure = (item: any) => { if (item.enclosure) { return item.enclosure; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 5b1f60d8a..7ff04c4cb 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -46,7 +46,7 @@ export async function getServerSideProps({ configName = 'default'; } - const translations = await getServerSideTranslations(req, res, dashboardNamespaces, locale); + const translations = await getServerSideTranslations(dashboardNamespaces, locale, req, res); const config = getFrontendConfig(configName as string); return { diff --git a/src/pages/login.tsx b/src/pages/login.tsx index bf414ed83..193a558ab 100644 --- a/src/pages/login.tsx +++ b/src/pages/login.tsx @@ -62,7 +62,7 @@ export default function AuthenticationTitle() { title: t('notifications.checking.title'), message: t('notifications.checking.message'), autoClose: false, - disallowClose: true, + withCloseButton: false, }); axios .post('/api/configs/tryPassword', { diff --git a/src/pages/migrate.tsx b/src/pages/migrate.tsx index 428e7e564..ee73caa7f 100644 --- a/src/pages/migrate.tsx +++ b/src/pages/migrate.tsx @@ -56,7 +56,7 @@ const useStyles = createStyles((theme) => ({ fontWeight: 900, fontSize: 110, lineHeight: 1, - marginBottom: theme.spacing.xl * 1.5, + marginBottom: `calc(${theme.spacing.xl} * 1.5)`, [theme.fn.smallerThan('sm')]: { fontSize: 60, @@ -90,7 +90,7 @@ const useStyles = createStyles((theme) => ({ maxWidth: 700, margin: 'auto', marginTop: theme.spacing.xl, - marginBottom: theme.spacing.xl * 1.5, + marginBottom: `calc(${theme.spacing.xl} * 1.5)`, }, })); diff --git a/src/tools/addToHomarr.ts b/src/tools/addToHomarr.ts deleted file mode 100644 index ea79d93c7..000000000 --- a/src/tools/addToHomarr.ts +++ /dev/null @@ -1,29 +0,0 @@ -import Dockerode from 'dockerode'; - -import { MatchingImages, ServiceType, tryMatchPort } from './types'; - -function tryMatchType(imageName: string): ServiceType { - // Try to find imageName inside MatchingImages - - const match = MatchingImages.find(({ image }) => imageName.includes(image)); - if (match) { - return match.type; - } - return 'Other'; -} - -export function tryMatchService(container: Dockerode.ContainerInfo | undefined) { - if (container === undefined) return {}; - const name = container.Names[0].substring(1); - const type = tryMatchType(container.Image); - const port = tryMatchPort(type.toLowerCase())?.value ?? container.Ports[0]?.PublicPort; - return { - name, - id: container.Id, - type: tryMatchType(container.Image), - url: `localhost${port ? `:${port}` : ''}`, - icon: `https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons/png/${name - .replace(/\s+/g, '-') - .toLowerCase()}.png`, - }; -} diff --git a/src/tools/config/getConfig.ts b/src/tools/config/getConfig.ts index c17ee3881..0ab1ea62a 100644 --- a/src/tools/config/getConfig.ts +++ b/src/tools/config/getConfig.ts @@ -1,9 +1,13 @@ import Consola from 'consola'; +import { v4 as uuidv4 } from 'uuid'; import { BackendConfigType, ConfigType } from '../../types/config'; import { backendMigrateConfig } from './backendMigrateConfig'; import { configExists } from './configExists'; import { getFallbackConfig } from './getFallbackConfig'; import { readConfig } from './readConfig'; +import { writeConfig } from './writeConfig'; + +const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/; export const getConfig = (name: string): BackendConfigType => { if (!configExists(name)) return getFallbackConfig() as unknown as ConfigType; @@ -12,9 +16,29 @@ export const getConfig = (name: string): BackendConfigType => { // to the new format. const config = readConfig(name); if (config.schemaVersion === undefined) { - Consola.log('Migrating config file...', config); + Consola.log('Migrating config file...', config.name); return backendMigrateConfig(config, name); } - return config; + let backendConfig = config as BackendConfigType; + + if (backendConfig.widgets.some((widget) => !uuidRegex.test(widget.id))) { + backendConfig = { + ...backendConfig, + widgets: backendConfig.widgets.map((widget) => ({ + ...widget, + id: uuidRegex.test(widget.id) ? widget.id : uuidv4(), + type: !uuidRegex.test(widget.id) ? widget.id : widget.type, + })), + }; + + Consola.log( + 'Migrating config file to multiple widgets...', + backendConfig.configProperties.name + ); + + writeConfig(backendConfig); + } + + return backendConfig; }; diff --git a/src/tools/config/getFrontendConfig.ts b/src/tools/config/getFrontendConfig.ts index c968c9b28..376522d4c 100644 --- a/src/tools/config/getFrontendConfig.ts +++ b/src/tools/config/getFrontendConfig.ts @@ -7,6 +7,22 @@ export const getFrontendConfig = (name: string): ConfigType => { const config = getConfig(name); Consola.info(`Requested frontend content of configuration '${name}'`); + // If not, return the config + const someAppsWithoutProps = config.apps.filter( + (app) => + app.integration?.properties.some( + (property) => property.value === null || property.value === undefined + ) ?? false + ); + if (someAppsWithoutProps.length > 0) { + Consola.warn( + `There are apps that have missing configuration options: [${someAppsWithoutProps + .map((app) => app.name) + .join( + ', ' + )}] please input the correct secrets once again for the concerned app(s), save them, exit edit mode and reload the page.` + ); + } return { ...config, diff --git a/src/tools/config/migrateConfig.ts b/src/tools/config/migrateConfig.ts index 7e8586524..fd783c9aa 100644 --- a/src/tools/config/migrateConfig.ts +++ b/src/tools/config/migrateConfig.ts @@ -159,7 +159,7 @@ const migrateService = (oldService: serviceItem, areaType: AreaType): ConfigAppT }, network: { enabledStatusChecker: oldService.ping ?? true, - okStatus: oldService.status?.map((str) => parseInt(str, 10)) ?? [200], + statusCodes: oldService.status ?? ['200'], }, appearance: { iconUrl: migrateIcon(oldService.icon), @@ -183,7 +183,8 @@ const migrateModules = (config: Config): IWidget[] => { case 'torrent-status': case 'Torrent': return { - id: 'torrents-status', + id: uuidv4(), + type: 'torrents-status', properties: { refreshInterval: 10, displayCompletedTorrents: oldModule.options?.hideComplete?.value ?? false, @@ -199,7 +200,8 @@ const migrateModules = (config: Config): IWidget[] => { } as ITorrent; case 'weather': return { - id: 'weather', + id: uuidv4(), + type: 'weather', properties: { displayInFahrenheit: oldModule.options?.freedomunit?.value ?? false, location: oldModule.options?.location?.value ?? 'Paris', @@ -216,7 +218,8 @@ const migrateModules = (config: Config): IWidget[] => { case 'Dash.': { const oldDashDotService = config.services.find((service) => service.type === 'Dash.'); return { - id: 'dashdot', + id: uuidv4(), + type: 'dashdot', properties: { url: oldModule.options?.url?.value ?? oldDashDotService?.url ?? '', cpuMultiView: oldModule.options?.cpuMultiView?.value ?? false, @@ -235,7 +238,8 @@ const migrateModules = (config: Config): IWidget[] => { } case 'date': return { - id: 'date', + id: uuidv4(), + type: 'date', properties: { display24HourFormat: oldModule.options?.full?.value ?? true, }, @@ -249,7 +253,8 @@ const migrateModules = (config: Config): IWidget[] => { } as IDateWidget; case 'Download Speed' || 'dlspeed': return { - id: 'dlspeed', + id: uuidv4(), + type: 'dlspeed', properties: {}, area: { type: 'wrapper', @@ -261,7 +266,8 @@ const migrateModules = (config: Config): IWidget[] => { } as ITorrentNetworkTraffic; case 'calendar': return { - id: 'calendar', + id: uuidv4(), + type: 'calendar', properties: {}, area: { type: 'wrapper', @@ -273,7 +279,8 @@ const migrateModules = (config: Config): IWidget[] => { } as ICalendarWidget; case 'usenet': return { - id: 'usenet', + id: uuidv4(), + type: 'usenet', properties: {}, area: { type: 'wrapper', diff --git a/src/tools/config/writeConfig.ts b/src/tools/config/writeConfig.ts new file mode 100644 index 000000000..5d57d9d03 --- /dev/null +++ b/src/tools/config/writeConfig.ts @@ -0,0 +1,10 @@ +import fs from 'fs'; +import { BackendConfigType } from '../../types/config'; +import { generateConfigPath } from './generateConfigPath'; + +export function writeConfig(config: BackendConfigType) { + const path = generateConfigPath(config.configProperties.name); + return fs.writeFileSync(path, JSON.stringify(config, null, 4), { + encoding: 'utf8', + }); +} diff --git a/src/tools/queryClient.ts b/src/tools/server/configurations/tanstack/queryClient.tool.ts similarity index 100% rename from src/tools/queryClient.ts rename to src/tools/server/configurations/tanstack/queryClient.tool.ts diff --git a/src/tools/server/getServerSideTranslations.ts b/src/tools/server/getServerSideTranslations.ts index 5576fafc7..5bf9388e8 100644 --- a/src/tools/server/getServerSideTranslations.ts +++ b/src/tools/server/getServerSideTranslations.ts @@ -3,17 +3,16 @@ import { IncomingMessage, ServerResponse } from 'http'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; export const getServerSideTranslations = async ( - req: IncomingMessage, - res: ServerResponse, namespaces: string[], - requestLocale?: string + requestLocale?: string, + req?: IncomingMessage, + res?: ServerResponse ) => { + if (!req || !res) { + return serverSideTranslations(requestLocale ?? 'en', namespaces); + } + const configLocale = getCookie('config-locale', { req, res }); - const translations = await serverSideTranslations( - (configLocale ?? requestLocale ?? 'en') as string, - namespaces - ); - - return translations; + return serverSideTranslations((configLocale ?? requestLocale ?? 'en') as string, namespaces); }; diff --git a/src/tools/server/images/jsdelivr-icons-repository.ts b/src/tools/server/images/jsdelivr-icons-repository.ts index 734f49853..acce25790 100644 --- a/src/tools/server/images/jsdelivr-icons-repository.ts +++ b/src/tools/server/images/jsdelivr-icons-repository.ts @@ -23,7 +23,7 @@ export class JsdelivrIconsRepository extends AbstractIconRepository { constructor( private readonly repository: JsdelivrRepositoryUrl, private readonly displayName: string, - copyright: string, + copyright: string ) { super(copyright); } diff --git a/src/tools/server/sdk/plex/plexClient.test.ts b/src/tools/server/sdk/plex/plexClient.test.ts new file mode 100644 index 000000000..9ef7feee4 --- /dev/null +++ b/src/tools/server/sdk/plex/plexClient.test.ts @@ -0,0 +1,137 @@ +import { afterEach, describe, expect, it } from 'vitest'; + +import 'vitest-fetch-mock'; + +import { PlexClient } from './plexClient'; + +describe('Plex SDK', () => { + it('return sessions when player, user and session present', async () => { + // arrange + const client = new PlexClient('https://plex.local', 'MY_TOKEN'); + + fetchMock.mockOnceIf( + 'https://plex.local/status/sessions?X-Plex-Token=MY_TOKEN', + ` + + ` + ); + + // act + const response = await client.getSessions(); + + // assert + expect(fetchMock.requests().length).toBe(1); + expect(fetchMock.requests()[0].url).toBe( + 'https://plex.local/status/sessions?X-Plex-Token=MY_TOKEN' + ); + expect(response).not.toBeNull(); + expect(response.length).toBe(1); + expect(response[0].id).toBe('2894294r2jf2038fj3098jgf3gt'); + expect(response[0].username).toBe('example_usr'); + expect(response[0].userProfilePicture).toBe('https://google.com'); + expect(response[0].sessionName).toBe('Plex Web (Chrome)'); + expect(response[0].currentlyPlaying).toMatchObject({ + name: 'A long title', + type: 'movie', + metadata: { + video: { + bitrate: '20231', + height: '1080', + videoCodec: 'h264', + videoFrameRate: '24p', + width: '1920', + }, + audio: { audioChannels: '2', audioCodec: 'aac' }, + transcoding: { + audioChannels: '2', + audioCodec: 'aac', + audioDecision: 'transcode', + container: 'mp4', + context: 'streaming', + duration: '100', + error: false, + height: '1080', + sourceAudioCodec: 'dca', + sourceVideoCodec: 'h264', + timeStamp: '1679349635.2791338', + transcodeHwRequested: false, + videoCodec: 'h264', + videoDecision: 'copy', + width: '1920', + }, + }, + }); + }); + + it('return sessions when no player and session present', async () => { + // arrange + const client = new PlexClient('http://plex.local', 'ABCYZT'); + + fetchMock.mockResponseOnce(` + + `); + + // act + const response = await client.getSessions(); + + // assert + expect(fetchMock.requests().length).toBe(1); + expect(fetchMock.requests()[0].url).toBe( + 'http://plex.local/status/sessions?X-Plex-Token=ABCYZT' + ); + expect(response.length).toBe(1); + expect(response[0]).toMatchObject({ + id: undefined, + username: 'Anonymous', + userProfilePicture: undefined, + sessionName: 'Plex Web (Chrome)', + currentlyPlaying: { + name: 'A long title', + type: 'movie', + }, + }); + }); + + it('return empty if no media container', async () => { + // arrange + const client = new PlexClient('http://plex.local', 'Homarr'); + + fetchMock.mockResponseOnce(''); + + // act + const response = await client.getSessions(); + + // assert + expect(fetchMock.requests().length).toBe(1); + expect(response.length).toBe(0); + }); + + afterEach(() => { + fetchMock.mockRestore(); + }); +}); diff --git a/src/tools/server/sdk/plex/plexClient.ts b/src/tools/server/sdk/plex/plexClient.ts index 6bc6707ce..eabf5a264 100644 --- a/src/tools/server/sdk/plex/plexClient.ts +++ b/src/tools/server/sdk/plex/plexClient.ts @@ -33,7 +33,7 @@ export class PlexClient { const mediaElement = this.findElement('Media', videoElement.elements); const sessionElement = this.findElement('Session', videoElement.elements); - if (!userElement || !playerElement || !mediaElement || !sessionElement) { + if (!playerElement || !mediaElement) { return undefined; } @@ -43,9 +43,9 @@ export class PlexClient { const transcodingElement = this.findElement('TranscodeSession', videoElement.elements); return { - id: sessionElement.id as string, - username: userElement.title as string, - userProfilePicture: userElement.thumb as string, + id: (sessionElement?.id as string | undefined), + username: userElement?.title ?? 'Anonymous' as string, + userProfilePicture: userElement?.thumb as string | undefined, sessionName: `${playerElement.product} (${playerElement.title})`, currentlyPlaying: { name: videoElement.attributes?.title as string, diff --git a/src/tools/theme.ts b/src/tools/server/theme/theme.ts similarity index 100% rename from src/tools/theme.ts rename to src/tools/server/theme/theme.ts diff --git a/src/tools/server/translation-namespaces.ts b/src/tools/server/translation-namespaces.ts index 5fe821c3f..8a2d3ad13 100644 --- a/src/tools/server/translation-namespaces.ts +++ b/src/tools/server/translation-namespaces.ts @@ -36,6 +36,9 @@ export const dashboardNamespaces = [ 'modules/media-server', 'modules/common-media-cards', 'modules/video-stream', + 'modules/media-requests-list', + 'modules/media-requests-stats', + 'widgets/error-boundary', ]; export const loginNamespaces = ['authentication/login']; diff --git a/src/tools/shared/math/percentage.tool.test.ts b/src/tools/shared/math/percentage.tool.test.ts new file mode 100644 index 000000000..f96beaf0b --- /dev/null +++ b/src/tools/shared/math/percentage.tool.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, it } from 'vitest'; + +import { percentage } from './percentage.tool'; + +describe('percentage', () => { + it.concurrent('be fixed value', () => { + // arrange + const value = 62; + + // act + const fixedPercentage = percentage(value, 100); + + // assert + expect(fixedPercentage).toBe('62.0'); + }); + + it.concurrent('be fixed value when decimal places', () => { + // arrange + const value = 42.69696969; + + // act + const fixedPercentage = percentage(value, 100); + + // assert + expect(fixedPercentage).toBe('42.7'); + }); +}); diff --git a/src/tools/percentage.ts b/src/tools/shared/math/percentage.tool.ts similarity index 100% rename from src/tools/percentage.ts rename to src/tools/shared/math/percentage.tool.ts diff --git a/src/tools/shared/time/date.tool.test.ts b/src/tools/shared/time/date.tool.test.ts new file mode 100644 index 000000000..51cd72b84 --- /dev/null +++ b/src/tools/shared/time/date.tool.test.ts @@ -0,0 +1,47 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +import { isToday } from './date.tool'; + +describe('isToday', () => { + beforeEach(() => { + vi.useFakeTimers(); + }); + + afterEach(() => { + vi.useRealTimers(); + }); + + it.concurrent('should return true if date is today', () => { + // arrange + const date = new Date(2022, 3, 17); + vi.setSystemTime(date); + + // act + const today = isToday(date); + + // assert + expect(today).toBe(true); + }); + + it.concurrent("should return true if date is today and time doesn't match", () => { + // arrange + vi.setSystemTime(new Date(2022, 3, 17, 16, 25, 11)); + + // act + const today = isToday(new Date(2022, 3, 17)); + + // assert + expect(today).toBe(true); + }); + + it.concurrent("should be false if date doesn't match", () => { + // arrange + vi.setSystemTime(new Date(2022, 3, 17, 16)); + + // act + const today = isToday(new Date(2022, 3, 15)); + + // assert + expect(today).toBe(false); + }); +}); diff --git a/src/tools/isToday.ts b/src/tools/shared/time/date.tool.ts similarity index 100% rename from src/tools/isToday.ts rename to src/tools/shared/time/date.tool.ts diff --git a/src/tools/shared/time/stopwatch.tool.test.ts b/src/tools/shared/time/stopwatch.tool.test.ts new file mode 100644 index 000000000..b39c51c61 --- /dev/null +++ b/src/tools/shared/time/stopwatch.tool.test.ts @@ -0,0 +1,26 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +import { Stopwatch } from './stopwatch.tool'; + +describe('stopwatch', () => { + beforeEach(() => { + vi.useFakeTimers(); + }); + + afterEach(() => { + vi.useRealTimers(); + }); + + it.concurrent('should be elapsed time between start and current', () => { + // arrange + vi.setSystemTime(new Date(2023, 2, 26, 0, 0, 0)); + const stopwatch = new Stopwatch(); + + // act + vi.setSystemTime(new Date(2023, 2, 26, 0, 0, 2)); + const milliseconds = stopwatch.getEllapsedMilliseconds(); + + // assert + expect(milliseconds).toBe(2000); + }); +}); diff --git a/src/tools/shared/stopwatch.ts b/src/tools/shared/time/stopwatch.tool.ts similarity index 100% rename from src/tools/shared/stopwatch.ts rename to src/tools/shared/time/stopwatch.tool.ts diff --git a/src/tools/types.ts b/src/tools/types.ts index cb59c6f3a..71046a433 100644 --- a/src/tools/types.ts +++ b/src/tools/types.ts @@ -1,4 +1,5 @@ import { MantineTheme } from '@mantine/core'; + import { OptionValues } from '../modules/ModuleTypes'; export interface Settings { @@ -74,6 +75,12 @@ export type ServiceType = | 'Sabnzbd' | 'NZBGet'; +/** + * @deprecated + * @param name the name to match + * @param form the form + * @returns the port from the map + */ export function tryMatchPort(name: string | undefined, form?: any) { if (!name) { return undefined; diff --git a/src/types/api/media-server/session-info.ts b/src/types/api/media-server/session-info.ts index 5b8c25ab7..6132f9185 100644 --- a/src/types/api/media-server/session-info.ts +++ b/src/types/api/media-server/session-info.ts @@ -1,7 +1,7 @@ export type GenericSessionInfo = { supportsMediaControl: boolean; username: string | undefined; - id: string; + id: string | undefined; sessionName: string; userProfilePicture: string | undefined; currentlyPlaying: GenericCurrentlyPlaying | undefined; @@ -10,37 +10,44 @@ export type GenericSessionInfo = { export type GenericCurrentlyPlaying = { name: string; seasonName: string | undefined; + episodeName: string | undefined; albumName: string | undefined; episodeCount: number | undefined; type: 'audio' | 'video' | 'tv' | 'movie' | undefined; metadata: { - video: { - videoCodec: string | undefined; - videoFrameRate: string | undefined; - height: number | undefined; - width: number | undefined; - bitrate: number | undefined; - } | undefined; - audio: { - audioCodec: string | undefined; - audioChannels: number | undefined; - } | undefined; - transcoding: { - context: string | undefined; - sourceVideoCodec: string | undefined; - sourceAudioCodec: string | undefined; - videoDecision: string | undefined; - audioDecision: string | undefined; - container: string | undefined; - videoCodec: string | undefined; - audioCodec: string | undefined; - error: boolean | undefined; - duration: number | undefined; - audioChannels: number | undefined; - width: number | undefined; - height: number | undefined; - transcodeHwRequested: boolean | undefined; - timeStamp: number | undefined; - } | undefined; + video: + | { + videoCodec: string | undefined; + videoFrameRate: string | undefined; + height: number | undefined; + width: number | undefined; + bitrate: number | undefined; + } + | undefined; + audio: + | { + audioCodec: string | undefined; + audioChannels: number | undefined; + } + | undefined; + transcoding: + | { + context: string | undefined; + sourceVideoCodec: string | undefined; + sourceAudioCodec: string | undefined; + videoDecision: string | undefined; + audioDecision: string | undefined; + container: string | undefined; + videoCodec: string | undefined; + audioCodec: string | undefined; + error: boolean | undefined; + duration: number | undefined; + audioChannels: number | undefined; + width: number | undefined; + height: number | undefined; + transcodeHwRequested: boolean | undefined; + timeStamp: number | undefined; + } + | undefined; }; }; diff --git a/src/types/app.ts b/src/types/app.ts index 2e611c031..ca933d2d4 100644 --- a/src/types/app.ts +++ b/src/types/app.ts @@ -23,7 +23,7 @@ interface AppBehaviourType { interface AppNetworkType { enabledStatusChecker: boolean; - okStatus: number[]; + statusCodes: string[]; } interface AppAppearanceType { diff --git a/src/widgets/WidgetWrapper.tsx b/src/widgets/WidgetWrapper.tsx index bb7323073..43658072c 100644 --- a/src/widgets/WidgetWrapper.tsx +++ b/src/widgets/WidgetWrapper.tsx @@ -1,11 +1,12 @@ -import { ComponentType, useMemo } from 'react'; +import { ComponentType } from 'react'; import Widgets from '.'; import { HomarrCardWrapper } from '../components/Dashboard/Tiles/HomarrCardWrapper'; import { WidgetsMenu } from '../components/Dashboard/Tiles/Widgets/WidgetsMenu'; +import ErrorBoundary from './boundary'; import { IWidget } from './widgets'; interface WidgetWrapperProps { - widgetId: string; + widgetType: string; widget: IWidget; className: string; WidgetComponent: ComponentType<{ widget: IWidget }>; @@ -13,26 +14,24 @@ interface WidgetWrapperProps { // If a property has no value, set it to the default value const useWidget = >(widget: T): T => { - const definition = Widgets[widget.id as keyof typeof Widgets]; + const definition = Widgets[widget.type as keyof typeof Widgets]; - return useMemo(() => { - const newProps = { ...widget.properties }; + const newProps = { ...widget.properties }; - Object.entries(definition.options).forEach(([key, option]) => { - if (newProps[key] == null) { - newProps[key] = option.defaultValue; - } - }); + Object.entries(definition.options).forEach(([key, option]) => { + if (newProps[key] == null) { + newProps[key] = option.defaultValue; + } + }); - return { - ...widget, - properties: newProps, - }; - }, [widget]); + return { + ...widget, + properties: newProps, + }; }; export const WidgetWrapper = ({ - widgetId, + widgetType, widget, className, WidgetComponent, @@ -40,9 +39,11 @@ export const WidgetWrapper = ({ const widgetWithDefaultProps = useWidget(widget); return ( - - - - + + + + + + ); }; diff --git a/src/widgets/boundary.tsx b/src/widgets/boundary.tsx new file mode 100644 index 000000000..1c2755ad0 --- /dev/null +++ b/src/widgets/boundary.tsx @@ -0,0 +1,127 @@ +import Consola from 'consola'; +import React, { ReactNode } from 'react'; +import { openModal } from '@mantine/modals'; +import { withTranslation } from 'next-i18next'; +import { Button, Card, Center, Code, Group, Stack, Text, Title } from '@mantine/core'; +import { IconBrandGithub, IconBug, IconInfoCircle, IconRefresh } from '@tabler/icons'; + +type ErrorBoundaryState = { + hasError: boolean; + error: Error | undefined; +}; + +type ErrorBoundaryProps = { + t: (key: string) => string; + children: ReactNode; +}; + +/** + * A custom error boundary, that catches errors within widgets and renders an error component. + * The error component can be refreshed and shows a modal with error details + */ +class ErrorBoundary extends React.Component { + constructor(props: any) { + super(props); + + // Define a state variable to track whether is an error or not + this.state = { hasError: false, error: undefined }; + } + + static getDerivedStateFromError(error: Error) { + // Update state so the next render will show the fallback UI + return { hasError: true, error }; + } + + componentDidCatch(error: Error, errorInfo: any) { + Consola.error(`Error while rendering widget, ${error}: ${errorInfo}`); + } + + render() { + // Check if the error is thrown + if (this.state.hasError) { + return ( + ({ + backgroundColor: theme.colors.red[5], + })} + radius="lg" + shadow="sm" + withBorder + > +
+ + + + + {this.props.t('card.title')} + + {this.state.error && ( + + {this.state.error.toString()} + + )} + + + + + ), + }) + } + leftIcon={} + variant="light" + > + {this.props.t('card.buttons.details')} + + + + +
+
+ ); + } + + // Return children components in case of no error + return this.props.children; + } +} + +export default withTranslation('widgets/error-boundary')(ErrorBoundary); diff --git a/src/widgets/calendar/CalendarDay.tsx b/src/widgets/calendar/CalendarDay.tsx index c8ddc2f9d..86887e03a 100644 --- a/src/widgets/calendar/CalendarDay.tsx +++ b/src/widgets/calendar/CalendarDay.tsx @@ -1,5 +1,6 @@ import { Box, Indicator, IndicatorProps, Popover } from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; +import { isToday } from '../../tools/shared/time/date.tool'; import { MediaList } from './MediaList'; import { MediasType } from './type'; @@ -22,12 +23,24 @@ export const CalendarDay = ({ date, medias }: CalendarDayProps) => { withinPortal radius="lg" shadow="sm" - transition="pop" + transitionProps={{ + transition: 'pop', + }} onClose={close} opened={opened} > - + ({ + margin: 5, + backgroundColor: isToday(date) + ? theme.colorScheme === 'dark' + ? theme.colors.dark[5] + : theme.colors.gray[0] + : undefined, + })} + > diff --git a/src/widgets/calendar/CalendarTile.tsx b/src/widgets/calendar/CalendarTile.tsx index edd4b6672..1d0008f04 100644 --- a/src/widgets/calendar/CalendarTile.tsx +++ b/src/widgets/calendar/CalendarTile.tsx @@ -1,12 +1,10 @@ -import { createStyles, Group, MantineThemeColors, useMantineTheme } from '@mantine/core'; +import { Group } from '@mantine/core'; import { Calendar } from '@mantine/dates'; import { IconCalendarTime } from '@tabler/icons'; import { useQuery } from '@tanstack/react-query'; import { i18n } from 'next-i18next'; import { useState } from 'react'; import { useConfigContext } from '../../config/provider'; -import { useColorTheme } from '../../tools/color'; -import { isToday } from '../../tools/isToday'; import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; import { CalendarDay } from './CalendarDay'; @@ -50,10 +48,7 @@ interface CalendarTileProps { } function CalendarTile({ widget }: CalendarTileProps) { - const { secondaryColor } = useColorTheme(); const { name: configName } = useConfigContext(); - const { classes, cx } = useStyles(secondaryColor); - const { colorScheme, colors } = useMantineTheme(); const [month, setMonth] = useState(new Date()); const { data: medias } = useQuery({ @@ -64,7 +59,7 @@ function CalendarTile({ widget }: CalendarTileProps) { await fetch( `/api/modules/calendar?year=${month.getFullYear()}&month=${ month.getMonth() + 1 - }&configName=${configName}` + }&configName=${configName}&widgetId=${widget.id}` ) ).json()) as MediasType, }); @@ -72,39 +67,35 @@ function CalendarTile({ widget }: CalendarTileProps) { return ( {}} - firstDayOfWeek={widget.properties.sundayStart ? 'sunday' : 'monday'} - dayStyle={(date) => ({ - margin: -1, - backgroundColor: isToday(date) - ? colorScheme === 'dark' - ? colors.dark[5] - : colors.gray[0] - : undefined, - })} + firstDayOfWeek={widget.properties.sundayStart ? 0 : 1} hideWeekdays + date={month} + hasNextLevel={false} styles={{ - weekdayCell: { - margin: 0, - padding: 0, + calendar: { + height: '100%', + }, + monthLevelGroup: { + height: '100%', + }, + monthLevel: { + height: '100%', + display: 'flex', + flexDirection: 'column', + width: '100%', + }, + month: { + flex: 1, }, calendarHeader: { - position: 'relative', - margin: 0, - padding: 0, + maxWidth: 'inherit', }, }} - allowLevelChange={false} - dayClassName={(_, modifiers) => cx({ [classes.weekend]: modifiers.weekend })} renderDay={(date) => ( )} @@ -113,12 +104,6 @@ function CalendarTile({ widget }: CalendarTileProps) { ); } -const useStyles = createStyles((theme, secondaryColor: keyof MantineThemeColors) => ({ - weekend: { - color: `${secondaryColor} !important`, - }, -})); - const getReleasedMediasForDate = ( medias: MediasType | undefined, date: Date, diff --git a/src/widgets/dashDot/DashDotCompactStorage.tsx b/src/widgets/dashDot/DashDotCompactStorage.tsx index d321f28b1..319ffe10c 100644 --- a/src/widgets/dashDot/DashDotCompactStorage.tsx +++ b/src/widgets/dashDot/DashDotCompactStorage.tsx @@ -4,16 +4,17 @@ import axios from 'axios'; import { useTranslation } from 'next-i18next'; import { useConfigContext } from '../../config/provider'; import { bytes } from '../../tools/bytesHelper'; -import { percentage } from '../../tools/percentage'; +import { percentage } from '../../tools/shared/math/percentage.tool'; import { DashDotInfo } from './DashDotCompactNetwork'; interface DashDotCompactStorageProps { info: DashDotInfo; + widgetId: string; } -export const DashDotCompactStorage = ({ info }: DashDotCompactStorageProps) => { +export const DashDotCompactStorage = ({ info, widgetId }: DashDotCompactStorageProps) => { const { t } = useTranslation('modules/dashdot'); - const { data: storageLoad } = useDashDotStorage(); + const { data: storageLoad } = useDashDotStorage(widgetId); const totalUsed = calculateTotalLayoutSize({ layout: storageLoad?.layout ?? [], @@ -50,7 +51,7 @@ interface CalculateTotalLayoutSizeProps { key: keyof TLayoutItem; } -const useDashDotStorage = () => { +const useDashDotStorage = (widgetId: string) => { const { name: configName, config } = useConfigContext(); return useQuery({ @@ -58,17 +59,18 @@ const useDashDotStorage = () => { 'dashdot/storage', { configName, - url: config?.widgets.find((x) => x.id === 'dashdot')?.properties.url, + url: config?.widgets.find((x) => x.type === 'dashdot')?.properties.url, + widgetId, }, ], - queryFn: () => fetchDashDotStorageLoad(configName), + queryFn: () => fetchDashDotStorageLoad(configName, widgetId), }); }; -async function fetchDashDotStorageLoad(configName: string | undefined) { +async function fetchDashDotStorageLoad(configName: string | undefined, widgetId: string) { if (!configName) throw new Error('configName is undefined'); return (await ( - await axios.get('/api/modules/dashdot/storage', { params: { configName } }) + await axios.get('/api/modules/dashdot/storage', { params: { configName, widgetId } }) ).data) as DashDotStorageLoad; } diff --git a/src/widgets/dashDot/DashDotGraph.tsx b/src/widgets/dashDot/DashDotGraph.tsx index 6977005cd..d26bd0e90 100644 --- a/src/widgets/dashDot/DashDotGraph.tsx +++ b/src/widgets/dashDot/DashDotGraph.tsx @@ -1,4 +1,4 @@ -import { createStyles, Title, useMantineTheme } from '@mantine/core'; +import { createStyles, Title, useMantineTheme, getStylesRef } from '@mantine/core'; import { useTranslation } from 'next-i18next'; import { DashDotCompactNetwork, DashDotInfo } from './DashDotCompactNetwork'; import { DashDotCompactStorage } from './DashDotCompactStorage'; @@ -11,6 +11,7 @@ interface DashDotGraphProps { dashDotUrl: string; usePercentages: boolean; info: DashDotInfo; + widgetId: string; } export const DashDotGraph = ({ @@ -21,12 +22,13 @@ export const DashDotGraph = ({ dashDotUrl, usePercentages, info, + widgetId, }: DashDotGraphProps) => { const { t } = useTranslation('modules/dashdot'); const { classes } = useStyles(); if (graph === 'storage' && isCompact) { - return ; + return ; } if (graph === 'network' && isCompact) { @@ -77,7 +79,7 @@ const useIframeSrc = ( ); }; -export const useStyles = createStyles((theme, _params, getRef) => ({ +export const useStyles = createStyles((theme, _params) => ({ iframe: { flex: '1 0 auto', maxWidth: '100%', @@ -87,7 +89,7 @@ export const useStyles = createStyles((theme, _params, getRef) => ({ colorScheme: 'light', // fixes white borders around iframe }, graphTitle: { - ref: getRef('graphTitle'), + ref: getStylesRef('graphTitle'), position: 'absolute', right: 0, bottom: 0, @@ -99,7 +101,7 @@ export const useStyles = createStyles((theme, _params, getRef) => ({ }, graphContainer: { position: 'relative', - [`&:hover .${getRef('graphTitle')}`]: { + [`&:hover .${getStylesRef('graphTitle')}`]: { opacity: 0.5, }, }, diff --git a/src/widgets/dashDot/DashDotTile.tsx b/src/widgets/dashDot/DashDotTile.tsx index 522c555c3..fe19b0110 100644 --- a/src/widgets/dashDot/DashDotTile.tsx +++ b/src/widgets/dashDot/DashDotTile.tsx @@ -160,6 +160,7 @@ function DashDotTile({ widget }: DashDotTileProps) { const { data: info } = useDashDotInfo({ dashDotUrl, enabled: !detectedProtocolDowngrade, + widgetId: widget.id, }); if (detectedProtocolDowngrade) { @@ -197,6 +198,7 @@ function DashDotTile({ widget }: DashDotTileProps) { isCompact={g.subValues.compactView ?? false} multiView={g.subValues.multiView ?? false} usePercentages={usePercentages} + widgetId={widget.id} /> ))} @@ -207,7 +209,15 @@ function DashDotTile({ widget }: DashDotTileProps) { ); } -const useDashDotInfo = ({ dashDotUrl, enabled }: { dashDotUrl: string; enabled: boolean }) => { +const useDashDotInfo = ({ + dashDotUrl, + enabled, + widgetId, +}: { + dashDotUrl: string; + enabled: boolean; + widgetId: string; +}) => { const { name: configName } = useConfigContext(); return useQuery({ refetchInterval: 50000, @@ -218,21 +228,21 @@ const useDashDotInfo = ({ dashDotUrl, enabled }: { dashDotUrl: string; enabled: dashDotUrl, }, ], - queryFn: () => fetchDashDotInfo(configName), + queryFn: () => fetchDashDotInfo(configName, widgetId), enabled, }); }; -const fetchDashDotInfo = async (configName: string | undefined) => { +const fetchDashDotInfo = async (configName: string | undefined, widgetId: string) => { if (!configName) return {} as DashDotInfo; return (await ( - await axios.get('/api/modules/dashdot/info', { params: { configName } }) + await axios.get('/api/modules/dashdot/info', { params: { configName, widgetId } }) ).data) as DashDotInfo; }; export const useDashDotTileStyles = createStyles((theme) => ({ graphsContainer: { - marginRight: theme.spacing.sm * -1, // fix because margin collapses weirdly + marginRight: `calc(${theme.spacing.sm} * -1)`, }, })); diff --git a/src/widgets/date/DateTile.tsx b/src/widgets/date/DateTile.tsx index b9f005873..07c26cb5c 100644 --- a/src/widgets/date/DateTile.tsx +++ b/src/widgets/date/DateTile.tsx @@ -25,7 +25,7 @@ const definition = defineWidget({ component: DateTile, }); -export type IDateWidget = IWidget; +export type IDateWidget = IWidget<(typeof definition)['id'], typeof definition>; interface DateTileProps { widget: IDateWidget; diff --git a/src/widgets/iframe/IFrameTile.tsx b/src/widgets/iframe/IFrameTile.tsx index 44b17d089..8cc2efe1f 100644 --- a/src/widgets/iframe/IFrameTile.tsx +++ b/src/widgets/iframe/IFrameTile.tsx @@ -43,7 +43,7 @@ function IFrameTile({ widget }: IFrameTileProps) { - {t('card.errors.noUrl.title')} + {t('card.errors.noUrl.title')} {t('card.errors.noUrl.text')} diff --git a/src/widgets/index.ts b/src/widgets/index.ts index 820795f24..4250bfd07 100644 --- a/src/widgets/index.ts +++ b/src/widgets/index.ts @@ -9,6 +9,8 @@ import torrent from './torrent/TorrentTile'; import usenet from './useNet/UseNetTile'; import videoStream from './video/VideoStreamTile'; import weather from './weather/WeatherTile'; +import mediaRequestsList from './media-requests/MediaRequestListTile'; +import mediaRequestsStats from './media-requests/MediaRequestStatsTile'; export default { calendar, @@ -22,4 +24,6 @@ export default { 'video-stream': videoStream, iframe, 'media-server': mediaServer, + 'media-requests-list': mediaRequestsList, + 'media-requests-stats': mediaRequestsStats, }; diff --git a/src/widgets/loading.tsx b/src/widgets/loading.tsx new file mode 100644 index 000000000..61386165e --- /dev/null +++ b/src/widgets/loading.tsx @@ -0,0 +1,7 @@ +import { Center, Loader } from '@mantine/core'; + +export const WidgetLoading = () => ( +
+ +
+ ); diff --git a/src/widgets/media-requests/MediaRequestListTile.tsx b/src/widgets/media-requests/MediaRequestListTile.tsx new file mode 100644 index 000000000..4cbdd47be --- /dev/null +++ b/src/widgets/media-requests/MediaRequestListTile.tsx @@ -0,0 +1,133 @@ +import { Badge, Card, Center, Flex, Group, Image, Stack, Text } from '@mantine/core'; +import { useTranslation } from 'next-i18next'; +import { IconGitPullRequest } from '@tabler/icons'; +import { defineWidget } from '../helper'; +import { WidgetLoading } from '../loading'; +import { IWidget } from '../widgets'; +import { useMediaRequestQuery } from './media-request-query'; +import { MediaRequestStatus } from './media-request-types'; + +const definition = defineWidget({ + id: 'media-requests-list', + icon: IconGitPullRequest, + options: {}, + component: MediaRequestListTile, + gridstack: { + minWidth: 3, + minHeight: 2, + maxWidth: 12, + maxHeight: 12, + }, +}); + +export type MediaRequestListWidget = IWidget<(typeof definition)['id'], typeof definition>; + +interface MediaRequestListWidgetProps { + widget: MediaRequestListWidget; +} + +function MediaRequestListTile({ widget }: MediaRequestListWidgetProps) { + const { t } = useTranslation('modules/media-requests-list'); + const { data, isFetching } = useMediaRequestQuery(); + + if (!data || isFetching) { + return ; + } + + if (data.length === 0) { + return ( +
+ {t('noRequests')} +
+ ); + } + + const countPendingApproval = data.filter( + (x) => x.status === MediaRequestStatus.PendingApproval + ).length; + + return ( + + {countPendingApproval > 0 ? ( + {t('pending', { countPendingApproval })} + ) : ( + {t('nonePending')} + )} + {data.map((item) => ( + + + + poster + + + {item.airDate.split('-')[0]} + + + + {item.name} + + + + + requester avatar + + {item.userName} + + + + + + + ))} + + ); +} + +const MediaRequestStatusBadge = ({ status }: { status: MediaRequestStatus }) => { + const { t } = useTranslation('modules/media-requests-list'); + switch (status) { + case MediaRequestStatus.Approved: + return {t('state.approved')}; + case MediaRequestStatus.Declined: + return {t('state.declined')}; + case MediaRequestStatus.PendingApproval: + return {t('state.pendingApproval')}; + default: + return <>; + } +}; + +export default definition; diff --git a/src/widgets/media-requests/MediaRequestStatsTile.tsx b/src/widgets/media-requests/MediaRequestStatsTile.tsx new file mode 100644 index 000000000..8dddac742 --- /dev/null +++ b/src/widgets/media-requests/MediaRequestStatsTile.tsx @@ -0,0 +1,75 @@ +import { Card, Center, Flex, Stack, Text } from '@mantine/core'; +import { IconChartBar } from '@tabler/icons'; +import { useTranslation } from 'next-i18next'; +import { defineWidget } from '../helper'; +import { WidgetLoading } from '../loading'; +import { IWidget } from '../widgets'; +import { useMediaRequestQuery } from './media-request-query'; +import { MediaRequestStatus } from './media-request-types'; + +const definition = defineWidget({ + id: 'media-requests-stats', + icon: IconChartBar, + options: {}, + component: MediaRequestStatsTile, + gridstack: { + minWidth: 1, + minHeight: 2, + maxWidth: 12, + maxHeight: 12, + }, +}); + +export type MediaRequestStatsWidget = IWidget<(typeof definition)['id'], typeof definition>; + +interface MediaRequestStatsWidgetProps { + widget: MediaRequestStatsWidget; +} + +function MediaRequestStatsTile({ widget }: MediaRequestStatsWidgetProps) { + const { t } = useTranslation('modules/media-requests-stats'); + const { data, isFetching } = useMediaRequestQuery(); + + if (!data || isFetching) { + return ; + } + + return ( + + +
+ + + {data.filter((x) => x.status === MediaRequestStatus.PendingApproval).length} + + + {t('stats.pending')} + + +
+
+ +
+ + {data.filter((x) => x.type === 'tv').length} + + {t('stats.tvRequests')} + + +
+
+ +
+ + {data.filter((x) => x.type === 'movie').length} + + {t('stats.movieRequests')} + + +
+
+
+ ); +} + +export default definition; diff --git a/src/widgets/media-requests/media-request-query.tsx b/src/widgets/media-requests/media-request-query.tsx new file mode 100644 index 000000000..10ec3541f --- /dev/null +++ b/src/widgets/media-requests/media-request-query.tsx @@ -0,0 +1,11 @@ +import { useQuery } from '@tanstack/react-query'; +import { MediaRequest } from './media-request-types'; + +export const useMediaRequestQuery = () => useQuery({ + queryKey: ['media-requests'], + queryFn: async () => { + const response = await fetch('/api/modules/media-requests'); + return (await response.json()) as MediaRequest[]; + }, + refetchInterval: 3 * 60 * 1000, +}); diff --git a/src/widgets/media-requests/media-request-types.tsx b/src/widgets/media-requests/media-request-types.tsx new file mode 100644 index 000000000..7ad40007a --- /dev/null +++ b/src/widgets/media-requests/media-request-types.tsx @@ -0,0 +1,22 @@ +export type MediaRequest = { + appId: string; + id: number; + createdAt: string; + rootFolder: string; + type: 'movie' | 'tv'; + name: string; + userName: string; + userProfilePicture: string; + userLink: string; + airDate: string; + status: MediaRequestStatus; + backdropPath: string; + posterPath: string; + href: string; +}; + +export enum MediaRequestStatus { + PendingApproval = 1, + Approved = 2, + Declined = 3 +} diff --git a/src/widgets/media-server/DetailCollapseable.tsx b/src/widgets/media-server/DetailCollapseable.tsx index 536e3d0e7..2517962bf 100644 --- a/src/widgets/media-server/DetailCollapseable.tsx +++ b/src/widgets/media-server/DetailCollapseable.tsx @@ -107,7 +107,9 @@ export const DetailCollapseable = ({ session }: { session: GenericSessionInfo })
{session.sessionName} - {details.length > 0 && } + {details.length > 0 && ( + + )} {details.map((detail, index) => ( diff --git a/src/widgets/media-server/MediaServerTile.tsx b/src/widgets/media-server/MediaServerTile.tsx index c1c40064d..7f7a37252 100644 --- a/src/widgets/media-server/MediaServerTile.tsx +++ b/src/widgets/media-server/MediaServerTile.tsx @@ -12,6 +12,7 @@ import { import { IconAlertTriangle, IconMovie } from '@tabler/icons'; import { useTranslation } from 'next-i18next'; import { AppAvatar } from '../../components/AppAvatar'; +import { useEditModeStore } from '../../components/Dashboard/Views/useEditModeStore'; import { useConfigContext } from '../../config/provider'; import { useGetMediaServers } from '../../hooks/widgets/media-servers/useGetMediaServers'; import { defineWidget } from '../helper'; @@ -40,8 +41,9 @@ interface MediaServerWidgetProps { function MediaServerTile({ widget }: MediaServerWidgetProps) { const { t } = useTranslation('modules/media-server'); const { config } = useConfigContext(); + const isEditMode = useEditModeStore((x) => x.enabled); - const { data, isError } = useGetMediaServers({ + const { data, isError, isFetching, isInitialLoading } = useGetMediaServers({ enabled: config !== undefined, }); @@ -57,16 +59,28 @@ function MediaServerTile({ widget }: MediaServerWidgetProps) { ); } - if (!data) { -
- -
; + if (isInitialLoading) { + return ( + + + + {t('descriptor.name')} + Homarr is loading streams... + + + ); } return ( - +
@@ -97,7 +111,8 @@ function MediaServerTile({ widget }: MediaServerWidgetProps) { return ( ); })} diff --git a/src/widgets/media-server/NowPlayingDisplay.tsx b/src/widgets/media-server/NowPlayingDisplay.tsx index 740de5507..98decb05c 100644 --- a/src/widgets/media-server/NowPlayingDisplay.tsx +++ b/src/widgets/media-server/NowPlayingDisplay.tsx @@ -30,11 +30,10 @@ export const NowPlayingDisplay = ({ session }: { session: GenericSessionInfo }) }; const Test = Icon(); - return ( - + {session.currentlyPlaying.name} {session.currentlyPlaying.albumName ? ( @@ -43,8 +42,8 @@ export const NowPlayingDisplay = ({ session }: { session: GenericSessionInfo }) ) : ( session.currentlyPlaying.seasonName && ( - - {session.currentlyPlaying.seasonName} + + {session.currentlyPlaying.seasonName} - {session.currentlyPlaying.episodeName} ) )} diff --git a/src/widgets/rss/RssWidgetTile.tsx b/src/widgets/rss/RssWidgetTile.tsx index 39b03db68..c3022fd00 100644 --- a/src/widgets/rss/RssWidgetTile.tsx +++ b/src/widgets/rss/RssWidgetTile.tsx @@ -1,36 +1,25 @@ +import Link from 'next/link'; import { ActionIcon, Badge, Card, Center, - createStyles, Flex, Group, Image, Loader, - LoadingOverlay, MediaQuery, ScrollArea, Stack, Text, Title, - UnstyledButton, + createStyles, } from '@mantine/core'; -import { useElementSize } from '@mantine/hooks'; -import { - IconBulldozer, - IconCalendarTime, - IconClock, - IconCopyright, - IconRefresh, - IconRss, - IconSpeakerphone, -} from '@tabler/icons'; +import { IconClock, IconRefresh, IconRss } from '@tabler/icons'; +import { useQuery } from '@tanstack/react-query'; +import dayjs from 'dayjs'; import { useTranslation } from 'next-i18next'; -import Link from 'next/link'; -import { useState } from 'react'; -import { useGetRssFeed } from '../../hooks/widgets/rss/useGetRssFeed'; -import { sleep } from '../../tools/client/time'; + import { defineWidget } from '../helper'; import { IWidget } from '../widgets'; @@ -39,8 +28,15 @@ const definition = defineWidget({ icon: IconRss, options: { rssFeedUrl: { - type: 'text', - defaultValue: '', + type: 'multiple-text', + defaultValue: [], + }, + refreshInterval: { + type: 'slider', + defaultValue: 30, + min: 15, + max: 300, + step: 15, }, }, gridstack: { @@ -58,161 +54,158 @@ interface RssTileProps { widget: IRssWidget; } +export const useGetRssFeeds = (feedUrls: string[], refreshInterval: number, widgetId: string) => + useQuery({ + queryKey: ['rss-feeds', feedUrls], + // Cache the results for 24 hours + cacheTime: 1000 * 60 * 60 * 24, + staleTime: 1000 * 60 * refreshInterval, + queryFn: async () => { + const responses = await Promise.all( + feedUrls.map((feedUrl) => + fetch( + `/api/modules/rss?widgetId=${widgetId}&feedUrl=${encodeURIComponent(feedUrl)}` + ).then((response) => response.json()) + ) + ); + return responses; + }, + }); + function RssTile({ widget }: RssTileProps) { const { t } = useTranslation('modules/rss'); - const { data, isLoading, isFetching, isError, refetch } = useGetRssFeed( - widget.properties.rssFeedUrl + const { data, isLoading, isFetching, isError, refetch } = useGetRssFeeds( + widget.properties.rssFeedUrl, + widget.properties.refreshInterval, + widget.id ); const { classes } = useStyles(); - const [loadingOverlayVisible, setLoadingOverlayVisible] = useState(false); - const { ref, height } = useElementSize(); + + function formatDate(input: string): string { + // Parse the input date as a local date + try { + const inputDate = dayjs(new Date(input)); + const now = dayjs(); // Current date and time + const difference = now.diff(inputDate, 'ms'); + const duration = dayjs.duration(difference, 'ms'); + const humanizedDuration = duration.humanize(); + return `${humanizedDuration} ago`; + } catch (e) { + return 'Error'; + } + } if (!data || isLoading) { return ( -
+
); } - if (!data.success || isError) { + if (data.length < 1 || !data[0].feed || isError) { return (
- {t('card.errors.general.title')} - {t('card.errors.general.text')} + {t('descriptor.card.errors.general.title')} + {t('descriptor.card.errors.general.text')}
); } return ( - - - - {data.feed.image ? ( - - ) : ( - {data.feed.title} - )} - { - setLoadingOverlayVisible(true); - await Promise.all([sleep(1500), refetch()]); - setLoadingOverlayVisible(false); - }} - disabled={isFetching || isLoading} - > - - - - - - - - {data.feed.items.map((item: any, index: number) => ( - - {item.enclosure && ( - // eslint-disable-next-line @next/next/no-img-element - backdrop - )} - - - - + + {data.map((feed, index) => ( + + {feed.feed && feed.feed.items.map((item: any, index: number) => ( + + {item.enclosure && ( + // eslint-disable-next-line @next/next/no-img-element + backdrop - - - {item.categories && ( - - {item.categories.map((category: any, categoryIndex: number) => ( - {category._} - ))} - + )} + + + {item.enclosure && ( + + + )} + + {item.categories && ( + + {item.categories.map((category: any, categoryIndex: number) => ( + {category} + ))} + + )} - {item.title} - - {item.content} - + {item.title} + + {item.content} + - {item.pubDate && } + {item.pubDate && ( + + )} + - - - ))} - + + ))} + + ))} - - - - - {data.feed.copyright} - - - - - - {data.feed.pubDate} - - - - - - {data.feed.lastBuildDate} - - - {data.feed.feedUrl && ( - - - - Feed URL - - - )} - + refetch()} + bottom={10} + styles={{ + root: { + borderColor: 'red', + }, + }} + > + {isFetching ? : } + ); } -const TimeDisplay = ({ date }: { date: string }) => ( +const InfoDisplay = ({ date, title }: { date: string; title: string | undefined }) => ( {date} + {title && ( + + {title} + + )} ); diff --git a/src/widgets/torrent/TorrentQueueItem.tsx b/src/widgets/torrent/TorrentQueueItem.tsx index 6d7afd891..c416252b6 100644 --- a/src/widgets/torrent/TorrentQueueItem.tsx +++ b/src/widgets/torrent/TorrentQueueItem.tsx @@ -35,7 +35,7 @@ interface TorrentQueueItemProps { export const BitTorrrentQueueItem = ({ torrent, app }: TorrentQueueItemProps) => { const [popoverOpened, { open: openPopover, close: closePopover }] = useDisclosure(false); - const MIN_WIDTH_MOBILE = useMantineTheme().breakpoints.xs; + const theme = useMantineTheme(); const { width } = useElementSize(); const { t } = useTranslation('modules/torrents-status'); @@ -75,17 +75,17 @@ export const BitTorrrentQueueItem = ({ torrent, app }: TorrentQueueItemProps) =>
- {width > MIN_WIDTH_MOBILE && ( + {theme.fn.largerThan('xs') && ( )} - {width > MIN_WIDTH_MOBILE && ( + {theme.fn.largerThan('xs') && ( )} - {width > MIN_WIDTH_MOBILE && ( + {theme.fn.largerThan('xs') && ( diff --git a/src/widgets/torrent/TorrentTile.tsx b/src/widgets/torrent/TorrentTile.tsx index eaf7c8ee9..2a6c6f70d 100644 --- a/src/widgets/torrent/TorrentTile.tsx +++ b/src/widgets/torrent/TorrentTile.tsx @@ -9,7 +9,6 @@ import { Table, Text, Title, - useMantineTheme, } from '@mantine/core'; import { useElementSize } from '@mantine/hooks'; import { IconFileDownload } from '@tabler/icons'; @@ -17,6 +16,7 @@ import dayjs from 'dayjs'; import duration from 'dayjs/plugin/duration'; import relativeTime from 'dayjs/plugin/relativeTime'; import { useTranslation } from 'next-i18next'; +import { MIN_WIDTH_MOBILE } from '../../constants/constants'; import { useGetDownloadClientsQueue } from '../../hooks/widgets/download-speed/useGetNetworkSpeed'; import { NormalizedDownloadQueueResponse } from '../../types/api/downloads/queue/NormalizedDownloadQueueResponse'; import { AppIntegrationType } from '../../types/app'; @@ -59,7 +59,6 @@ interface TorrentTileProps { function TorrentTile({ widget }: TorrentTileProps) { const { t } = useTranslation('modules/torrents-status'); - const MIN_WIDTH_MOBILE = useMantineTheme().breakpoints.xs; const { width } = useElementSize(); const { diff --git a/src/widgets/useNet/UseNetTile.tsx b/src/widgets/useNet/UseNetTile.tsx index 832b8d2d7..97139d899 100644 --- a/src/widgets/useNet/UseNetTile.tsx +++ b/src/widgets/useNet/UseNetTile.tsx @@ -1,14 +1,4 @@ -import { - Badge, - Button, - Group, - Select, - Stack, - Tabs, - Text, - Title, - useMantineTheme, -} from '@mantine/core'; +import { Badge, Button, Group, Select, Stack, Tabs, Text, Title } from '@mantine/core'; import { IconFileDownload, IconPlayerPause, IconPlayerPlay } from '@tabler/icons'; import { useEffect, useState } from 'react'; @@ -17,6 +7,7 @@ import dayjs from 'dayjs'; import duration from 'dayjs/plugin/duration'; import { useTranslation } from 'next-i18next'; import { useConfigContext } from '../../config/provider'; +import { MIN_WIDTH_MOBILE } from '../../constants/constants'; import { useGetUsenetInfo, usePauseUsenetQueue, @@ -46,7 +37,7 @@ const definition = defineWidget({ }, }); -export type IUsenetWidget = IWidget; +export type IUsenetWidget = IWidget<(typeof definition)['id'], typeof definition>; interface UseNetTileProps { widget: IUsenetWidget; @@ -59,7 +50,6 @@ function UseNetTile({ widget }: UseNetTileProps) { config?.apps.filter((x) => x.integration && downloadAppTypes.includes(x.integration.type)) ?? []; const { ref, width, height } = useElementSize(); - const MIN_WIDTH_MOBILE = useMantineTheme().breakpoints.xs; const [selectedAppId, setSelectedApp] = useState(downloadApps[0]?.id); const { data } = useGetUsenetInfo({ appId: selectedAppId! }); diff --git a/src/widgets/useNet/UsenetHistoryList.tsx b/src/widgets/useNet/UsenetHistoryList.tsx index 2578fdec6..6d2dbdae5 100644 --- a/src/widgets/useNet/UsenetHistoryList.tsx +++ b/src/widgets/useNet/UsenetHistoryList.tsx @@ -128,7 +128,7 @@ export const UsenetHistoryList: FunctionComponent = ({ a position="center" mt="md" total={totalPages} - page={page} + value={page} onChange={setPage} /> )} diff --git a/src/widgets/useNet/UsenetQueueList.tsx b/src/widgets/useNet/UsenetQueueList.tsx index aa3dc99e6..52e797ff5 100644 --- a/src/widgets/useNet/UsenetQueueList.tsx +++ b/src/widgets/useNet/UsenetQueueList.tsx @@ -35,7 +35,7 @@ const PAGE_SIZE = 13; export const UsenetQueueList: FunctionComponent = ({ appId }) => { const theme = useMantineTheme(); const { t } = useTranslation('modules/usenet'); - const progressbarBreakpoint = theme.breakpoints.xs; + const progressbarBreakpoint = parseInt(theme.breakpoints.xs, 10); const progressBreakpoint = 400; const sizeBreakpoint = 300; const { ref, width } = useElementSize(); @@ -177,7 +177,7 @@ export const UsenetQueueList: FunctionComponent = ({ appId size="sm" position="center" total={totalPages} - page={page} + value={page} onChange={setPage} /> )} diff --git a/src/widgets/weather/WeatherTile.tsx b/src/widgets/weather/WeatherTile.tsx index ba7b9eff7..b23731aa1 100644 --- a/src/widgets/weather/WeatherTile.tsx +++ b/src/widgets/weather/WeatherTile.tsx @@ -28,7 +28,7 @@ const definition = defineWidget({ component: WeatherTile, }); -export type IWeatherWidget = IWidget; +export type IWeatherWidget = IWidget<(typeof definition)['id'], typeof definition>; interface WeatherTileProps { widget: IWeatherWidget; diff --git a/src/widgets/weather/useWeatherForCity.ts b/src/widgets/weather/useWeatherForCity.ts index 3f21ebad6..be7a28ac0 100644 --- a/src/widgets/weather/useWeatherForCity.ts +++ b/src/widgets/weather/useWeatherForCity.ts @@ -20,7 +20,7 @@ export const useWeatherForCity = (cityName: string) => { const weatherQuery = useQuery({ queryKey: ['weather', { cityName }], queryFn: () => fetchWeather(city?.results[0]), - enabled: !!city, + enabled: Boolean(city), cacheTime: 1000 * 60 * 60 * 6, // the weather is cached for 6 hours staleTime: 1000 * 60 * 5, // the weather is considered stale after 5 minutes }); diff --git a/src/widgets/widgets.ts b/src/widgets/widgets.ts index d6559ed25..a5b6b9729 100644 --- a/src/widgets/widgets.ts +++ b/src/widgets/widgets.ts @@ -1,3 +1,4 @@ +import React from 'react'; import { MultiSelectProps, NumberInputProps, @@ -7,13 +8,14 @@ import { TextInputProps, } from '@mantine/core'; import { TablerIcon } from '@tabler/icons'; -import React from 'react'; + import { AreaType } from '../types/area'; import { ShapeType } from '../types/shape'; // Type of widgets which are saved to config export type IWidget = { - id: TKey; + id: string; + type: TKey; properties: { [key in keyof TDefinition['options']]: MakeLessSpecific< TDefinition['options'][key]['defaultValue'] @@ -36,7 +38,8 @@ export type IWidgetOptionValue = | ISliderInputOptionValue | ISelectOptionValue | INumberInputOptionValue - | IDraggableListInputValue; + | IDraggableListInputValue + | IMultipleTextInputOptionValue; // Interface for data type interface DataType { @@ -104,6 +107,13 @@ export type IDraggableListInputValue = { >; }; +// will show a text-input with a button to add a new line +export type IMultipleTextInputOptionValue = { + type: 'multiple-text'; + defaultValue: string[]; + inputProps?: Partial; +}; + // is used to type the widget definitions which will be used to display all widgets export type IWidgetDefinition = { id: TKey; diff --git a/tests/setupVitest.ts b/tests/setupVitest.ts new file mode 100644 index 000000000..6d1c12953 --- /dev/null +++ b/tests/setupVitest.ts @@ -0,0 +1,8 @@ +//setupVitest.js or similar file +import createFetchMock from 'vitest-fetch-mock'; +import { vi } from 'vitest'; + +const fetchMocker = createFetchMock(vi); + +// sets globalThis.fetch and globalThis.fetchMock to our mocked version +fetchMocker.enableMocks(); diff --git a/turbo.json b/turbo.json new file mode 100644 index 000000000..833e96950 --- /dev/null +++ b/turbo.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://turbo.build/schema.json", + "pipeline": { + "build": { + "outputs": [ + ".next/**", + "!.next/cache/**" + ] + } + } +} \ No newline at end of file diff --git a/vercel.json b/vercel.json new file mode 100644 index 000000000..77cfe5754 --- /dev/null +++ b/vercel.json @@ -0,0 +1,6 @@ +{ + "env": { + "EDIT_MODE_PASSWORD": "edit", + "DISABLE_EDIT_MODE": "TRUE" + } +} \ No newline at end of file diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 000000000..cd0baf83a --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,18 @@ +import react from '@vitejs/plugin-react'; + +import { defineConfig } from 'vitest/config'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + test: { + environment: 'happy-dom', + coverage: { + provider: 'c8', + reporter: ['html'], + all: true, + exclude: ['.next/', '.yarn/', 'data/'], + }, + setupFiles: ['./tests/setupVitest.ts'], + }, +}); diff --git a/yarn.lock b/yarn.lock index 2d3338ba5..40f71e19b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,7 +5,14 @@ __metadata: version: 6 cacheKey: 8 -"@ampproject/remapping@npm:^2.1.0": +"@adobe/css-tools@npm:^4.0.1": + version: 4.2.0 + resolution: "@adobe/css-tools@npm:4.2.0" + checksum: dc5cc92ba3d562e7ffddb79d6d222c7e00b65f255fd2725b3d71490ff268844be322f917415d8c4ab39eca646343b632058db8bd5b1d646193fcc94d1d3e420b + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.2.0": version: 2.2.0 resolution: "@ampproject/remapping@npm:2.2.0" dependencies: @@ -15,7 +22,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": version: 7.18.6 resolution: "@babel/code-frame@npm:7.18.6" dependencies: @@ -25,43 +32,44 @@ __metadata: linkType: hard "@babel/compat-data@npm:^7.20.5": - version: 7.20.14 - resolution: "@babel/compat-data@npm:7.20.14" - checksum: 6c9efe36232094e4ad0b70d165587f21ca718e5d011f7a52a77a18502a7524e90e2855aa5a2e086395bcfd21bd2c7c99128dcd8d9fdffe94316b72acf5c66f2c + version: 7.21.0 + resolution: "@babel/compat-data@npm:7.21.0" + checksum: dbf632c532f9c75ba0be7d1dc9f6cd3582501af52f10a6b90415d634ec5878735bd46064c91673b10317af94d4cc99c4da5bd9d955978cdccb7905fc33291e4d languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": - version: 7.20.12 - resolution: "@babel/core@npm:7.20.12" +"@babel/core@npm:^7.20.12": + version: 7.21.3 + resolution: "@babel/core@npm:7.21.3" dependencies: - "@ampproject/remapping": ^2.1.0 + "@ampproject/remapping": ^2.2.0 "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.7 + "@babel/generator": ^7.21.3 "@babel/helper-compilation-targets": ^7.20.7 - "@babel/helper-module-transforms": ^7.20.11 - "@babel/helpers": ^7.20.7 - "@babel/parser": ^7.20.7 + "@babel/helper-module-transforms": ^7.21.2 + "@babel/helpers": ^7.21.0 + "@babel/parser": ^7.21.3 "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.12 - "@babel/types": ^7.20.7 + "@babel/traverse": ^7.21.3 + "@babel/types": ^7.21.3 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.2 semver: ^6.3.0 - checksum: 62e6c3e2149a70b5c9729ef5f0d3e2e97e9dcde89fc039c8d8e3463d5d7ba9b29ee84d10faf79b61532ac1645aa62f2bd42338320617e6e3a8a4d8e2a27076e7 + checksum: bef25fbea96f461bf79bd1d0e4f0cdce679fd5ada464a89c1141ddba59ae1adfdbb23e04440c266ed525712d33d5ffd818cd8b0c25b1dee0e648d5559516153a languageName: node linkType: hard -"@babel/generator@npm:^7.20.7, @babel/generator@npm:^7.7.2": - version: 7.20.14 - resolution: "@babel/generator@npm:7.20.14" +"@babel/generator@npm:^7.21.3": + version: 7.21.3 + resolution: "@babel/generator@npm:7.21.3" dependencies: - "@babel/types": ^7.20.7 + "@babel/types": ^7.21.3 "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: 5f6aa2d86af26e76d276923a5c34191124a119b16ee9ccc34aef654a7dec84fbd7d2daed2e6458a6a06bf87f3661deb77c9fea59b8f67faff5c90793c96d76d6 + checksum: be6bb5a32a0273260b91210d4137b7b5da148a2db8dd324654275cb0af865ae59de5e1536e93ac83423b2586415059e1c24cf94293026755cf995757238da749 languageName: node linkType: hard @@ -87,13 +95,13 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-function-name@npm:7.19.0" +"@babel/helper-function-name@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-function-name@npm:7.21.0" dependencies: - "@babel/template": ^7.18.10 - "@babel/types": ^7.19.0 - checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + "@babel/template": ^7.20.7 + "@babel/types": ^7.21.0 + checksum: d63e63c3e0e3e8b3138fa47b0cd321148a300ef12b8ee951196994dcd2a492cc708aeda94c2c53759a5c9177fffaac0fd8778791286746f72a000976968daf4e languageName: node linkType: hard @@ -115,9 +123,9 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.20.11": - version: 7.20.11 - resolution: "@babel/helper-module-transforms@npm:7.20.11" +"@babel/helper-module-transforms@npm:^7.21.2": + version: 7.21.2 + resolution: "@babel/helper-module-transforms@npm:7.21.2" dependencies: "@babel/helper-environment-visitor": ^7.18.9 "@babel/helper-module-imports": ^7.18.6 @@ -125,13 +133,13 @@ __metadata: "@babel/helper-split-export-declaration": ^7.18.6 "@babel/helper-validator-identifier": ^7.19.1 "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.10 - "@babel/types": ^7.20.7 - checksum: 29319ebafa693d48756c6ba0d871677bb0037e0da084fbe221a17c38d57093fc8aa38543c07d76e788266a937976e37ab4901971ca7f237c5ab45f524b9ecca0 + "@babel/traverse": ^7.21.2 + "@babel/types": ^7.21.2 + checksum: 8a1c129a4f90bdf97d8b6e7861732c9580f48f877aaaafbc376ce2482febebcb8daaa1de8bc91676d12886487603f8c62a44f9e90ee76d6cac7f9225b26a49e1 languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.8.0": +"@babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2": version: 7.20.2 resolution: "@babel/helper-plugin-utils@npm:7.20.2" checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b @@ -171,20 +179,20 @@ __metadata: linkType: hard "@babel/helper-validator-option@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-validator-option@npm:7.18.6" - checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf + version: 7.21.0 + resolution: "@babel/helper-validator-option@npm:7.21.0" + checksum: 8ece4c78ffa5461fd8ab6b6e57cc51afad59df08192ed5d84b475af4a7193fc1cb794b59e3e7be64f3cdc4df7ac78bf3dbb20c129d7757ae078e6279ff8c2f07 languageName: node linkType: hard -"@babel/helpers@npm:^7.20.7": - version: 7.20.13 - resolution: "@babel/helpers@npm:7.20.13" +"@babel/helpers@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helpers@npm:7.21.0" dependencies: "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.13 - "@babel/types": ^7.20.7 - checksum: d62076fa834f342798f8c3fd7aec0870cc1725d273d99e540cbaa8d6c3ed10258228dd14601c8e66bfeabbb9424c3b31090ecc467fe855f7bd72c4734df7fb09 + "@babel/traverse": ^7.21.0 + "@babel/types": ^7.21.0 + checksum: 9370dad2bb665c551869a08ac87c8bdafad53dbcdce1f5c5d498f51811456a3c005d9857562715151a0f00b2e912ac8d89f56574f837b5689f5f5072221cdf54 languageName: node linkType: hard @@ -199,168 +207,47 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.13, @babel/parser@npm:^7.20.7": - version: 7.20.15 - resolution: "@babel/parser@npm:7.20.15" +"@babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.3": + version: 7.21.3 + resolution: "@babel/parser@npm:7.21.3" bin: parser: ./bin/babel-parser.js - checksum: 1d0f47ca67ff2652f1c0ff1570bed8deccbc4b53509e7cd73476af9cc7ed23480c99f1179bd6d0be01612368b92b39e206d330ad6054009d699934848a89298b + checksum: a71e6456a1260c2a943736b56cc0acdf5f2a53c6c79e545f56618967e51f9b710d1d3359264e7c979313a7153741b1d95ad8860834cc2ab4ce4f428b13cc07be languageName: node linkType: hard -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" +"@babel/plugin-transform-react-jsx-self@npm:^7.18.6": + version: 7.21.0 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.21.0" dependencies: - "@babel/helper-plugin-utils": ^7.8.0 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + checksum: 696f74c04a265409ccd46e333ff762e6011d394e6972128b5d97db4c1647289141bc7ebd45ab2bab99b60932f9793e8f89ee9432d3bde19962de2100456f6147 languageName: node linkType: hard -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.8.3": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": ^7.12.13 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.8.3": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.20.0 - resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" +"@babel/plugin-transform-react-jsx-source@npm:^7.19.6": + version: 7.19.6 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.19.6" dependencies: "@babel/helper-plugin-utils": ^7.19.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 + checksum: 1e9e29a4efc5b79840bd4f68e404f5ab7765ce48c7bd22f12f2b185f9c782c66933bdf54a1b21879e4e56e6b50b4e88aca82789ecb1f61123af6dfa9ab16c555 languageName: node linkType: hard -"@babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.14.5, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7": - version: 7.20.13 - resolution: "@babel/runtime@npm:7.20.13" +"@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, @babel/runtime@npm:^7.9.2": + version: 7.21.0 + resolution: "@babel/runtime@npm:7.21.0" dependencies: regenerator-runtime: ^0.13.11 - checksum: 09b7a97a05c80540db6c9e4ddf8c5d2ebb06cae5caf3a87e33c33f27f8c4d49d9c67a2d72f1570e796045288fad569f98a26ceba0c4f5fad2af84b6ad855c4fb + checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.20.7": version: 7.20.7 resolution: "@babel/template@npm:7.20.7" dependencies: @@ -371,32 +258,32 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.20.10, @babel/traverse@npm:^7.20.12, @babel/traverse@npm:^7.20.13, @babel/traverse@npm:^7.7.2": - version: 7.20.13 - resolution: "@babel/traverse@npm:7.20.13" +"@babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.3": + version: 7.21.3 + resolution: "@babel/traverse@npm:7.21.3" dependencies: "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.7 + "@babel/generator": ^7.21.3 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 + "@babel/helper-function-name": ^7.21.0 "@babel/helper-hoist-variables": ^7.18.6 "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.20.13 - "@babel/types": ^7.20.7 + "@babel/parser": ^7.21.3 + "@babel/types": ^7.21.3 debug: ^4.1.0 globals: ^11.1.0 - checksum: 30ca6e0bd18233fda48fa09315efd14dfc61dcf5b8fa3712b343bfc61b32bc63b5e85ea1773cc9576c9b293b96f46b4589aaeb0a52e1f3eeac4edc076d049fc7 + checksum: 0af5bcd47a2fc501592b90ac1feae9d449afb9ab0772a4f6e68230f4cd3a475795d538c1de3f880fe3414b6c2820bac84d02c6549eea796f39d74a603717447b languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": - version: 7.20.7 - resolution: "@babel/types@npm:7.20.7" +"@babel/types@npm:^7.18.6, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.21.3, @babel/types@npm:^7.8.3": + version: 7.21.3 + resolution: "@babel/types@npm:7.21.3" dependencies: "@babel/helper-string-parser": ^7.19.4 "@babel/helper-validator-identifier": ^7.19.1 to-fast-properties: ^2.0.0 - checksum: b39af241f0b72bba67fd6d0d23914f6faec8c0eba8015c181cbd5ea92e59fc91a52a1ab490d3520c7dbd19ddb9ebb76c476308f6388764f16d8201e37fae6811 + checksum: b750274718ba9cefd0b81836c464009bb6ba339fccce51b9baff497a0a2d96c044c61dc90cf203cec0adc770454b53a9681c3f7716883c802b85ab84c365ba35 languageName: node linkType: hard @@ -415,16 +302,16 @@ __metadata: linkType: hard "@ctrl/deluge@npm:^4.1.0": - version: 4.3.0 - resolution: "@ctrl/deluge@npm:4.3.0" + version: 4.3.1 + resolution: "@ctrl/deluge@npm:4.3.1" dependencies: "@ctrl/magnet-link": ^3.1.1 - "@ctrl/shared-torrent": ^4.3.1 + "@ctrl/shared-torrent": ^4.3.2 "@ctrl/url-join": ^2.0.2 formdata-node: ^5.0.0 - got: ^12.5.0 + got: ^12.6.0 tough-cookie: ^4.1.2 - checksum: d194c77286fc003b26b09ca4d40a2ca6e524868ce7eeac7ece7e22a192e55199ac0a557a36a507d3c652bd590b60f3d78e80238076a2417cd0727327dabc23c1 + checksum: ef933db28369a5c35efb98964c89dff4cc4c0762ed1f8085da38834276b4b8593bf5d74da94ded31ab77835bf866ce29df9bc904b8242285a10b6fbb2e3fe1fe languageName: node linkType: hard @@ -452,7 +339,7 @@ __metadata: languageName: node linkType: hard -"@ctrl/shared-torrent@npm:^4.1.1, @ctrl/shared-torrent@npm:^4.3.1": +"@ctrl/shared-torrent@npm:^4.1.1, @ctrl/shared-torrent@npm:^4.3.1, @ctrl/shared-torrent@npm:^4.3.2": version: 4.3.2 resolution: "@ctrl/shared-torrent@npm:4.3.2" dependencies: @@ -558,7 +445,7 @@ __metadata: languageName: node linkType: hard -"@emotion/react@npm:^11.10.5": +"@emotion/react@npm:^11.10.6": version: 11.10.6 resolution: "@emotion/react@npm:11.10.6" dependencies: @@ -646,36 +533,215 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^1.4.1": - version: 1.4.1 - resolution: "@eslint/eslintrc@npm:1.4.1" +"@esbuild/android-arm64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/android-arm64@npm:0.17.14" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/android-arm@npm:0.17.14" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/android-x64@npm:0.17.14" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/darwin-arm64@npm:0.17.14" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/darwin-x64@npm:0.17.14" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/freebsd-arm64@npm:0.17.14" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/freebsd-x64@npm:0.17.14" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-arm64@npm:0.17.14" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-arm@npm:0.17.14" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-ia32@npm:0.17.14" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-loong64@npm:0.17.14" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-mips64el@npm:0.17.14" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-ppc64@npm:0.17.14" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-riscv64@npm:0.17.14" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-s390x@npm:0.17.14" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/linux-x64@npm:0.17.14" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/netbsd-x64@npm:0.17.14" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/openbsd-x64@npm:0.17.14" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/sunos-x64@npm:0.17.14" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/win32-arm64@npm:0.17.14" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/win32-ia32@npm:0.17.14" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.17.14": + version: 0.17.14 + resolution: "@esbuild/win32-x64@npm:0.17.14" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.4.0": + version: 4.5.0 + resolution: "@eslint-community/regexpp@npm:4.5.0" + checksum: 99c01335947dbd7f2129e954413067e217ccaa4e219fe0917b7d2bd96135789384b8fedbfb8eb09584d5130b27a7b876a7150ab7376f51b3a0c377d5ce026a10 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.0.2": + version: 2.0.2 + resolution: "@eslint/eslintrc@npm:2.0.2" dependencies: ajv: ^6.12.4 debug: ^4.3.2 - espree: ^9.4.0 + espree: ^9.5.1 globals: ^13.19.0 ignore: ^5.2.0 import-fresh: ^3.2.1 js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: cd3e5a8683db604739938b1c1c8b77927dc04fce3e28e0c88e7f2cd4900b89466baf83dfbad76b2b9e4d2746abdd00dd3f9da544d3e311633d8693f327d04cd7 + checksum: cfcf5e12c7b2c4476482e7f12434e76eae16fcd163ee627309adb10b761e5caa4a4e52ed7be464423320ff3d11eca5b50de5bf8be3e25834222470835dd5c801 languageName: node linkType: hard -"@floating-ui/core@npm:^1.2.1": - version: 1.2.1 - resolution: "@floating-ui/core@npm:1.2.1" - checksum: 7a263e15abad4cd98ce3938075c90f76bafef71c67964c83dd7cf1e1916c92ccfa46a4f2b95b403bb180f70b3e7ded118db1cbc3426269ec70e948edf0d19ae2 +"@eslint/js@npm:8.37.0": + version: 8.37.0 + resolution: "@eslint/js@npm:8.37.0" + checksum: 7a07fb085c94ce1538949012c292fd3a6cd734f149bc03af6157dfbd8a7477678899ef57b4a27e15b36470a997389ad79a0533d5880c71e67720ae1a7de7c62d + languageName: node + linkType: hard + +"@floating-ui/core@npm:^1.2.4": + version: 1.2.5 + resolution: "@floating-ui/core@npm:1.2.5" + checksum: 6cda151bb098e0dbd5ac0db141715e00879bf08b21553a8895232ccf429d774e30019295b5a6d2da19dd927a34540fb49b55d926b82820e6002eac7b97405f76 languageName: node linkType: hard "@floating-ui/dom@npm:^1.2.1": - version: 1.2.1 - resolution: "@floating-ui/dom@npm:1.2.1" + version: 1.2.5 + resolution: "@floating-ui/dom@npm:1.2.5" dependencies: - "@floating-ui/core": ^1.2.1 - checksum: ad6928d5dd934ca8b3dcffdfcacde9d147afc0db4db0c0294b23d5f897224d73c7f0ae578b46d813f0d7ae22a86e7a3f8914fdbcdf4a8d42a1b430d0518f45be + "@floating-ui/core": ^1.2.4 + checksum: a21c272a36c7cd7d337eaed82c1f8a81ccc5003d04cefa07591dc7fbb0a24d57a2c097b410593b5416145a68ac10a7a7a745c3cc4f8196268fa002364d28804b languageName: node linkType: hard @@ -737,20 +803,7 @@ __metadata: languageName: node linkType: hard -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: ^5.3.1 - find-up: ^4.1.0 - get-package-type: ^0.1.0 - js-yaml: ^3.13.1 - resolve-from: ^5.0.0 - checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2": +"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": version: 0.1.3 resolution: "@istanbuljs/schema@npm:0.1.3" checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 @@ -767,234 +820,35 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/console@npm:28.1.3" +"@jest/expect-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/expect-utils@npm:29.5.0" dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - slash: ^3.0.0 - checksum: fe50d98d26d02ce2901c76dff4bd5429a33c13affb692c9ebf8a578ca2f38a5dd854363d40d6c394f215150791fd1f692afd8e730a4178dda24107c8dfd9750a + jest-get-type: ^29.4.3 + checksum: c46fb677c88535cf83cf29f0a5b1f376c6a1109ddda266ad7da1a9cbc53cb441fa402dd61fc7b111ffc99603c11a9b3357ee41a1c0e035a58830bcb360871476 languageName: node linkType: hard -"@jest/core@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/core@npm:28.1.3" +"@jest/schemas@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/schemas@npm:29.4.3" dependencies: - "@jest/console": ^28.1.3 - "@jest/reporters": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - ci-info: ^3.2.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-changed-files: ^28.1.3 - jest-config: ^28.1.3 - jest-haste-map: ^28.1.3 - jest-message-util: ^28.1.3 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.3 - jest-resolve-dependencies: ^28.1.3 - jest-runner: ^28.1.3 - jest-runtime: ^28.1.3 - jest-snapshot: ^28.1.3 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - jest-watcher: ^28.1.3 - micromatch: ^4.0.4 - pretty-format: ^28.1.3 - rimraf: ^3.0.0 - slash: ^3.0.0 - strip-ansi: ^6.0.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: cb79f34bafc4637e7130df12257f5b29075892a2be2c7f45c6d4c0420853e80b5dae11016e652530eb234f4c44c00910cdca3c2cd86275721860725073f7d9b4 + "@sinclair/typebox": ^0.25.16 + checksum: ac754e245c19dc39e10ebd41dce09040214c96a4cd8efa143b82148e383e45128f24599195ab4f01433adae4ccfbe2db6574c90db2862ccd8551a86704b5bebd languageName: node linkType: hard -"@jest/environment@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/environment@npm:28.1.3" +"@jest/types@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/types@npm:29.5.0" dependencies: - "@jest/fake-timers": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - jest-mock: ^28.1.3 - checksum: 14c496b84aef951df33128cea68988e9de43b2e9d62be9f9c4308d4ac307fa345642813679f80d0a4cedeb900cf6f0b6bb2b92ce089528e8721f72295fdc727f - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect-utils@npm:28.1.3" - dependencies: - jest-get-type: ^28.0.2 - checksum: 808ea3a68292a7e0b95490fdd55605c430b4cf209ea76b5b61bfb2a1badcb41bc046810fe4e364bd5fe04663978aa2bd73d8f8465a761dd7c655aeb44cf22987 - languageName: node - linkType: hard - -"@jest/expect@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect@npm:28.1.3" - dependencies: - expect: ^28.1.3 - jest-snapshot: ^28.1.3 - checksum: 4197f6fdddc33dc45ba4e838f992fc61839c421d7aed0dfe665ef9c2f172bb1df8a8cac9cecee272b40e744a326da521d5e182709fe82a0b936055bfffa3b473 - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/fake-timers@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@sinonjs/fake-timers": ^9.1.2 - "@types/node": "*" - jest-message-util: ^28.1.3 - jest-mock: ^28.1.3 - jest-util: ^28.1.3 - checksum: cec14d5b14913a54dce64a62912c5456235f5d90b509ceae19c727565073114dae1aaf960ac6be96b3eb94789a3a758b96b72c8fca7e49a6ccac415fbc0321e1 - languageName: node - linkType: hard - -"@jest/globals@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/globals@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/expect": ^28.1.3 - "@jest/types": ^28.1.3 - checksum: 3504bb23de629d466c6f2b6b75d2e1c1b10caccbbcfb7eaa82d22cc37711c8e364c243929581184846605c023b475ea6c42c2e3ea5994429a988d8d527af32cd - languageName: node - linkType: hard - -"@jest/reporters@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/reporters@npm:28.1.3" - dependencies: - "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - "@jridgewell/trace-mapping": ^0.3.13 - "@types/node": "*" - chalk: ^4.0.0 - collect-v8-coverage: ^1.0.0 - exit: ^0.1.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^5.1.0 - istanbul-lib-report: ^3.0.0 - istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - jest-worker: ^28.1.3 - slash: ^3.0.0 - string-length: ^4.0.1 - strip-ansi: ^6.0.0 - terminal-link: ^2.0.0 - v8-to-istanbul: ^9.0.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: a7440887ce837922cbeaa64c3232eb48aae02aa9123f29fc4280ad3e1afe4b35dcba171ba1d5fd219037c396c5152d9c2d102cff1798dd5ae3bd33ac4759ae0a - languageName: node - linkType: hard - -"@jest/schemas@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/schemas@npm:28.1.3" - dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de - languageName: node - linkType: hard - -"@jest/source-map@npm:^28.1.2": - version: 28.1.2 - resolution: "@jest/source-map@npm:28.1.2" - dependencies: - "@jridgewell/trace-mapping": ^0.3.13 - callsites: ^3.0.0 - graceful-fs: ^4.2.9 - checksum: b82a5c2e93d35d86779c61a02ccb967d1b5cd2e9dd67d26d8add44958637cbbb99daeeb8129c7653389cb440dc2a2f5ae4d2183dc453c67669ff98938b775a3a - languageName: node - linkType: hard - -"@jest/test-result@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/test-result@npm:28.1.3" - dependencies: - "@jest/console": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: 957a5dd2fd2e84aabe86698f93c0825e96128ccaa23abf548b159a9b08ac74e4bde7acf4bec48479243dbdb27e4ea1b68c171846d21fb64855c6b55cead9ef27 - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/test-sequencer@npm:28.1.3" - dependencies: - "@jest/test-result": ^28.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - slash: ^3.0.0 - checksum: 13f8905e6d1ec8286694146f7be3cf90eff801bbdea5e5c403e6881444bb390ed15494c7b9948aa94bd7e9c9a851e0d3002ed6e7371d048b478596e5b23df953 - languageName: node - linkType: hard - -"@jest/transform@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/transform@npm:28.1.3" - dependencies: - "@babel/core": ^7.11.6 - "@jest/types": ^28.1.3 - "@jridgewell/trace-mapping": ^0.3.13 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - jest-regex-util: ^28.0.2 - jest-util: ^28.1.3 - micromatch: ^4.0.4 - pirates: ^4.0.4 - slash: ^3.0.0 - write-file-atomic: ^4.0.1 - checksum: dadf618936e0aa84342f07f532801d5bed43cdf95d1417b929e4f8782c872cff1adc84096d5a287a796d0039a2691c06d8450cce5a713a8b52fbb9f872a1e760 - languageName: node - linkType: hard - -"@jest/types@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/types@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.3 + "@jest/schemas": ^29.4.3 "@types/istanbul-lib-coverage": ^2.0.0 "@types/istanbul-reports": ^3.0.0 "@types/node": "*" "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: 1e258d9c063fcf59ebc91e46d5ea5984674ac7ae6cae3e50aa780d22b4405bf2c925f40350bf30013839eb5d4b5e521d956ddf8f3b7c78debef0e75a07f57350 + checksum: 1811f94b19cf8a9460a289c4f056796cfc373480e0492692a6125a553cd1a63824bd846d7bb78820b7b6f758f6dd3c2d4558293bb676d541b2fa59c70fdf9d39 languageName: node linkType: hard @@ -1033,14 +887,14 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": +"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13": version: 1.4.14 resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.17 resolution: "@jridgewell/trace-mapping@npm:0.3.17" dependencies: @@ -1050,134 +904,135 @@ __metadata: languageName: node linkType: hard -"@mantine/core@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/core@npm:5.10.4" +"@mantine/core@npm:^6.0.0": + version: 6.0.5 + resolution: "@mantine/core@npm:6.0.5" dependencies: "@floating-ui/react": ^0.19.1 - "@mantine/styles": 5.10.4 - "@mantine/utils": 5.10.4 + "@mantine/styles": 6.0.5 + "@mantine/utils": 6.0.5 "@radix-ui/react-scroll-area": 1.0.2 + react-remove-scroll: ^2.5.5 react-textarea-autosize: 8.3.4 peerDependencies: - "@mantine/hooks": 5.10.4 + "@mantine/hooks": 6.0.5 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 98cba720fa9764a7a45b13d167ad2dce1af1b639c202a25cf60c8ca439e386dfddefae262e770df62348af90647ba6cbc095c074a8f0582968059450fbbc2ff0 + checksum: 3192610907952ecd02ceded8f5979b594eedc6ef149bc17656c66bc8ad553454867bb7a3fe8c206ed628ba149dc4a7733c0e316eb50d0069cf8bc6169582b75c languageName: node linkType: hard -"@mantine/dates@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/dates@npm:5.10.4" +"@mantine/dates@npm:^6.0.0": + version: 6.0.5 + resolution: "@mantine/dates@npm:6.0.5" dependencies: - "@mantine/utils": 5.10.4 + "@mantine/utils": 6.0.5 peerDependencies: - "@mantine/core": 5.10.4 - "@mantine/hooks": 5.10.4 + "@mantine/core": 6.0.5 + "@mantine/hooks": 6.0.5 dayjs: ">=1.0.0" react: ">=16.8.0" - checksum: 14a32aa4c16e030266629dfc5171e930d271682de742541b2298d448df11c9fab40e1d8003eabccfd5449a65ef14681993af6426197da4dcad1f509fb9fff932 + checksum: 9b50a4d1c527602633a356d02739a0f798b1da92b9eb2e1ed095732aeab9a4a136c0a014df35edc586a78e9721eabd4979d6cea1befaaf8d49d0ee2f7eb5c175 languageName: node linkType: hard -"@mantine/dropzone@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/dropzone@npm:5.10.4" +"@mantine/dropzone@npm:^6.0.0": + version: 6.0.5 + resolution: "@mantine/dropzone@npm:6.0.5" dependencies: - "@mantine/utils": 5.10.4 + "@mantine/utils": 6.0.5 react-dropzone: 14.2.3 peerDependencies: - "@mantine/core": 5.10.4 - "@mantine/hooks": 5.10.4 + "@mantine/core": 6.0.5 + "@mantine/hooks": 6.0.5 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 0b837b5bc7c982ad9832142c880c1b0f2827de5c2163b76895cac2dbe6204f7c67e466468a3fb00f72482bad957c4b1209820025c4dfc2c25650734df79e208b + checksum: d5063297b0042d05519427fab145c1f47f3e20ba5bcf71546f504dad512d418fe5f0ed08e0c3118c9c5ce727fb33cda81946659c38c1e34af4d1a0d8fbfc86e1 languageName: node linkType: hard -"@mantine/form@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/form@npm:5.10.4" +"@mantine/form@npm:^6.0.0": + version: 6.0.5 + resolution: "@mantine/form@npm:6.0.5" dependencies: fast-deep-equal: ^3.1.3 klona: ^2.0.5 peerDependencies: react: ">=16.8.0" - checksum: 00ebc0011981f8dae5e96e833f7e0102067a7bc38b1f6208b377f029fdc8bb703a492f40a688eb015dea3147c3b6e5a7cd26c584b93cc8d2567f0dcb10319759 + checksum: 49af767bdd5598953a30d55aea6f9eadbcda95df78db32c209e576a489469a0d86eefa155ed6199c662f2a8ab2a9bd05eb7ac1fb255b3c06d40f720fa5ea01d0 languageName: node linkType: hard -"@mantine/hooks@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/hooks@npm:5.10.4" +"@mantine/hooks@npm:^6.0.0": + version: 6.0.5 + resolution: "@mantine/hooks@npm:6.0.5" peerDependencies: react: ">=16.8.0" - checksum: 41ededb62ea9311303e4b8d577ec21c12ddb339e60e70c3a1f561cb1b2c66fb6e6f29a7a23a89322748779cc06797de749203afd546f2b13180781c0e2873fa6 + checksum: 2f8a1f155bf5e457484282d1ee1ab6e8d3356f48b01291820f828ac7978c8f960d711a576b4636753e604e4058e241b210f348e32adb2960be22aee84137ab63 languageName: node linkType: hard -"@mantine/modals@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/modals@npm:5.10.4" +"@mantine/modals@npm:^6.0.0": + version: 6.0.5 + resolution: "@mantine/modals@npm:6.0.5" dependencies: - "@mantine/utils": 5.10.4 + "@mantine/utils": 6.0.5 peerDependencies: - "@mantine/core": 5.10.4 - "@mantine/hooks": 5.10.4 + "@mantine/core": 6.0.5 + "@mantine/hooks": 6.0.5 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 82fce48fffbbce11526212b994e2763f0b36a276a86385f5b9ac1b5f1226f39f3f12aa171fe8b9181b755f95dbb869ef88f339e620bfd0ec28b7b0017f6b7fa7 + checksum: 1e78a8ef68db0a62a0a348b3a54cccacff4b700c095f1492c8f2f01e17dc138767e2e88eda0a81c4d39258691926cf83456b99c4de73d06578881e9f483bc147 languageName: node linkType: hard -"@mantine/next@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/next@npm:5.10.4" +"@mantine/next@npm:^6.0.0": + version: 6.0.5 + resolution: "@mantine/next@npm:6.0.5" dependencies: - "@mantine/ssr": 5.10.4 - "@mantine/styles": 5.10.4 + "@mantine/ssr": 6.0.5 + "@mantine/styles": 6.0.5 peerDependencies: next: "*" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 344590d09cfef4194187f7ea430082d9f22379e264b04fa3a9261a137abf9b1e4681eb7c610b678822b2ad3001f5611e201a73a4612ee8b13d93460d68a28b0c + checksum: de5768668e63a19f879a9b87e8df52e74ab80f3e53ea01935f0771ed56fd386ee8209735beecd898bf57c83df3de82a1e0dd821049a7604b85f8f431880d1cf9 languageName: node linkType: hard -"@mantine/notifications@npm:^5.9.3": - version: 5.10.4 - resolution: "@mantine/notifications@npm:5.10.4" +"@mantine/notifications@npm:^6.0.0": + version: 6.0.5 + resolution: "@mantine/notifications@npm:6.0.5" dependencies: - "@mantine/utils": 5.10.4 + "@mantine/utils": 6.0.5 react-transition-group: 4.4.2 peerDependencies: - "@mantine/core": 5.10.4 - "@mantine/hooks": 5.10.4 + "@mantine/core": 6.0.5 + "@mantine/hooks": 6.0.5 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: da439698331f09dd1f3efaa470df1f9717f7309c2a61b0bfaa14bd832185fbd0711fbaffe867b0d6978108db30d059909b59c2b7c0ed83d1bd55bc8b7a6d3e7f + checksum: e39083e7d019f4d51de55e21406d2f601e08ee3450504829d4c15afac687eb2229741ad4d505b6868cba880f0f5d28715bc151b16cb575363d7eb94b74b2db48 languageName: node linkType: hard -"@mantine/ssr@npm:5.10.4": - version: 5.10.4 - resolution: "@mantine/ssr@npm:5.10.4" +"@mantine/ssr@npm:6.0.5": + version: 6.0.5 + resolution: "@mantine/ssr@npm:6.0.5" dependencies: - "@mantine/styles": 5.10.4 + "@mantine/styles": 6.0.5 html-react-parser: 1.4.12 peerDependencies: "@emotion/react": ">=11.9.0" "@emotion/server": ">=11.4.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 74e5c56b85ea731597aba876941086306abb5ae24faa86d37a5210cfd743aa164e97b29e547563f810ef92b51b3c90bd02ce1a39fbee84cbec2abd2e6ad45ca7 + checksum: d5546bc47df8cdaa059e03680c64f0a75551b77515e1dc0fce1b083043e10881e00dc968782b4a57efffa6e6e1288b008a578ee3223e79b87e76699ceca6a4ca languageName: node linkType: hard -"@mantine/styles@npm:5.10.4": - version: 5.10.4 - resolution: "@mantine/styles@npm:5.10.4" +"@mantine/styles@npm:6.0.5": + version: 6.0.5 + resolution: "@mantine/styles@npm:6.0.5" dependencies: clsx: 1.1.1 csstype: 3.0.9 @@ -1185,81 +1040,16 @@ __metadata: "@emotion/react": ">=11.9.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 54af835dca68a457be758570c82eab2d602da19a24da599b2f2c02f451be136a400b2f8efbbdc7d1a677188b57515d3ace23df0b8aa8e37c4ddf3a2fdbce1630 + checksum: 074012e4899516cd701dbfa032c5eb9865f6a1460fc6ebdfb934d703283a0e9229b18f93ef54d8e9127ba63390e46429cf51a1fbea6ddb77cc1f815d36072797 languageName: node linkType: hard -"@mantine/utils@npm:5.10.4": - version: 5.10.4 - resolution: "@mantine/utils@npm:5.10.4" +"@mantine/utils@npm:6.0.5": + version: 6.0.5 + resolution: "@mantine/utils@npm:6.0.5" peerDependencies: react: ">=16.8.0" - checksum: 96e2602f8500c29b5979d4fe0b3456c8de911ff1bd2ef216d960b23a5370ff6828871aa859538a4004ad095fb63d7e0e76cdfb365bdb930f70f8076d730302c1 - languageName: node - linkType: hard - -"@motionone/animation@npm:^10.15.1": - version: 10.15.1 - resolution: "@motionone/animation@npm:10.15.1" - dependencies: - "@motionone/easing": ^10.15.1 - "@motionone/types": ^10.15.1 - "@motionone/utils": ^10.15.1 - tslib: ^2.3.1 - checksum: 75b7a1e6c47c27073a578eb5559ea0a6e7075862c72e1eb1598403c8c2725f596a95b0369514c9e72f3c7439a9845c468b85a14d4e500df48e09d01b0739d4a7 - languageName: node - linkType: hard - -"@motionone/dom@npm:^10.15.3": - version: 10.15.5 - resolution: "@motionone/dom@npm:10.15.5" - dependencies: - "@motionone/animation": ^10.15.1 - "@motionone/generators": ^10.15.1 - "@motionone/types": ^10.15.1 - "@motionone/utils": ^10.15.1 - hey-listen: ^1.0.8 - tslib: ^2.3.1 - checksum: 2453fe3df6a2b4b339d075bcd598bda1eee1926ba0ad881edfd154362b0992c91f31c08d83c469c7e8cb8bf8ebc0ed5530972673cf5c74d99e46e3772cf5f1cb - languageName: node - linkType: hard - -"@motionone/easing@npm:^10.15.1": - version: 10.15.1 - resolution: "@motionone/easing@npm:10.15.1" - dependencies: - "@motionone/utils": ^10.15.1 - tslib: ^2.3.1 - checksum: cf7cfcf9917525d892334c58282425aafc69d9ab9004c190bfa7cf91317a680e8143f227adc79557424e7f26cdf8478dcbb2ae467e744cebc58195d6f0b8153a - languageName: node - linkType: hard - -"@motionone/generators@npm:^10.15.1": - version: 10.15.1 - resolution: "@motionone/generators@npm:10.15.1" - dependencies: - "@motionone/types": ^10.15.1 - "@motionone/utils": ^10.15.1 - tslib: ^2.3.1 - checksum: 0eb6797a64d536bb5c26628343d6594a2ebc45c3c447b8ce442b4ac3a41be847b860ac009bda7968fc7d339d2ee49b18bfe36306c5dd99cf17c7d84c82de93f3 - languageName: node - linkType: hard - -"@motionone/types@npm:^10.15.1": - version: 10.15.1 - resolution: "@motionone/types@npm:10.15.1" - checksum: 98091f7dca257508d94d1080678c433da39a814e8e58aaa742212bf6c2a5b5e2120a6251a06e3ea522219ce6d1b6eb6aa2cab224b803fe52789033d8398ef0aa - languageName: node - linkType: hard - -"@motionone/utils@npm:^10.15.1": - version: 10.15.1 - resolution: "@motionone/utils@npm:10.15.1" - dependencies: - "@motionone/types": ^10.15.1 - hey-listen: ^1.0.8 - tslib: ^2.3.1 - checksum: 6ef13cd6637ec87c340e5536f849f8c40d30cc90139a3856d11cd70d78e3740f8815b0e63564fefd23c05a060da7a0ea5395390549606ed8801a7b832b74e04e + checksum: cdaeb818b40f63136ccdcd3572866c681ad881b5a2dfa790c259f72a133a849678914e8a3b9fb146dab27e1494394a1c6fbb3a497ae767ddb884fd37eff2de50 languageName: node linkType: hard @@ -1272,10 +1062,10 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:13.1.6": - version: 13.1.6 - resolution: "@next/env@npm:13.1.6" - checksum: 0f911a18f0b3372007632fffa87f5d7f802c00d07b3bf757d2d09574735ae43f60000ecdf64b6f06e195971c508c2bcee82dd1e3aab27a08a4300eb0317652bb +"@next/env@npm:13.2.4": + version: 13.2.4 + resolution: "@next/env@npm:13.2.4" + checksum: 4123e08a79e66d6144006972027a9ceb8f3fdd782c4a869df1eb3b91b59ad9f4a44082d3f8e421f4df5214c6bc7190b52b94881369452d65eb4580485f33b9e6 languageName: node linkType: hard @@ -1288,93 +1078,93 @@ __metadata: languageName: node linkType: hard -"@next/swc-android-arm-eabi@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-android-arm-eabi@npm:13.1.6" +"@next/swc-android-arm-eabi@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-android-arm-eabi@npm:13.2.4" conditions: os=android & cpu=arm languageName: node linkType: hard -"@next/swc-android-arm64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-android-arm64@npm:13.1.6" +"@next/swc-android-arm64@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-android-arm64@npm:13.2.4" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-darwin-arm64@npm:13.1.6" +"@next/swc-darwin-arm64@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-darwin-arm64@npm:13.2.4" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-darwin-x64@npm:13.1.6" +"@next/swc-darwin-x64@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-darwin-x64@npm:13.2.4" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-freebsd-x64@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-freebsd-x64@npm:13.1.6" +"@next/swc-freebsd-x64@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-freebsd-x64@npm:13.2.4" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm-gnueabihf@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-arm-gnueabihf@npm:13.1.6" +"@next/swc-linux-arm-gnueabihf@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-linux-arm-gnueabihf@npm:13.2.4" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-arm64-gnu@npm:13.1.6" +"@next/swc-linux-arm64-gnu@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-linux-arm64-gnu@npm:13.2.4" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-arm64-musl@npm:13.1.6" +"@next/swc-linux-arm64-musl@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-linux-arm64-musl@npm:13.2.4" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-x64-gnu@npm:13.1.6" +"@next/swc-linux-x64-gnu@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-linux-x64-gnu@npm:13.2.4" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-linux-x64-musl@npm:13.1.6" +"@next/swc-linux-x64-musl@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-linux-x64-musl@npm:13.2.4" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-win32-arm64-msvc@npm:13.1.6" +"@next/swc-win32-arm64-msvc@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-win32-arm64-msvc@npm:13.2.4" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-ia32-msvc@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-win32-ia32-msvc@npm:13.1.6" +"@next/swc-win32-ia32-msvc@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-win32-ia32-msvc@npm:13.2.4" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:13.1.6": - version: 13.1.6 - resolution: "@next/swc-win32-x64-msvc@npm:13.1.6" +"@next/swc-win32-x64-msvc@npm:13.2.4": + version: 13.2.4 + resolution: "@next/swc-win32-x64-msvc@npm:13.2.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -1713,6 +1503,17 @@ __metadata: languageName: node linkType: hard +"@react-native-async-storage/async-storage@npm:^1.18.1": + version: 1.18.1 + resolution: "@react-native-async-storage/async-storage@npm:1.18.1" + dependencies: + merge-options: ^3.0.4 + peerDependencies: + react-native: ^0.0.0-0 || 0.60 - 0.72 || 1000.0.0 + checksum: 58c8497fafdd4d112c4a70b0976783abdc6fa487f0cffca196901efd146fc838dee0cf498fdc4ef67a4634ba4ca97d60fec5a24720aea1d46f1999b0ba8b249b + languageName: node + linkType: hard + "@react-spring/animated@npm:~9.4.5": version: 9.4.5 resolution: "@react-spring/animated@npm:9.4.5" @@ -1780,10 +1581,10 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.24.1": - version: 0.24.51 - resolution: "@sinclair/typebox@npm:0.24.51" - checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 +"@sinclair/typebox@npm:^0.25.16": + version: 0.25.24 + resolution: "@sinclair/typebox@npm:0.25.24" + checksum: 10219c58f40b8414c50b483b0550445e9710d4fe7b2c4dccb9b66533dd90ba8e024acc776026cebe81e87f06fa24b07fdd7bc30dd277eb9cc386ec50151a3026 languageName: node linkType: hard @@ -1801,24 +1602,6 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^1.7.0": - version: 1.8.6 - resolution: "@sinonjs/commons@npm:1.8.6" - dependencies: - type-detect: 4.0.8 - checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^9.1.2": - version: 9.1.2 - resolution: "@sinonjs/fake-timers@npm:9.1.2" - dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6 - languageName: node - linkType: hard - "@swc/helpers@npm:0.4.14": version: 0.4.14 resolution: "@swc/helpers@npm:0.4.14" @@ -1862,41 +1645,79 @@ __metadata: linkType: hard "@tanstack/match-sorter-utils@npm:^8.7.0": - version: 8.7.6 - resolution: "@tanstack/match-sorter-utils@npm:8.7.6" + version: 8.8.4 + resolution: "@tanstack/match-sorter-utils@npm:8.8.4" dependencies: remove-accents: 0.4.2 - checksum: 3f3dda277e6e55ca1224a28b38a2deb3ac912c2f2f5263a32fa0d9126c6b6d05feb475539729fd248f1eb88b612109db90b847ec8fdfc05d0f4073c900a2d3f6 + checksum: d005f500754f52ef94966cbbe4217f26e7e3c07291faa2578b06bca9a5abe01689569994c37a1d01c6e783addf5ffbb28fa82eba7961d36eabf43ec43d1e496b languageName: node linkType: hard -"@tanstack/query-core@npm:4.24.6": - version: 4.24.6 - resolution: "@tanstack/query-core@npm:4.24.6" - checksum: 495dff04f27d72174051f97676fce0fbe322bca966edb7f174f0005a3363ac0300c31eb06255dafa7ee519a430840542379f5ec9f6846903b6bb878e46c33656 +"@tanstack/query-async-storage-persister@npm:^4.27.1": + version: 4.27.1 + resolution: "@tanstack/query-async-storage-persister@npm:4.27.1" + dependencies: + "@tanstack/query-persist-client-core": 4.27.0 + checksum: f98da672c6a61c65a58dc3d1b6e4416800bbd61747f806cc8cfceecb9f8bf4fa6be4133036f0b2efd5177e6f93031bb84e2ee53d888e9d6c34cc11f8aede97f4 + languageName: node + linkType: hard + +"@tanstack/query-core@npm:4.27.0": + version: 4.27.0 + resolution: "@tanstack/query-core@npm:4.27.0" + checksum: 914b4f01ac75632f4603b650e9105f64c739b79250baf76aad16cee216f7bad6060c04eda0c70838fe61a5f6c17883e19fcc3075b2433a906539da95ce785796 + languageName: node + linkType: hard + +"@tanstack/query-persist-client-core@npm:4.27.0": + version: 4.27.0 + resolution: "@tanstack/query-persist-client-core@npm:4.27.0" + dependencies: + "@tanstack/query-core": 4.27.0 + checksum: 9a2df41744269d666bc0c1a5684a1d9d327e7994b57f9c1a71ea86d169dbde94f9d4af4b4ebe258d0085e0aa2cd563460b06513eccc4b016c0c5d416122d0275 + languageName: node + linkType: hard + +"@tanstack/query-sync-storage-persister@npm:^4.27.1": + version: 4.27.1 + resolution: "@tanstack/query-sync-storage-persister@npm:4.27.1" + dependencies: + "@tanstack/query-persist-client-core": 4.27.0 + checksum: 16cdef50af43cf854ec1244f43609c04f9a9fcb7bbb36c763ce3146aeb85095c62da098fb4c4876d76496fa5830d54c6e79691d2b353919b1e5f274a3c34a97e languageName: node linkType: hard "@tanstack/react-query-devtools@npm:^4.24.4": - version: 4.24.6 - resolution: "@tanstack/react-query-devtools@npm:4.24.6" + version: 4.28.0 + resolution: "@tanstack/react-query-devtools@npm:4.28.0" dependencies: "@tanstack/match-sorter-utils": ^8.7.0 superjson: ^1.10.0 use-sync-external-store: ^1.2.0 peerDependencies: - "@tanstack/react-query": 4.24.6 + "@tanstack/react-query": 4.28.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 65722242dc040f74fe70748000cc3f24c2cdd45fa2cfc1ee9d846c37c7d3e55438426a4a4973e6eb2a55efb280c0f5ea2ae091bfa493c1f3ca4edac2aba757af + checksum: 76d39c4f5d2a884e6b7af9dee39f1f2427da515cd6bd3ddc99d1d97ec5fa01db5c134ac0d0fab57cdc860a736a3aa0443cc35295e302e9ff119b023663d073a6 + languageName: node + linkType: hard + +"@tanstack/react-query-persist-client@npm:^4.28.0": + version: 4.28.0 + resolution: "@tanstack/react-query-persist-client@npm:4.28.0" + dependencies: + "@tanstack/query-persist-client-core": 4.27.0 + peerDependencies: + "@tanstack/react-query": 4.28.0 + checksum: 8177b41ae644774f380154ec09588cce21b6bf75f45d58691cc86fd58002927989f47e278170a1ae9c3c02638a7e26d67a29106c768d325a54cef9219115839d languageName: node linkType: hard "@tanstack/react-query@npm:^4.2.1": - version: 4.24.6 - resolution: "@tanstack/react-query@npm:4.24.6" + version: 4.28.0 + resolution: "@tanstack/react-query@npm:4.28.0" dependencies: - "@tanstack/query-core": 4.24.6 + "@tanstack/query-core": 4.27.0 use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -1907,7 +1728,54 @@ __metadata: optional: true react-native: optional: true - checksum: 250bc2cba8dd7da61680a8e360fac87ee057d079ee3be950c76dbc063f941119817634857c1cb0d9b12042dd5d4fbe847c02af5dfb89ae8daa0f9339f87ad605 + checksum: 7baa70d22b55cfa22f8a1d92ba9f8379c5436ee81fce3f0e7df4a8c29bb26bfef4a83759cf10f752b40ae2940099fcce88ce91a773240f4999ae91136980c6e3 + languageName: node + linkType: hard + +"@testing-library/dom@npm:^9.0.0": + version: 9.2.0 + resolution: "@testing-library/dom@npm:9.2.0" + dependencies: + "@babel/code-frame": ^7.10.4 + "@babel/runtime": ^7.12.5 + "@types/aria-query": ^5.0.1 + aria-query: ^5.0.0 + chalk: ^4.1.0 + dom-accessibility-api: ^0.5.9 + lz-string: ^1.5.0 + pretty-format: ^27.0.2 + checksum: b145f43cd06ff083012cf2503aff6ccba97ff80715fcb106fe64af690f5536557bf24d37b97e8d685bbe3803d7f71d685ce71426cb1b9e250c3611e4372dcfa9 + languageName: node + linkType: hard + +"@testing-library/jest-dom@npm:^5.16.5": + version: 5.16.5 + resolution: "@testing-library/jest-dom@npm:5.16.5" + dependencies: + "@adobe/css-tools": ^4.0.1 + "@babel/runtime": ^7.9.2 + "@types/testing-library__jest-dom": ^5.9.1 + aria-query: ^5.0.0 + chalk: ^3.0.0 + css.escape: ^1.5.1 + dom-accessibility-api: ^0.5.6 + lodash: ^4.17.15 + redent: ^3.0.0 + checksum: 94911f901a8031f3e489d04ac057cb5373621230f5d92bed80e514e24b069fb58a3166d1dd86963e55f078a1bd999da595e2ab96ed95f452d477e272937d792a + languageName: node + linkType: hard + +"@testing-library/react@npm:^14.0.0": + version: 14.0.0 + resolution: "@testing-library/react@npm:14.0.0" + dependencies: + "@babel/runtime": ^7.12.5 + "@testing-library/dom": ^9.0.0 + "@types/react-dom": ^18.0.0 + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 4a54c8f56cc4a39b50803205f84f06280bb76521d6d5d4b3b36651d760c7c7752ef142d857d52aaf4fad4848ed7a8be49afc793a5dda105955d2f8bef24901ac languageName: node linkType: hard @@ -1918,44 +1786,10 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.1.14": - version: 7.20.0 - resolution: "@types/babel__core@npm:7.20.0" - dependencies: - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - "@types/babel__generator": "*" - "@types/babel__template": "*" - "@types/babel__traverse": "*" - checksum: 49b601a0a7637f1f387442c8156bd086cfd10ff4b82b0e1994e73a6396643b5435366fb33d6b604eade8467cca594ef97adcbc412aede90bb112ebe88d0ad6df - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.6.4 - resolution: "@types/babel__generator@npm:7.6.4" - dependencies: - "@babel/types": ^7.0.0 - checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" - dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 - checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee - languageName: node - linkType: hard - -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.18.3 - resolution: "@types/babel__traverse@npm:7.18.3" - dependencies: - "@babel/types": ^7.3.0 - checksum: d20953338b2f012ab7750932ece0a78e7d1645b0a6ff42d49be90f55e9998085da1374a9786a7da252df89555c6586695ba4d1d4b4e88ab2b9f306bcd35e00d3 +"@types/aria-query@npm:^5.0.1": + version: 5.0.1 + resolution: "@types/aria-query@npm:5.0.1" + checksum: 69fd7cceb6113ed370591aef04b3fd0742e9a1b06dd045c43531448847b85de181495e4566f98e776b37c422a12fd71866e0a1dfd904c5ec3f84d271682901de languageName: node linkType: hard @@ -1971,6 +1805,22 @@ __metadata: languageName: node linkType: hard +"@types/chai-subset@npm:^1.3.3": + version: 1.3.3 + resolution: "@types/chai-subset@npm:1.3.3" + dependencies: + "@types/chai": "*" + checksum: 4481da7345022995f5a105e6683744f7203d2c3d19cfe88d8e17274d045722948abf55e0adfd97709e0f043dade37a4d4e98cd4c660e2e8a14f23e6ecf79418f + languageName: node + linkType: hard + +"@types/chai@npm:*, @types/chai@npm:^4.3.4": + version: 4.3.4 + resolution: "@types/chai@npm:4.3.4" + checksum: 571184967beb03bf64c4392a13a7d44e72da9af5a1e83077ff81c39cf59c0fda2a5c78d2005084601cf8f3d11726608574d8b5b4a0e3e9736792807afd926cd0 + languageName: node + linkType: hard + "@types/cookie@npm:^0.4.1": version: 0.4.1 resolution: "@types/cookie@npm:0.4.1" @@ -1989,21 +1839,12 @@ __metadata: linkType: hard "@types/dockerode@npm:^3.3.9": - version: 3.3.14 - resolution: "@types/dockerode@npm:3.3.14" + version: 3.3.16 + resolution: "@types/dockerode@npm:3.3.16" dependencies: "@types/docker-modem": "*" "@types/node": "*" - checksum: 6a8472622861fb0c97908963a8236d6e439c9feefc845b866326272ad0e5c33f537206fb4633424c5e3c8ec63559cb14bc737e2f88f0fcdf11496a9162d5b139 - languageName: node - linkType: hard - -"@types/graceful-fs@npm:^4.1.3": - version: 4.1.6 - resolution: "@types/graceful-fs@npm:4.1.6" - dependencies: - "@types/node": "*" - checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 + checksum: ef316e330f8a1a137962d6000cac53bb25b5ba4300e38dd5842f32a6c58bec420278d61526c68865351c48c7e843c9aa45bcbca332737630a0c251e09390bf5b languageName: node linkType: hard @@ -2049,6 +1890,16 @@ __metadata: languageName: node linkType: hard +"@types/jest@npm:*": + version: 29.5.0 + resolution: "@types/jest@npm:29.5.0" + dependencies: + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: cd877e5c56d299cceb8bfdcbb1a77723c706750dd3c3bc47403bc3599b8faff590a3b009c68bb5b11bf7a8c77d1fb01de5e124329b4a08e65f1cdda28b0ecdb8 + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" @@ -2073,9 +1924,9 @@ __metadata: linkType: hard "@types/node@npm:*, @types/node@npm:^18.11.18": - version: 18.14.0 - resolution: "@types/node@npm:18.14.0" - checksum: d83fcf5e4ed544755dd9028f5cbb6b9d46235043159111bb2ad62223729aee581c0144a9f6df8ba73d74011db9ed4ebd7af2fd5e0996714e3beb508a5da8ac5c + version: 18.15.11 + resolution: "@types/node@npm:18.15.11" + checksum: 977b4ad04708897ff0eb049ecf82246d210939c82461922d20f7d2dcfd81bbc661582ba3af28869210f7e8b1934529dcd46bff7d448551400f9d48b9d3bddec3 languageName: node linkType: hard @@ -2087,9 +1938,9 @@ __metadata: linkType: hard "@types/node@npm:^16.10.2": - version: 16.18.12 - resolution: "@types/node@npm:16.18.12" - checksum: fc3271182414f8593018ef8f00b4718116a92f463f619081bd399d9460e7861e1dd7eebc7cf94c23567e418ff397babed077011711aae8d47171b5a81c5bd71d + version: 16.18.22 + resolution: "@types/node@npm:16.18.22" + checksum: 0fa5b7ca37855125988eb90207b9ebd50cc9c30a559be6d69e53f7e4cc474ce514994012c806d2e83e03bf1f48705b7e3d1c45a424f6e11ee39818ee4c4c2c2d languageName: node linkType: hard @@ -2100,13 +1951,6 @@ __metadata: languageName: node linkType: hard -"@types/prettier@npm:^2.1.5": - version: 2.7.2 - resolution: "@types/prettier@npm:2.7.2" - checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 - languageName: node - linkType: hard - "@types/prismjs@npm:^1.26.0": version: 1.26.0 resolution: "@types/prismjs@npm:1.26.0" @@ -2121,6 +1965,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:17.0.2": + version: 17.0.2 + resolution: "@types/react-dom@npm:17.0.2" + dependencies: + "@types/react": "*" + checksum: 1725928a1c3a0026044e6401e6b53729e1a88849034fc67138d7784ec44a5132fe2e9056a19b741ccb462ff0ec0d8c2c01ef316bda19be0e31f2ead9346f600b + languageName: node + linkType: hard + "@types/react@npm:17.0.2": version: 17.0.2 resolution: "@types/react@npm:17.0.2" @@ -2148,11 +2001,11 @@ __metadata: linkType: hard "@types/ssh2@npm:*": - version: 1.11.7 - resolution: "@types/ssh2@npm:1.11.7" + version: 1.11.8 + resolution: "@types/ssh2@npm:1.11.8" dependencies: "@types/node": ^18.11.18 - checksum: ccc53516553aaa520f3d20b4e39eb3c1df33ff74cb7620595d8a2fe0537e727ba8f01a425ccf7659c72426e644345ea2c3561441a9e093a2f62c8b33793562e6 + checksum: ee8b990652ee5ade2bab513e2e30443673c94cc54bf9912d63a46dd51777ab088fa2213d830d3f538c7540f5b2bf6bccb2bebd4071a6804fc4a89df5352c4ae0 languageName: node linkType: hard @@ -2163,6 +2016,15 @@ __metadata: languageName: node linkType: hard +"@types/testing-library__jest-dom@npm:^5.9.1": + version: 5.14.5 + resolution: "@types/testing-library__jest-dom@npm:5.14.5" + dependencies: + "@types/jest": "*" + checksum: dcb05416758fe88c1f4f3aa97b4699fcb46a5ed8f53c6b81721e66155452a48caf12ecb97dfdfd4130678e65efd66b9fca0ac434b3d63affec84842a84a6bf38 + languageName: node + linkType: hard + "@types/uuid@npm:^8.3.4": version: 8.3.4 resolution: "@types/uuid@npm:8.3.4" @@ -2185,26 +2047,26 @@ __metadata: linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.22 - resolution: "@types/yargs@npm:17.0.22" + version: 17.0.24 + resolution: "@types/yargs@npm:17.0.24" dependencies: "@types/yargs-parser": "*" - checksum: 0773523fda71bafdc52f13f5970039e535a353665a60ba9261149a5c9c2b908242e6e77fbb7a8c06931ec78ce889d64d09673c68ba23eb5f5742d5385d0d1982 + checksum: 5f3ac4dc4f6e211c1627340160fbe2fd247ceba002190da6cf9155af1798450501d628c9165a183f30a224fc68fa5e700490d740ff4c73e2cdef95bc4e8ba7bf languageName: node linkType: hard "@typescript-eslint/eslint-plugin@npm:^5.30.7": - version: 5.52.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.52.0" + version: 5.57.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.57.0" dependencies: - "@typescript-eslint/scope-manager": 5.52.0 - "@typescript-eslint/type-utils": 5.52.0 - "@typescript-eslint/utils": 5.52.0 + "@eslint-community/regexpp": ^4.4.0 + "@typescript-eslint/scope-manager": 5.57.0 + "@typescript-eslint/type-utils": 5.57.0 + "@typescript-eslint/utils": 5.57.0 debug: ^4.3.4 grapheme-splitter: ^1.0.4 ignore: ^5.2.0 natural-compare-lite: ^1.4.0 - regexpp: ^3.2.0 semver: ^7.3.7 tsutils: ^3.21.0 peerDependencies: @@ -2213,43 +2075,43 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: cff07ee94d8ab2a1b6c33b5c5bf641eff2bf2bebc0f35a9d8b3f128fd610e27a4aaf620bc2ad23608ad161b1810b7e32e5a2e0f746cc5094c3f506f7a14daa34 + checksum: be13aa74ee6f15f0ae67781c625d9dcf3ce8a3feca2b125eef0cfee850b7f9f0cec23fc56a729ef25926298fe3ea51603ebeee2b93fc9b73fce1410638707177 languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.30.7": - version: 5.52.0 - resolution: "@typescript-eslint/parser@npm:5.52.0" + version: 5.57.0 + resolution: "@typescript-eslint/parser@npm:5.57.0" dependencies: - "@typescript-eslint/scope-manager": 5.52.0 - "@typescript-eslint/types": 5.52.0 - "@typescript-eslint/typescript-estree": 5.52.0 + "@typescript-eslint/scope-manager": 5.57.0 + "@typescript-eslint/types": 5.57.0 + "@typescript-eslint/typescript-estree": 5.57.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 1d8ff6e932f9c9db8d24b16ce89fd963f0982c38559e500aa1f8dc5cd66abd02f1659dd1a1361ce550def05331803caa69a69a039b54c94fc0f22919a2305c12 + checksum: b7e8345631911f721591ba970fea5c888f0f3bf2e2ea2dbc3e5b0dc345c0776b62b92c534edfde1379b4b182958a421f35ac26d84705fe6ae7dd37aa675d9493 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.52.0": - version: 5.52.0 - resolution: "@typescript-eslint/scope-manager@npm:5.52.0" +"@typescript-eslint/scope-manager@npm:5.57.0": + version: 5.57.0 + resolution: "@typescript-eslint/scope-manager@npm:5.57.0" dependencies: - "@typescript-eslint/types": 5.52.0 - "@typescript-eslint/visitor-keys": 5.52.0 - checksum: 9a03fe30f8e90a5106c482478f213eefdd09f2f74e24d9dc59b453885466a758fe6d1cd24d706aed6188fb03c84b16ca6491cf20da6b16b8fc53cad8b8c327f2 + "@typescript-eslint/types": 5.57.0 + "@typescript-eslint/visitor-keys": 5.57.0 + checksum: 4a851f23da2adbf6341b04c1e3f19fcb66415683f26805d3123725d18845bd4a150bd182de0a91279d5682f2568bb5dd831d4ad0bdb70f49d9ca7381cec4dd17 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.52.0": - version: 5.52.0 - resolution: "@typescript-eslint/type-utils@npm:5.52.0" +"@typescript-eslint/type-utils@npm:5.57.0": + version: 5.57.0 + resolution: "@typescript-eslint/type-utils@npm:5.57.0" dependencies: - "@typescript-eslint/typescript-estree": 5.52.0 - "@typescript-eslint/utils": 5.52.0 + "@typescript-eslint/typescript-estree": 5.57.0 + "@typescript-eslint/utils": 5.57.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -2257,23 +2119,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: ac5422040461febab8a2eeec76d969024ccff76203dec357f7220c9b5e0dde96e3e3a76fd4118d42b50bd5bfb3a194aaceeb63417a2ac4e1ebf5e687558a9a10 + checksum: 649d000edabfe4e567b8a384d0012c56396e40ce2123a78857d4b8da6bf2288627dc355745bd7d4a2877d4cc8a26e1d1dbfc422e6382ac3d3ab431b92eb5b852 languageName: node linkType: hard -"@typescript-eslint/types@npm:5.52.0": - version: 5.52.0 - resolution: "@typescript-eslint/types@npm:5.52.0" - checksum: 018940d61aebf7cf3f7de1b9957446e2ea01f08fe950bef4788c716a3a88f7c42765fe7d80152b0d0428fcd4bd3ace2dfa8c459ba1c59d9a84e951642180f869 +"@typescript-eslint/types@npm:5.57.0": + version: 5.57.0 + resolution: "@typescript-eslint/types@npm:5.57.0" + checksum: 79a100fb650965f63c01c20e6abd79ca0d2043c3a329b9fef89917d6b9ba3c0f946dca3f14f2975ee6349daadd6ce0e98fde3aafe4b710e5a27abe1adc590c85 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.52.0": - version: 5.52.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.52.0" +"@typescript-eslint/typescript-estree@npm:5.57.0": + version: 5.57.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.57.0" dependencies: - "@typescript-eslint/types": 5.52.0 - "@typescript-eslint/visitor-keys": 5.52.0 + "@typescript-eslint/types": 5.57.0 + "@typescript-eslint/visitor-keys": 5.57.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -2282,41 +2144,41 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 67d396907fee3d6894e26411a5098a37f07e5d50343189e6361ff7db91c74a7ffe2abd630d11f14c2bda1f4af13edf52b80b11cbccb55b44079c7cec14c9e108 + checksum: 648b88f88ea6cc293ec67b4c0f4f3c2bf733be7e0f2eee08aadbaec6939fd724a6c287decc336abbf67b9e366cc2c48f2e0e48d8302b533e783f798332a06e83 languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.52.0, @typescript-eslint/utils@npm:^5.10.0, @typescript-eslint/utils@npm:^5.43.0": - version: 5.52.0 - resolution: "@typescript-eslint/utils@npm:5.52.0" +"@typescript-eslint/utils@npm:5.57.0, @typescript-eslint/utils@npm:^5.43.0, @typescript-eslint/utils@npm:^5.53.0": + version: 5.57.0 + resolution: "@typescript-eslint/utils@npm:5.57.0" dependencies: + "@eslint-community/eslint-utils": ^4.2.0 "@types/json-schema": ^7.0.9 "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.52.0 - "@typescript-eslint/types": 5.52.0 - "@typescript-eslint/typescript-estree": 5.52.0 + "@typescript-eslint/scope-manager": 5.57.0 + "@typescript-eslint/types": 5.57.0 + "@typescript-eslint/typescript-estree": 5.57.0 eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 semver: ^7.3.7 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 01906be5262ece36537e9d586e4d2d4791e05752a9354bcb42b1f5bf965f53daa13309c61c3dff5e201ea28c298e4e01cf0c93738afa0099fea0da3b1d8cb3a5 + checksum: 461258e1194d24c5e642c65ba1afd612712fa8e617ac85cfbbe3dde2557fe4abadedbce19a6954ae0cccbfb92b8a09f38d65a3eedca0394861a5d1c4c893c5ed languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.52.0": - version: 5.52.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.52.0" +"@typescript-eslint/visitor-keys@npm:5.57.0": + version: 5.57.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.57.0" dependencies: - "@typescript-eslint/types": 5.52.0 + "@typescript-eslint/types": 5.57.0 eslint-visitor-keys: ^3.3.0 - checksum: 33b44f0cd35b7b47f34e89d52e47b8d8200f55af306b22db4de104d79f65907458ea022e548f50d966e32fea150432ac9c1ae65b3001b0ad2ac8a17c0211f370 + checksum: 77d53f74648e48bf1c6313cd60568c2b1539157ac13945f26204a54beb156666c24f3d033dd0db8ed5d1d4595ee63c072732b17132e4488b46763bf8fdcefa49 languageName: node linkType: hard -"@videojs/http-streaming@npm:3.0.0": - version: 3.0.0 - resolution: "@videojs/http-streaming@npm:3.0.0" +"@videojs/http-streaming@npm:3.0.2": + version: 3.0.2 + resolution: "@videojs/http-streaming@npm:3.0.2" dependencies: "@babel/runtime": ^7.12.5 "@videojs/vhs-utils": 4.0.0 @@ -2324,11 +2186,11 @@ __metadata: global: ^4.4.0 m3u8-parser: ^6.0.0 mpd-parser: ^1.0.1 - mux.js: 6.2.0 + mux.js: 6.3.0 video.js: ^7 || ^8 peerDependencies: video.js: ^7 || ^8 - checksum: e479cd981a067e9b28c9c90f41936b5587939060690f4eabdbbe5ca54adb509515e03270297a03b545087d76dfd1ab7b9461e5e1ef62a8e0ed57d80fa52bbe2c + checksum: 5745eda3e9f59491fade66e7308b306fa202dd11c7e920cb050f074112ebc39936a60df0f8df6e56e1822a6ec89e993bb0edaef35febb9e8f8b060b180bd7193 languageName: node linkType: hard @@ -2365,6 +2227,90 @@ __metadata: languageName: node linkType: hard +"@vitejs/plugin-react@npm:^3.1.0": + version: 3.1.0 + resolution: "@vitejs/plugin-react@npm:3.1.0" + dependencies: + "@babel/core": ^7.20.12 + "@babel/plugin-transform-react-jsx-self": ^7.18.6 + "@babel/plugin-transform-react-jsx-source": ^7.19.6 + magic-string: ^0.27.0 + react-refresh: ^0.14.0 + peerDependencies: + vite: ^4.1.0-beta.0 + checksum: 450fac79e67cba9e1581c860f78e687b44108ab4117663ef20db279316e03cd8e87f94fef376e27cc5e200bd52813dcc09b70ea570c7c7cc291fcd47eb260fbc + languageName: node + linkType: hard + +"@vitest/coverage-c8@npm:^0.29.3": + version: 0.29.8 + resolution: "@vitest/coverage-c8@npm:0.29.8" + dependencies: + c8: ^7.13.0 + picocolors: ^1.0.0 + std-env: ^3.3.1 + peerDependencies: + vitest: ">=0.29.0 <1" + checksum: 610bd2917aa160f5bf641f4d4dec539524039ea98fdc98a8d9288c7ea05090d7028d4504b8e1ecc1de1d1700c9a61a55abf285559da2c4bc8df238e559a505f7 + languageName: node + linkType: hard + +"@vitest/expect@npm:0.29.8": + version: 0.29.8 + resolution: "@vitest/expect@npm:0.29.8" + dependencies: + "@vitest/spy": 0.29.8 + "@vitest/utils": 0.29.8 + chai: ^4.3.7 + checksum: a80f9c352a979eb46690be2ea54b5ca391d3575b4053be80c1359325fb0cea913d6217f48d54e64ff5dda3b15bd7a6873a5f8128e8c098f7ebad1365d4065c5e + languageName: node + linkType: hard + +"@vitest/runner@npm:0.29.8": + version: 0.29.8 + resolution: "@vitest/runner@npm:0.29.8" + dependencies: + "@vitest/utils": 0.29.8 + p-limit: ^4.0.0 + pathe: ^1.1.0 + checksum: 8305370ff6c3fc6aea7189bd138ee4ff0e040a959c0fe6ab64bcb9e70ae5bf836b8dc058b1de288aa75c9d1cd648e5f112e7cd5691c03b7a1d32466d8bfc71a9 + languageName: node + linkType: hard + +"@vitest/spy@npm:0.29.8": + version: 0.29.8 + resolution: "@vitest/spy@npm:0.29.8" + dependencies: + tinyspy: ^1.0.2 + checksum: 7b1607b696275bf94a497e92d7d10c466b9b3d08726bbedb3735bdf57f003763a9516e328af22746829526ce573f87eb6119ab64ce7db95794b2d220aa53b607 + languageName: node + linkType: hard + +"@vitest/ui@npm:^0.29.3": + version: 0.29.8 + resolution: "@vitest/ui@npm:0.29.8" + dependencies: + fast-glob: ^3.2.12 + flatted: ^3.2.7 + pathe: ^1.1.0 + picocolors: ^1.0.0 + sirv: ^2.0.2 + checksum: 0190c01a1a467b71a4e81563cd70370c651238f1b4e82c3ff5c6e8a6e6f35ffb6e66f987cd9c892df99ed1ec00ed20d804b2c07c24cdb996eb880c585d13dfcf + languageName: node + linkType: hard + +"@vitest/utils@npm:0.29.8": + version: 0.29.8 + resolution: "@vitest/utils@npm:0.29.8" + dependencies: + cli-truncate: ^3.1.0 + diff: ^5.1.0 + loupe: ^2.3.6 + pretty-format: ^27.5.1 + checksum: fa18cccb6ab5295e43a1a43b9c022f070646a893adb0561c50b3e0c39f05ea74cbf379aef22ef485ea9acbf2bb8f0a224d457fd4f16b9e1bf509c13052c7f08b + languageName: node + linkType: hard + "@xmldom/xmldom@npm:^0.8.3": version: 0.8.6 resolution: "@xmldom/xmldom@npm:0.8.6" @@ -2379,6 +2325,16 @@ __metadata: languageName: node linkType: hard +"accepts@npm:^1.3.7": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: ~2.1.34 + negotiator: 0.6.3 + checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -2388,14 +2344,14 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.0.0": +"acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.2.0": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 languageName: node linkType: hard -"acorn@npm:^8.0.4, acorn@npm:^8.8.0": +"acorn@npm:^8.0.4, acorn@npm:^8.8.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2": version: 8.8.2 resolution: "acorn@npm:8.8.2" bin: @@ -2426,13 +2382,13 @@ __metadata: linkType: hard "agentkeepalive@npm:^4.2.1": - version: 4.2.1 - resolution: "agentkeepalive@npm:4.2.1" + version: 4.3.0 + resolution: "agentkeepalive@npm:4.3.0" dependencies: debug: ^4.1.0 - depd: ^1.1.2 + depd: ^2.0.0 humanize-ms: ^1.2.1 - checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18 + checksum: 982453aa44c11a06826c836025e5162c846e1200adb56f2d075400da7d32d87021b3b0a58768d949d824811f5654223d5a8a3dad120921a2439625eb847c6260 languageName: node linkType: hard @@ -2458,15 +2414,6 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: ^0.21.3 - checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -2474,6 +2421,13 @@ __metadata: languageName: node linkType: hard +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + "ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" @@ -2499,7 +2453,14 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": +"ansi-styles@npm:^6.0.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -2526,15 +2487,6 @@ __metadata: languageName: node linkType: hard -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: ~1.0.2 - checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 - languageName: node - linkType: hard - "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -2543,21 +2495,15 @@ __metadata: linkType: hard "aria-hidden@npm:^1.1.3": - version: 1.2.2 - resolution: "aria-hidden@npm:1.2.2" + version: 1.2.3 + resolution: "aria-hidden@npm:1.2.3" dependencies: tslib: ^2.0.0 - peerDependencies: - "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.9.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: ee1a3688db5491eeb87b73eea624614f24ef62a74cf9e47bc8229dde1ff7457f7e4a26425cadc0d3efd89380305e6fb4a4e505bccdee16beaa4686014861d7b1 + checksum: 7d7d211629eef315e94ed3b064c6823d13617e609d3f9afab1c2ed86399bb8e90405f9bdd358a85506802766f3ecb468af985c67c846045a34b973bcc0289db9 languageName: node linkType: hard -"aria-query@npm:^5.1.3": +"aria-query@npm:^5.0.0, aria-query@npm:^5.1.3": version: 5.1.3 resolution: "aria-query@npm:5.1.3" dependencies: @@ -2566,6 +2512,16 @@ __metadata: languageName: node linkType: hard +"array-buffer-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "array-buffer-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + is-array-buffer: ^3.0.1 + checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + languageName: node + linkType: hard + "array-includes@npm:^3.1.5, array-includes@npm:^3.1.6": version: 3.1.6 resolution: "array-includes@npm:3.1.6" @@ -2632,6 +2588,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf + languageName: node + linkType: hard + "ast-types-flow@npm:^0.0.7": version: 0.0.7 resolution: "ast-types-flow@npm:0.0.7" @@ -2686,48 +2649,6 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-jest@npm:28.1.3" - dependencies: - "@jest/transform": ^28.1.3 - "@types/babel__core": ^7.1.14 - babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^28.1.3 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - slash: ^3.0.0 - peerDependencies: - "@babel/core": ^7.8.0 - checksum: 57ccd2296e1839687b5df2fd138c3d00717e0369e385254b012ccd4ee70e75f5d5c8e6cfcdf92d155015b468cfebb847b38e69bb5805d8aaf730e20575127cc6 - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@istanbuljs/load-nyc-config": ^1.0.0 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-instrument: ^5.0.4 - test-exclude: ^6.0.0 - checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-plugin-jest-hoist@npm:28.1.3" - dependencies: - "@babel/template": ^7.3.3 - "@babel/types": ^7.3.3 - "@types/babel__core": ^7.1.14 - "@types/babel__traverse": ^7.0.6 - checksum: 648d89f9d80f6450ce7e50d0c32eb91b7f26269b47c3e37aaf2e0f2f66a980978345bd6b8c9b8c3aa6a8252ad2bc2c9fb50630e9895622c9a0972af5f70ed20e - languageName: node - linkType: hard - "babel-plugin-macros@npm:^3.1.0": version: 3.1.0 resolution: "babel-plugin-macros@npm:3.1.0" @@ -2739,40 +2660,6 @@ __metadata: languageName: node linkType: hard -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" - dependencies: - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.8.3 - "@babel/plugin-syntax-import-meta": ^7.8.3 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.8.3 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-top-level-await": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 - languageName: node - linkType: hard - -"babel-preset-jest@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-preset-jest@npm:28.1.3" - dependencies: - babel-plugin-jest-hoist: ^28.1.3 - babel-preset-current-node-syntax: ^1.0.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 8248a4a5ca4242cc06ad13b10b9183ad2664da8fb0da060c352223dcf286f0ce9c708fa17901dc44ecabec25e6d309e5e5b9830a61dd777c3925f187a345a47d - languageName: node - linkType: hard - "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -2856,22 +2743,6 @@ __metadata: languageName: node linkType: hard -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: ^0.4.0 - checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - "buffer-from@npm:~0.1.1": version: 0.1.2 resolution: "buffer-from@npm:0.1.2" @@ -2896,6 +2767,35 @@ __metadata: languageName: node linkType: hard +"c8@npm:^7.13.0": + version: 7.13.0 + resolution: "c8@npm:7.13.0" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@istanbuljs/schema": ^0.1.3 + find-up: ^5.0.0 + foreground-child: ^2.0.0 + istanbul-lib-coverage: ^3.2.0 + istanbul-lib-report: ^3.0.0 + istanbul-reports: ^3.1.4 + rimraf: ^3.0.2 + test-exclude: ^6.0.0 + v8-to-istanbul: ^9.0.0 + yargs: ^16.2.0 + yargs-parser: ^20.2.9 + bin: + c8: bin/c8.js + checksum: 491abf4cf3097cdcfd24dbac49162f1383861c22c77fdd9280bcd38240e1e07d2c6a59da5d4df59a61a8204e2fc297d31fd526e495faf8d2f20dcc12a37b144c + languageName: node + linkType: hard + +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a + languageName: node + linkType: hard + "cacache@npm:^16.1.0": version: 16.1.3 resolution: "cacache@npm:16.1.3" @@ -2936,9 +2836,9 @@ __metadata: languageName: node linkType: hard -"cacheable-request@npm:^10.2.1": - version: 10.2.7 - resolution: "cacheable-request@npm:10.2.7" +"cacheable-request@npm:^10.2.8": + version: 10.2.9 + resolution: "cacheable-request@npm:10.2.9" dependencies: "@types/http-cache-semantics": ^4.0.1 get-stream: ^6.0.1 @@ -2947,7 +2847,7 @@ __metadata: mimic-response: ^4.0.0 normalize-url: ^8.0.0 responselike: ^3.0.0 - checksum: 25cfbe0cab755bcee3bf6610b0253414e583289f795a28035616bf3186ecb303e8caf1943cbf42d92410b3f24124a1cdd663dd8ff52ac2c997a5129de5e9557a + checksum: ee1c957138596ea564f7d4ff77bbbf5d3b48439c5aa60fa4046f14baafcbac5af235f107dd005f641f6320bfa3f261a31593154c59107840c0be0742a682013f languageName: node linkType: hard @@ -2983,24 +2883,25 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - -"camelcase@npm:^6.2.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d - languageName: node - linkType: hard - "caniuse-lite@npm:^1.0.30001406, caniuse-lite@npm:^1.0.30001449": - version: 1.0.30001456 - resolution: "caniuse-lite@npm:1.0.30001456" - checksum: c2cc479962149abd09a25b64699ee7484d9c433db2bad0a489f7b51b09a463c991f6efd7b8e201bc1a1ccf3294263f88503a3adf0a57db9046939ee7e58b76a6 + version: 1.0.30001472 + resolution: "caniuse-lite@npm:1.0.30001472" + checksum: 60f2fbe9b7fc6d88c500779ddbebda5fb0ba86eece32ecf3c18d5c1f74e2c36ac5151ed6464f72b6c43c43dc6a3d1ea83c73a195ebb6d2f49738add1f8a0cd4d + languageName: node + linkType: hard + +"chai@npm:^4.3.7": + version: 4.3.7 + resolution: "chai@npm:4.3.7" + dependencies: + assertion-error: ^1.1.0 + check-error: ^1.0.2 + deep-eql: ^4.1.2 + get-func-name: ^2.0.0 + loupe: ^2.3.1 + pathval: ^1.1.1 + type-detect: ^4.0.5 + checksum: 0bba7d267848015246a66995f044ce3f0ebc35e530da3cbdf171db744e14cbe301ab913a8d07caf7952b430257ccbb1a4a983c570a7c5748dc537897e5131f7c languageName: node linkType: hard @@ -3015,6 +2916,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: 8e3ddf3981c4da405ddbd7d9c8d91944ddf6e33d6837756979f7840a29272a69a5189ecae0ff84006750d6d1e92368d413335eab4db5476db6e6703a1d1e0505 + languageName: node + linkType: hard + "chalk@npm:^4.0.0, chalk@npm:^4.1.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -3025,10 +2936,10 @@ __metadata: languageName: node linkType: hard -"char-regex@npm:^1.0.2": +"check-error@npm:^1.0.2": version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 + resolution: "check-error@npm:1.0.2" + checksum: d9d106504404b8addd1ee3f63f8c0eaa7cd962a1a28eb9c519b1c4a1dc7098be38007fc0060f045ee00f075fbb7a2a4f42abcf61d68323677e11ab98dc16042e languageName: node linkType: hard @@ -3072,13 +2983,6 @@ __metadata: languageName: node linkType: hard -"cjs-module-lexer@npm:^1.0.0": - version: 1.2.2 - resolution: "cjs-module-lexer@npm:1.2.2" - checksum: 977f3f042bd4f08e368c890d91eecfbc4f91da0bc009a3c557bc4dfbf32022ad1141244ac1178d44de70fc9f3dea7add7cd9a658a34b9fae98a55d8f92331ce5 - languageName: node - linkType: hard - "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -3086,6 +2990,16 @@ __metadata: languageName: node linkType: hard +"cli-truncate@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-truncate@npm:3.1.0" + dependencies: + slice-ansi: ^5.0.0 + string-width: ^5.0.0 + checksum: c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a + languageName: node + linkType: hard + "client-only@npm:0.0.1": version: 0.0.1 resolution: "client-only@npm:0.0.1" @@ -3093,14 +3007,14 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" dependencies: string-width: ^4.2.0 - strip-ansi: ^6.0.1 + strip-ansi: ^6.0.0 wrap-ansi: ^7.0.0 - checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f languageName: node linkType: hard @@ -3120,20 +3034,6 @@ __metadata: languageName: node linkType: hard -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 - languageName: node - linkType: hard - -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.1 - resolution: "collect-v8-coverage@npm:1.0.1" - checksum: 4efe0a1fccd517b65478a2364b33dadd0a43fc92a56f59aaece9b6186fe5177b2de471253587de7c91516f07c7268c2f6770b6cbcffc0e0ece353b766ec87e55 - languageName: node - linkType: hard - "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -3226,7 +3126,16 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": +"content-disposition@npm:^0.5.3": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: 5.2.1 + checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 + languageName: node + linkType: hard + +"convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 @@ -3261,9 +3170,9 @@ __metadata: linkType: hard "core-js@npm:^3": - version: 3.28.0 - resolution: "core-js@npm:3.28.0" - checksum: 3155fd0ec16d0089106b145e9595280a4ea4bde0d7ff26aa14364cd4f1c203baf6620c3025acd284f363d08b9f21104101692766ca9a36ffeee7307bdf3e1881 + version: 3.29.1 + resolution: "core-js@npm:3.29.1" + checksum: b38446dbfcfd3887b3d4922990da487e2c95044cb4c5717aaf95e786a4c6b218f05c056c7ed6c699169b9794a49fec890e402659d54661fc56965a0eb717e7bd languageName: node linkType: hard @@ -3298,7 +3207,16 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-fetch@npm:^3.0.6": + version: 3.1.5 + resolution: "cross-fetch@npm:3.1.5" + dependencies: + node-fetch: 2.6.7 + checksum: f6b8c6ee3ef993ace6277fd789c71b6acf1b504fd5f5c7128df4ef2f125a429e29cd62dc8c127523f04a5f2fa4771ed80e3f3d9695617f441425045f505cf3bb + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -3316,6 +3234,13 @@ __metadata: languageName: node linkType: hard +"css.escape@npm:^1.5.1": + version: 1.5.1 + resolution: "css.escape@npm:1.5.1" + checksum: f6d38088d870a961794a2580b2b2af1027731bb43261cfdce14f19238a88664b351cc8978abc20f06cc6bbde725699dec8deb6fe9816b139fc3f2af28719e774 + languageName: node + linkType: hard + "csstype@npm:3.0.9": version: 3.0.9 resolution: "csstype@npm:3.0.9" @@ -3486,10 +3411,12 @@ __metadata: languageName: node linkType: hard -"dedent@npm:^0.7.0": - version: 0.7.0 - resolution: "dedent@npm:0.7.0" - checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 +"deep-eql@npm:^4.1.2": + version: 4.1.3 + resolution: "deep-eql@npm:4.1.3" + dependencies: + type-detect: ^4.0.0 + checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f languageName: node linkType: hard @@ -3525,13 +3452,6 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.2.2": - version: 4.3.0 - resolution: "deepmerge@npm:4.3.0" - checksum: c7980eb5c5be040b371f1df0d566473875cfabed9f672ccc177b81ba8eee5686ce2478de2f1d0076391621cbe729e5eacda397179a59ef0f68901849647db126 - languageName: node - linkType: hard - "defer-to-connect@npm:^2.0.0, defer-to-connect@npm:^2.0.1": version: 2.0.1 resolution: "defer-to-connect@npm:2.0.1" @@ -3570,24 +3490,38 @@ __metadata: languageName: node linkType: hard -"depd@npm:^1.1.2": +"depd@npm:^1.1.0": version: 1.1.2 resolution: "depd@npm:1.1.2" checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 languageName: node linkType: hard -"detect-newline@npm:^3.0.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 +"depd@npm:^2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a languageName: node linkType: hard -"diff-sequences@npm:^28.1.1": - version: 28.1.1 - resolution: "diff-sequences@npm:28.1.1" - checksum: e2529036505567c7ca5a2dea86b6bcd1ca0e3ae63bf8ebf529b8a99cfa915bbf194b7021dc1c57361a4017a6d95578d4ceb29fabc3232a4f4cb866a2726c7690 +"detect-node-es@npm:^1.1.0": + version: 1.1.0 + resolution: "detect-node-es@npm:1.1.0" + checksum: e46307d7264644975b71c104b9f028ed1d3d34b83a15b8a22373640ce5ea630e5640b1078b8ea15f202b54641da71e4aa7597093bd4b91f113db520a26a37449 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.4.3": + version: 29.4.3 + resolution: "diff-sequences@npm:29.4.3" + checksum: 28b265e04fdddcf7f9f814effe102cc95a9dec0564a579b5aed140edb24fc345c611ca52d76d725a3cab55d3888b915b5e8a4702e0f6058968a90fa5f41fcde7 + languageName: node + linkType: hard + +"diff@npm:^5.1.0": + version: 5.1.0 + resolution: "diff@npm:5.1.0" + checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 languageName: node linkType: hard @@ -3601,25 +3535,25 @@ __metadata: linkType: hard "docker-modem@npm:^3.0.0": - version: 3.0.6 - resolution: "docker-modem@npm:3.0.6" + version: 3.0.8 + resolution: "docker-modem@npm:3.0.8" dependencies: debug: ^4.1.1 readable-stream: ^3.5.0 split-ca: ^1.0.1 ssh2: ^1.11.0 - checksum: f80abc8ddf4d6026ba460bf66c8e039ef8e41a6705086a0770ce1b7cabd91bcd4681c32a6531b79dab23ceea680a3aae363bee29e8089b55a8eb775abfb6b67d + checksum: e3675c9b1ad800be8fb1cb9c5621fbef20a75bfedcd6e01b69808eadd7f0165681e4e30d1700897b788a67dbf4769964fcccd19c3d66f6d2499bb7aede6b34df languageName: node linkType: hard "dockerode@npm:^3.3.2": - version: 3.3.4 - resolution: "dockerode@npm:3.3.4" + version: 3.3.5 + resolution: "dockerode@npm:3.3.5" dependencies: "@balena/dockerignore": ^1.0.2 docker-modem: ^3.0.0 tar-fs: ~2.0.1 - checksum: 6cb4b9d1c42feb3acfa77daf103b070cc412351dc7dc0a1553cc774ccd1be1a1412a87f8aa13c3155c63ec5c61a7cadc833b4248c4d8342814bbf708f795b952 + checksum: 7f6650422b07fa7ea9d5801f04b1a432634446b5fe37b995b8302b953b64e93abf1bb4596c2fb574ba47aafee685ef2ab959cc86c9654add5a26d09541bbbcc6 languageName: node linkType: hard @@ -3641,6 +3575,13 @@ __metadata: languageName: node linkType: hard +"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": + version: 0.5.16 + resolution: "dom-accessibility-api@npm:0.5.16" + checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 + languageName: node + linkType: hard + "dom-helpers@npm:^5.0.1": version: 5.2.1 resolution: "dom-helpers@npm:5.2.1" @@ -3712,17 +3653,17 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.284": - version: 1.4.302 - resolution: "electron-to-chromium@npm:1.4.302" - checksum: aa764494f9a5b6916ba9f311c0204b2c73449addba18cc55d43e84e8c4465732af9cd6560a8efeb32f3c5a928299030e41352e5b3a081e9e56b086d5be618f45 +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed languageName: node linkType: hard -"emittery@npm:^0.10.2": - version: 0.10.2 - resolution: "emittery@npm:0.10.2" - checksum: ee3e21788b043b90885b18ea756ec3105c1cedc50b29709c92b01e239c7e55345d4bb6d3aef4ddbaf528eef448a40b3bb831bad9ee0fc9c25cbf1367ab1ab5ac +"electron-to-chromium@npm:^1.4.284": + version: 1.4.342 + resolution: "electron-to-chromium@npm:1.4.342" + checksum: 61ecf9f3ea65a6044cdcea092dd56b42d0961fdb8fb3942ba808c6aa6ab3213d3218e599748d6d6ae8b43ddc9f76f428af0b96eaee2f0b4b2f0195c643f36f3d languageName: node linkType: hard @@ -3796,16 +3737,16 @@ __metadata: linkType: hard "es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4": - version: 1.21.1 - resolution: "es-abstract@npm:1.21.1" + version: 1.21.2 + resolution: "es-abstract@npm:1.21.2" dependencies: + array-buffer-byte-length: ^1.0.0 available-typed-arrays: ^1.0.5 call-bind: ^1.0.2 es-set-tostringtag: ^2.0.1 es-to-primitive: ^1.2.1 - function-bind: ^1.1.1 function.prototype.name: ^1.1.5 - get-intrinsic: ^1.1.3 + get-intrinsic: ^1.2.0 get-symbol-description: ^1.0.0 globalthis: ^1.0.3 gopd: ^1.0.1 @@ -3813,8 +3754,8 @@ __metadata: has-property-descriptors: ^1.0.0 has-proto: ^1.0.1 has-symbols: ^1.0.3 - internal-slot: ^1.0.4 - is-array-buffer: ^3.0.1 + internal-slot: ^1.0.5 + is-array-buffer: ^3.0.2 is-callable: ^1.2.7 is-negative-zero: ^2.0.2 is-regex: ^1.1.4 @@ -3822,17 +3763,18 @@ __metadata: is-string: ^1.0.7 is-typed-array: ^1.1.10 is-weakref: ^1.0.2 - object-inspect: ^1.12.2 + object-inspect: ^1.12.3 object-keys: ^1.1.1 object.assign: ^4.1.4 regexp.prototype.flags: ^1.4.3 safe-regex-test: ^1.0.0 + string.prototype.trim: ^1.2.7 string.prototype.trimend: ^1.0.6 string.prototype.trimstart: ^1.0.6 typed-array-length: ^1.0.4 unbox-primitive: ^1.0.2 which-typed-array: ^1.1.9 - checksum: 23ff60d42d17a55d150e7bcedbdb065d4077a8b98c436e0e2e1ef4dd532a6d78a56028673de0bd8ed464a43c46ba781c50d9af429b6a17e44dbd14c7d7fb7926 + checksum: 037f55ee5e1cdf2e5edbab5524095a4f97144d95b94ea29e3611b77d852fd8c8a40e7ae7101fa6a759a9b9b1405f188c3c70928f2d3cd88d543a07fc0d5ad41a languageName: node linkType: hard @@ -3884,6 +3826,83 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.17.5": + version: 0.17.14 + resolution: "esbuild@npm:0.17.14" + dependencies: + "@esbuild/android-arm": 0.17.14 + "@esbuild/android-arm64": 0.17.14 + "@esbuild/android-x64": 0.17.14 + "@esbuild/darwin-arm64": 0.17.14 + "@esbuild/darwin-x64": 0.17.14 + "@esbuild/freebsd-arm64": 0.17.14 + "@esbuild/freebsd-x64": 0.17.14 + "@esbuild/linux-arm": 0.17.14 + "@esbuild/linux-arm64": 0.17.14 + "@esbuild/linux-ia32": 0.17.14 + "@esbuild/linux-loong64": 0.17.14 + "@esbuild/linux-mips64el": 0.17.14 + "@esbuild/linux-ppc64": 0.17.14 + "@esbuild/linux-riscv64": 0.17.14 + "@esbuild/linux-s390x": 0.17.14 + "@esbuild/linux-x64": 0.17.14 + "@esbuild/netbsd-x64": 0.17.14 + "@esbuild/openbsd-x64": 0.17.14 + "@esbuild/sunos-x64": 0.17.14 + "@esbuild/win32-arm64": 0.17.14 + "@esbuild/win32-ia32": 0.17.14 + "@esbuild/win32-x64": 0.17.14 + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 8f4c05f5d3da04f05c48d65f60f3c6422253f406cd56a7ab7a898f0971b0366c454635a6340172874950771dc005a9928dd999b732a6d4caa504b537bfcbf2ff + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -4023,23 +4042,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^26.6.0": - version: 26.9.0 - resolution: "eslint-plugin-jest@npm:26.9.0" - dependencies: - "@typescript-eslint/utils": ^5.10.0 - peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - "@typescript-eslint/eslint-plugin": - optional: true - jest: - optional: true - checksum: 6d5fd5c95368f1ca2640389aeb7ce703d6202493c3ec6bdedb4eaca37233710508b0c75829e727765a16fd27029a466d34202bc7f2811c752038ccbbce224400 - languageName: node - linkType: hard - "eslint-plugin-jsx-a11y@npm:^6.6.1": version: 6.7.1 resolution: "eslint-plugin-jsx-a11y@npm:6.7.1" @@ -4126,6 +4128,17 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-vitest@npm:^0.0.54": + version: 0.0.54 + resolution: "eslint-plugin-vitest@npm:0.0.54" + dependencies: + "@typescript-eslint/utils": ^5.53.0 + peerDependencies: + eslint: ">=8.0.0" + checksum: 4bb699f5ffc6077fd8d39b20391059681f40af37ea2741058fcb852d5ca057ffc007f0eedac1dd84f61d5e9515777da68be47b3c439e3d8baa204eae6361d808 + languageName: node + linkType: hard + "eslint-rule-composer@npm:^0.3.0": version: 0.3.0 resolution: "eslint-rule-composer@npm:0.3.0" @@ -4153,36 +4166,21 @@ __metadata: languageName: node linkType: hard -"eslint-utils@npm:^3.0.0": - version: 3.0.0 - resolution: "eslint-utils@npm:3.0.0" - dependencies: - eslint-visitor-keys: ^2.0.0 - peerDependencies: - eslint: ">=5" - checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-visitor-keys@npm:2.1.0" - checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0": - version: 3.3.0 - resolution: "eslint-visitor-keys@npm:3.3.0" - checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.0": + version: 3.4.0 + resolution: "eslint-visitor-keys@npm:3.4.0" + checksum: 33159169462d3989321a1ec1e9aaaf6a24cc403d5d347e9886d1b5bfe18ffa1be73bdc6203143a28a606b142b1af49787f33cff0d6d0813eb5f2e8d2e1a6043c languageName: node linkType: hard "eslint@npm:^8.20.0": - version: 8.34.0 - resolution: "eslint@npm:8.34.0" + version: 8.37.0 + resolution: "eslint@npm:8.37.0" dependencies: - "@eslint/eslintrc": ^1.4.1 + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.4.0 + "@eslint/eslintrc": ^2.0.2 + "@eslint/js": 8.37.0 "@humanwhocodes/config-array": ^0.11.8 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 @@ -4193,10 +4191,9 @@ __metadata: doctrine: ^3.0.0 escape-string-regexp: ^4.0.0 eslint-scope: ^7.1.1 - eslint-utils: ^3.0.0 - eslint-visitor-keys: ^3.3.0 - espree: ^9.4.0 - esquery: ^1.4.0 + eslint-visitor-keys: ^3.4.0 + espree: ^9.5.1 + esquery: ^1.4.2 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 file-entry-cache: ^6.0.1 @@ -4217,43 +4214,32 @@ __metadata: minimatch: ^3.1.2 natural-compare: ^1.4.0 optionator: ^0.9.1 - regexpp: ^3.2.0 strip-ansi: ^6.0.1 strip-json-comments: ^3.1.0 text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 4e13e9eb05ac2248efbb6acae0b2325091235d5c47ba91a4775c7d6760778cbcd358a773ebd42f4629d2ad89e27c02f5d66eb1f737d75d9f5fc411454f83b2e5 + checksum: 80f3d5cdce2d671f4794e392d234a78d039c347673defb0596268bd481e8f30a53d93c01ff4f66a546c87d97ab4122c0e9cafe1371f87cb03cee6b7d5aa97595 languageName: node linkType: hard -"espree@npm:^9.4.0": - version: 9.4.1 - resolution: "espree@npm:9.4.1" +"espree@npm:^9.5.1": + version: 9.5.1 + resolution: "espree@npm:9.5.1" dependencies: acorn: ^8.8.0 acorn-jsx: ^5.3.2 - eslint-visitor-keys: ^3.3.0 - checksum: 4d266b0cf81c7dfe69e542c7df0f246e78d29f5b04dda36e514eb4c7af117ee6cfbd3280e560571ed82ff6c9c3f0003c05b82583fc7a94006db7497c4fe4270e + eslint-visitor-keys: ^3.4.0 + checksum: cdf6e43540433d917c4f2ee087c6e987b2063baa85a1d9cdaf51533d78275ebd5910c42154e7baf8e3e89804b386da0a2f7fad2264d8f04420e7506bf87b3b88 languageName: node linkType: hard -"esprima@npm:^4.0.0": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 - languageName: node - linkType: hard - -"esquery@npm:^1.4.0": - version: 1.4.2 - resolution: "esquery@npm:1.4.2" +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" dependencies: estraverse: ^5.1.0 - checksum: 2f4ad89c5aafaca61cc2c15e256190f0d6deb4791cae6552d3cb4b1eb8867958cdf27a56aaa3272ff17435e3eaa19ee0d4129fac336ca6373d7354d7b5da7966 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 languageName: node linkType: hard @@ -4287,40 +4273,16 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.0.0": - version: 5.1.1 - resolution: "execa@npm:5.1.1" +"expect@npm:^29.0.0": + version: 29.5.0 + resolution: "expect@npm:29.5.0" dependencies: - cross-spawn: ^7.0.3 - get-stream: ^6.0.0 - human-signals: ^2.1.0 - is-stream: ^2.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^4.0.1 - onetime: ^5.1.2 - signal-exit: ^3.0.3 - strip-final-newline: ^2.0.0 - checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 - languageName: node - linkType: hard - -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 - languageName: node - linkType: hard - -"expect@npm:^28.1.3": - version: 28.1.3 - resolution: "expect@npm:28.1.3" - dependencies: - "@jest/expect-utils": ^28.1.3 - jest-get-type: ^28.0.2 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - checksum: 101e0090de300bcafedb7dbfd19223368a2251ce5fe0105bbb6de5720100b89fb6b64290ebfb42febc048324c76d6a4979cdc4b61eb77747857daf7a5de9b03d + "@jest/expect-utils": ^29.5.0 + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + checksum: 58f70b38693df6e5c6892db1bcd050f0e518d6f785175dc53917d4fa6a7359a048e5690e19ddcb96b65c4493881dd89a3dabdab1a84dfa55c10cdbdabf37b2d7 languageName: node linkType: hard @@ -4331,7 +4293,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.9": +"fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.9": version: 3.2.12 resolution: "fast-glob@npm:3.2.12" dependencies: @@ -4367,15 +4329,6 @@ __metadata: languageName: node linkType: hard -"fb-watchman@npm:^2.0.0": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: 2.1.1 - checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 - languageName: node - linkType: hard - "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -4417,16 +4370,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: ^5.0.0 - path-exists: ^4.0.0 - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - "find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -4447,7 +4390,7 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.1.0": +"flatted@npm:^3.1.0, flatted@npm:^3.2.7": version: 3.2.7 resolution: "flatted@npm:3.2.7" checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 @@ -4473,6 +4416,16 @@ __metadata: languageName: node linkType: hard +"foreground-child@npm:^2.0.0": + version: 2.0.0 + resolution: "foreground-child@npm:2.0.0" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^3.0.2 + checksum: f77ec9aff621abd6b754cb59e690743e7639328301fbea6ff09df27d2befaf7dd5b77cec51c32323d73a81a7d91caaf9413990d305cbe3d873eec4fe58960956 + languageName: node + linkType: hard + "form-data-encoder@npm:^2.1.2": version: 2.1.4 resolution: "form-data-encoder@npm:2.1.4" @@ -4512,12 +4465,10 @@ __metadata: linkType: hard "framer-motion@npm:^9.0.2": - version: 9.0.4 - resolution: "framer-motion@npm:9.0.4" + version: 9.1.7 + resolution: "framer-motion@npm:9.1.7" dependencies: "@emotion/is-prop-valid": ^0.8.2 - "@motionone/dom": ^10.15.3 - hey-listen: ^1.0.8 tslib: ^2.4.0 peerDependencies: react: ^18.0.0 @@ -4525,7 +4476,14 @@ __metadata: dependenciesMeta: "@emotion/is-prop-valid": optional: true - checksum: 9ef23d81c78785dd2f7f278bad133d96c22fd3a9dcc310521ea220873b0a923ca927dc2d3e8000e221edfcc5bfd6272f752435472e3a8f9b1ef476202ede1ce2 + checksum: 8ab21a2c15eb2494644b09c91c91aec3c01575e2148ff17621df4fca44bc64a8c03bc1cf6a5261ec0cebb7504fea8d75480e93b1799e8842337f8b1863af8c14 + languageName: node + linkType: hard + +"fresh@npm:^0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 languageName: node linkType: hard @@ -4552,7 +4510,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": +"fsevents@npm:~2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" dependencies: @@ -4562,7 +4520,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": +"fsevents@patch:fsevents@~2.3.2#~builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" dependencies: @@ -4627,6 +4585,13 @@ __metadata: languageName: node linkType: hard +"get-func-name@npm:^2.0.0": + version: 2.0.0 + resolution: "get-func-name@npm:2.0.0" + checksum: 8d82e69f3e7fab9e27c547945dfe5cc0c57fc0adf08ce135dddb01081d75684a03e7a0487466f478872b341d52ac763ae49e660d01ab83741f74932085f693c3 + languageName: node + linkType: hard + "get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": version: 1.2.0 resolution: "get-intrinsic@npm:1.2.0" @@ -4638,10 +4603,10 @@ __metadata: languageName: node linkType: hard -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 +"get-nonce@npm:^1.0.0": + version: 1.0.1 + resolution: "get-nonce@npm:1.0.1" + checksum: e2614e43b4694c78277bb61b0f04583d45786881289285c73770b07ded246a98be7e1f78b940c80cbe6f2b07f55f0b724e6db6fd6f1bcbd1e8bdac16521074ed languageName: node linkType: hard @@ -4654,7 +4619,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": +"get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad @@ -4807,14 +4772,14 @@ __metadata: languageName: node linkType: hard -"got@npm:^12.1.0, got@npm:^12.5.0, got@npm:^12.5.2": - version: 12.5.3 - resolution: "got@npm:12.5.3" +"got@npm:^12.1.0, got@npm:^12.5.0, got@npm:^12.5.2, got@npm:^12.6.0": + version: 12.6.0 + resolution: "got@npm:12.6.0" dependencies: "@sindresorhus/is": ^5.2.0 "@szmarczak/http-timer": ^5.0.1 cacheable-lookup: ^7.0.0 - cacheable-request: ^10.2.1 + cacheable-request: ^10.2.8 decompress-response: ^6.0.0 form-data-encoder: ^2.1.2 get-stream: ^6.0.1 @@ -4822,14 +4787,14 @@ __metadata: lowercase-keys: ^3.0.0 p-cancelable: ^3.0.0 responselike: ^3.0.0 - checksum: e35ea3ccdb5f2c36d0bb9648a6a87300d017900ce2e647ad95f54a6fb674a82fe7d53b2c838542d15a9fa25290cc5361d6f82cadac3e94b2e91d93b5670cf304 + checksum: 3621897067068dcb3578d05535cfb10f60aac07198032b3349a488f5741964e7f63d6e37c976840f1bcaaf42f5c049ed3c6d8e0d6c622b74639ca9319ad178a1 languageName: node linkType: hard "graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": - version: 4.2.10 - resolution: "graceful-fs@npm:4.2.10" - checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 languageName: node linkType: hard @@ -4849,6 +4814,21 @@ __metadata: languageName: node linkType: hard +"happy-dom@npm:^8.9.0": + version: 8.9.0 + resolution: "happy-dom@npm:8.9.0" + dependencies: + css.escape: ^1.5.1 + he: ^1.2.0 + iconv-lite: ^0.6.3 + node-fetch: ^2.x.x + webidl-conversions: ^7.0.0 + whatwg-encoding: ^2.0.0 + whatwg-mimetype: ^3.0.0 + checksum: 2a9d853199e924e4445c11844a3d0fdd75b9831edab4c5dda52c4725c4f7889cd919814333162b70b3ae43884ec70ed50fbc22564eb94ba09408218922870a34 + languageName: node + linkType: hard + "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -4918,10 +4898,12 @@ __metadata: languageName: node linkType: hard -"hey-listen@npm:^1.0.8": - version: 1.0.8 - resolution: "hey-listen@npm:1.0.8" - checksum: 6bad60b367688f5348e25e7ca3276a74b59ac5a09b0455e6ff8ab7d4a9e38cd2116c708a7dcd8a954d27253ce1d8717ec891d175723ea739885b828cf44e4072 +"he@npm:^1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 languageName: node linkType: hard @@ -4942,24 +4924,30 @@ __metadata: "@ctrl/qbittorrent": ^4.1.0 "@ctrl/shared-torrent": ^4.1.1 "@ctrl/transmission": ^4.1.1 - "@emotion/react": ^11.10.5 + "@emotion/react": ^11.10.6 "@emotion/server": ^11.10.0 "@jellyfin/sdk": ^0.7.0 - "@mantine/core": ^5.9.3 - "@mantine/dates": ^5.9.3 - "@mantine/dropzone": ^5.9.3 - "@mantine/form": ^5.9.3 - "@mantine/hooks": ^5.9.3 - "@mantine/modals": ^5.9.3 - "@mantine/next": ^5.9.3 - "@mantine/notifications": ^5.9.3 + "@mantine/core": ^6.0.0 + "@mantine/dates": ^6.0.0 + "@mantine/dropzone": ^6.0.0 + "@mantine/form": ^6.0.0 + "@mantine/hooks": ^6.0.0 + "@mantine/modals": ^6.0.0 + "@mantine/next": ^6.0.0 + "@mantine/notifications": ^6.0.0 "@next/bundle-analyzer": ^12.1.4 "@next/eslint-plugin-next": ^12.1.4 "@nivo/core": ^0.80.0 "@nivo/line": ^0.80.0 + "@react-native-async-storage/async-storage": ^1.18.1 "@tabler/icons": ^1.106.0 + "@tanstack/query-async-storage-persister": ^4.27.1 + "@tanstack/query-sync-storage-persister": ^4.27.1 "@tanstack/react-query": ^4.2.1 "@tanstack/react-query-devtools": ^4.24.4 + "@tanstack/react-query-persist-client": ^4.28.0 + "@testing-library/jest-dom": ^5.16.5 + "@testing-library/react": ^14.0.0 "@types/dockerode": ^3.3.9 "@types/node": 17.0.1 "@types/prismjs": ^1.26.0 @@ -4968,6 +4956,9 @@ __metadata: "@types/video.js": ^7.3.51 "@typescript-eslint/eslint-plugin": ^5.30.7 "@typescript-eslint/parser": ^5.30.7 + "@vitejs/plugin-react": ^3.1.0 + "@vitest/coverage-c8": ^0.29.3 + "@vitest/ui": ^0.29.3 axios: ^0.27.2 consola: ^2.15.3 cookies-next: ^2.1.1 @@ -4978,20 +4969,21 @@ __metadata: eslint-config-airbnb-typescript: ^17.0.0 eslint-config-mantine: ^2.0.0 eslint-plugin-import: ^2.26.0 - eslint-plugin-jest: ^26.6.0 eslint-plugin-jsx-a11y: ^6.6.1 eslint-plugin-react: ^7.30.1 eslint-plugin-react-hooks: ^4.6.0 eslint-plugin-testing-library: ^5.5.1 eslint-plugin-unused-imports: ^2.0.0 + eslint-plugin-vitest: ^0.0.54 fily-publish-gridstack: ^0.0.13 framer-motion: ^9.0.2 + happy-dom: ^8.9.0 html-entities: ^2.3.3 i18next: ^21.9.1 - jest: ^28.1.3 js-file-download: ^0.4.12 - next: ^13.1.6 + next: ^13.2.1 next-i18next: ^11.3.0 + node-mocks-http: ^1.12.2 nzbget-api: ^0.0.3 prettier: ^2.7.1 prismjs: ^1.29.0 @@ -5001,12 +4993,15 @@ __metadata: rss-parser: ^3.12.0 sabnzbd-api: ^1.5.0 sass: ^1.56.1 - turbo: ^1.7.4 + turbo: latest typescript: ^4.7.4 uuid: ^8.3.2 video.js: ^8.0.3 + vitest: ^0.29.3 + vitest-fetch-mock: ^0.2.2 xml-js: ^1.6.11 yarn: ^1.22.19 + zod: ^3.21.4 zustand: ^4.1.4 languageName: unknown linkType: soft @@ -5133,13 +5128,6 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^2.1.0": - version: 2.1.0 - resolution: "human-signals@npm:2.1.0" - checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 - languageName: node - linkType: hard - "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" @@ -5165,7 +5153,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:^0.6.2": +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: @@ -5189,9 +5177,9 @@ __metadata: linkType: hard "immutable@npm:^4.0.0": - version: 4.2.4 - resolution: "immutable@npm:4.2.4" - checksum: 3be84eded37b05e65cad57bfba630bc1bf170c498b7472144bc02d2650cc9baef79daf03574a9c2e41d195ebb55a1c12c9b312f41ee324b653927b24ad8bcaa7 + version: 4.3.0 + resolution: "immutable@npm:4.3.0" + checksum: bbd7ea99e2752e053323543d6ff1cc71a4b4614fa6121f321ca766db2bd2092f3f1e0a90784c5431350b7344a4f792fa002eac227062d59b9377b6c09063b58b languageName: node linkType: hard @@ -5205,18 +5193,6 @@ __metadata: languageName: node linkType: hard -"import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: ^4.2.0 - resolve-cwd: ^3.0.0 - bin: - import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd - languageName: node - linkType: hard - "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -5269,7 +5245,7 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4": +"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": version: 1.0.5 resolution: "internal-slot@npm:1.0.5" dependencies: @@ -5287,6 +5263,15 @@ __metadata: languageName: node linkType: hard +"invariant@npm:^2.2.4": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: ^1.0.0 + checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + languageName: node + linkType: hard + "ip@npm:^2.0.0": version: 2.0.0 resolution: "ip@npm:2.0.0" @@ -5304,14 +5289,14 @@ __metadata: languageName: node linkType: hard -"is-array-buffer@npm:^3.0.1": - version: 3.0.1 - resolution: "is-array-buffer@npm:3.0.1" +"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": + version: 3.0.2 + resolution: "is-array-buffer@npm:3.0.2" dependencies: call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 + get-intrinsic: ^1.2.0 is-typed-array: ^1.1.10 - checksum: f26ab87448e698285daf707e52a533920449f7abf63714140ffab9d5571aa5a71ac2fa2677e8b793ad0d5d3e40078d4d2c8a0ab39c957e3cfc6513bb6c9dfdc9 + checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 languageName: node linkType: hard @@ -5389,6 +5374,13 @@ __metadata: languageName: node linkType: hard +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d + languageName: node + linkType: hard + "is-function@npm:^1.0.1": version: 1.0.2 resolution: "is-function@npm:1.0.2" @@ -5396,13 +5388,6 @@ __metadata: languageName: node linkType: hard -"is-generator-fn@npm:^2.0.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 - languageName: node - linkType: hard - "is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" @@ -5456,6 +5441,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^2.1.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa + languageName: node + linkType: hard + "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -5482,13 +5474,6 @@ __metadata: languageName: node linkType: hard -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 - languageName: node - linkType: hard - "is-string@npm:^1.0.5, is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" @@ -5588,19 +5573,6 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" - dependencies: - "@babel/core": ^7.12.3 - "@babel/parser": ^7.14.7 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-coverage: ^3.2.0 - semver: ^6.3.0 - checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 - languageName: node - linkType: hard - "istanbul-lib-report@npm:^3.0.0": version: 3.0.0 resolution: "istanbul-lib-report@npm:3.0.0" @@ -5612,18 +5584,7 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" - dependencies: - debug: ^4.1.1 - istanbul-lib-coverage: ^3.0.0 - source-map: ^0.6.1 - checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.3": +"istanbul-reports@npm:^3.1.4": version: 3.1.5 resolution: "istanbul-reports@npm:3.1.5" dependencies: @@ -5633,442 +5594,65 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-changed-files@npm:28.1.3" - dependencies: - execa: ^5.0.0 - p-limit: ^3.1.0 - checksum: c78af14a68b9b19101623ae7fde15a2488f9b3dbe8cca12a05c4a223bc9bfd3bf41ee06830f20fb560c52434435d6153c9cc6cf450b1f7b03e5e7f96a953a6a6 - languageName: node - linkType: hard - -"jest-circus@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-circus@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/expect": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - dedent: ^0.7.0 - is-generator-fn: ^2.0.0 - jest-each: ^28.1.3 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-runtime: ^28.1.3 - jest-snapshot: ^28.1.3 - jest-util: ^28.1.3 - p-limit: ^3.1.0 - pretty-format: ^28.1.3 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: b635e60a9c92adaefc3f24def8eba691e7c2fdcf6c9fa640cddf2eb8c8b26ee62eab73ebb88798fd7c52a74c1495a984e39b748429b610426f02e9d3d56e09b2 - languageName: node - linkType: hard - -"jest-cli@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-cli@npm:28.1.3" - dependencies: - "@jest/core": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - import-local: ^3.0.2 - jest-config: ^28.1.3 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - prompts: ^2.0.1 - yargs: ^17.3.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: fb424576bf38346318daddee3fcc597cd78cb8dda1759d09c529d8ba1a748f2765c17b00671072a838826e59465a810ff8a232bc6ba2395c131bf3504425a363 - languageName: node - linkType: hard - -"jest-config@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-config@npm:28.1.3" - dependencies: - "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^28.1.3 - "@jest/types": ^28.1.3 - babel-jest: ^28.1.3 - chalk: ^4.0.0 - ci-info: ^3.2.0 - deepmerge: ^4.2.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-circus: ^28.1.3 - jest-environment-node: ^28.1.3 - jest-get-type: ^28.0.2 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.3 - jest-runner: ^28.1.3 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - micromatch: ^4.0.4 - parse-json: ^5.2.0 - pretty-format: ^28.1.3 - slash: ^3.0.0 - strip-json-comments: ^3.1.1 - peerDependencies: - "@types/node": "*" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - ts-node: - optional: true - checksum: ddabffd3a3a8cb6c2f58f06cdf3535157dbf8c70bcde3e5c3de7bee6a8d617840ffc8cffb0083e38c6814f2a08c225ca19f58898efaf4f351af94679f22ce6bc - languageName: node - linkType: hard - -"jest-diff@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-diff@npm:28.1.3" +"jest-diff@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-diff@npm:29.5.0" dependencies: chalk: ^4.0.0 - diff-sequences: ^28.1.1 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: fa8583e0ccbe775714ce850b009be1b0f6b17a4b6759f33ff47adef27942ebc610dbbcc8a5f7cfb7f12b3b3b05afc9fb41d5f766674616025032ff1e4f9866e0 + diff-sequences: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.5.0 + checksum: dfd0f4a299b5d127779c76b40106c37854c89c3e0785098c717d52822d6620d227f6234c3a9291df204d619e799e3654159213bf93220f79c8e92a55475a3d39 languageName: node linkType: hard -"jest-docblock@npm:^28.1.1": - version: 28.1.1 - resolution: "jest-docblock@npm:28.1.1" - dependencies: - detect-newline: ^3.0.0 - checksum: 22fca68d988ecb2933bc65f448facdca85fc71b4bd0a188ea09a5ae1b0cc3a049a2a6ec7e7eaa2542c1d5cb5e5145e420a3df4fa280f5070f486c44da1d36151 +"jest-get-type@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-get-type@npm:29.4.3" + checksum: 6ac7f2dde1c65e292e4355b6c63b3a4897d7e92cb4c8afcf6d397f2682f8080e094c8b0b68205a74d269882ec06bf696a9de6cd3e1b7333531e5ed7b112605ce languageName: node linkType: hard -"jest-each@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-each@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - chalk: ^4.0.0 - jest-get-type: ^28.0.2 - jest-util: ^28.1.3 - pretty-format: ^28.1.3 - checksum: 5c5b8ccb1484e58b027bea682cfa020a45e5bf5379cc7c23bdec972576c1dc3c3bf03df2b78416cefc1a58859dd33b7cf5fff54c370bc3c0f14a3e509eb87282 - languageName: node - linkType: hard - -"jest-environment-node@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-environment-node@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/fake-timers": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - jest-mock: ^28.1.3 - jest-util: ^28.1.3 - checksum: 1048fe306a6a8b0880a4c66278ebb57479f29c12cff89aab3aa79ab77a8859cf17ab8aa9919fd21c329a7db90e35581b43664e694ad453d5b04e00f3c6420469 - languageName: node - linkType: hard - -"jest-get-type@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-get-type@npm:28.0.2" - checksum: 5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd - languageName: node - linkType: hard - -"jest-haste-map@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-haste-map@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/graceful-fs": ^4.1.3 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^28.0.2 - jest-util: ^28.1.3 - jest-worker: ^28.1.3 - micromatch: ^4.0.4 - walker: ^1.0.8 - dependenciesMeta: - fsevents: - optional: true - checksum: d05fdc108645fc2b39fcd4001952cc7a8cb550e93494e98c1e9ab1fc542686f6ac67177c132e564cf94fe8f81503f3f8db8b825b9b713dc8c5748aec63ba4688 - languageName: node - linkType: hard - -"jest-leak-detector@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-leak-detector@npm:28.1.3" - dependencies: - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: 2e976a4880cf9af11f53a19f6a3820e0f90b635a900737a5427fc42e337d5628ba446dcd7c020ecea3806cf92bc0bbf6982ed62a9cd84e5a13d8751aa30fbbb7 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-matcher-utils@npm:28.1.3" +"jest-matcher-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-matcher-utils@npm:29.5.0" dependencies: chalk: ^4.0.0 - jest-diff: ^28.1.3 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: 6b34f0cf66f6781e92e3bec97bf27796bd2ba31121e5c5997218d9adba6deea38a30df5203937d6785b68023ed95cbad73663cc9aad6fb0cb59aeb5813a58daf + jest-diff: ^29.5.0 + jest-get-type: ^29.4.3 + pretty-format: ^29.5.0 + checksum: 1d3e8c746e484a58ce194e3aad152eff21fd0896e8b8bf3d4ab1a4e2cbfed95fb143646f4ad9fdf6e42212b9e8fc033268b58e011b044a9929df45485deb5ac9 languageName: node linkType: hard -"jest-message-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-message-util@npm:28.1.3" +"jest-message-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-message-util@npm:29.5.0" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^28.1.3 + "@jest/types": ^29.5.0 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^28.1.3 + pretty-format: ^29.5.0 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 1f266854166dcc6900d75a88b54a25225a2f3710d463063ff1c99021569045c35c7d58557b25447a17eb3a65ce763b2f9b25550248b468a9d4657db365f39e96 + checksum: daddece6bbf846eb6a2ab9be9f2446e54085bef4e5cecd13d2a538fa9c01cb89d38e564c6b74fd8e12d37ed9eface8a362240ae9f21d68b214590631e7a0d8bf languageName: node linkType: hard -"jest-mock@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-mock@npm:28.1.3" +"jest-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-util@npm:29.5.0" dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - checksum: a573bf8e5f12f4c29c661266c31b5c6b69a28d3195b83049983bce025b2b1a0152351567e89e63b102ef817034c2a3aa97eda4e776f3bae2aee54c5765573aa7 - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 - languageName: node - linkType: hard - -"jest-regex-util@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-regex-util@npm:28.0.2" - checksum: 0ea8c5c82ec88bc85e273c0ec82e0c0f35f7a1e2d055070e50f0cc2a2177f848eec55f73e37ae0d045c3db5014c42b2f90ac62c1ab3fdb354d2abd66a9e08add - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-resolve-dependencies@npm:28.1.3" - dependencies: - jest-regex-util: ^28.0.2 - jest-snapshot: ^28.1.3 - checksum: 4eea9ec33aefc1c71dc5956391efbcc7be76bda986b366ab3931d99c5f7ed01c9ebd7520e405ea2c76e1bb2c7ce504be6eca2b9831df16564d1e625500f3bfe7 - languageName: node - linkType: hard - -"jest-resolve@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-resolve@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - jest-pnp-resolver: ^1.2.2 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - resolve: ^1.20.0 - resolve.exports: ^1.1.0 - slash: ^3.0.0 - checksum: df61a490c93f4f4cf52135e43d6a4fcacb07b0b7d4acc6319e9289529c1d14f2d8e1638e095dbf96f156834802755e38db68caca69dba21a3261ee711d4426b6 - languageName: node - linkType: hard - -"jest-runner@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-runner@npm:28.1.3" - dependencies: - "@jest/console": ^28.1.3 - "@jest/environment": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - emittery: ^0.10.2 - graceful-fs: ^4.2.9 - jest-docblock: ^28.1.1 - jest-environment-node: ^28.1.3 - jest-haste-map: ^28.1.3 - jest-leak-detector: ^28.1.3 - jest-message-util: ^28.1.3 - jest-resolve: ^28.1.3 - jest-runtime: ^28.1.3 - jest-util: ^28.1.3 - jest-watcher: ^28.1.3 - jest-worker: ^28.1.3 - p-limit: ^3.1.0 - source-map-support: 0.5.13 - checksum: 32405cd970fa6b11e039192dae699fd1bcc6f61f67d50605af81d193f24dd4373b25f5fcc1c571a028ec1b02174e8a4b6d0d608772063fb06f08a5105693533b - languageName: node - linkType: hard - -"jest-runtime@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-runtime@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/fake-timers": ^28.1.3 - "@jest/globals": ^28.1.3 - "@jest/source-map": ^28.1.2 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - chalk: ^4.0.0 - cjs-module-lexer: ^1.0.0 - collect-v8-coverage: ^1.0.0 - execa: ^5.0.0 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - jest-message-util: ^28.1.3 - jest-mock: ^28.1.3 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.3 - jest-snapshot: ^28.1.3 - jest-util: ^28.1.3 - slash: ^3.0.0 - strip-bom: ^4.0.0 - checksum: b17c40af858e74dafa4f515ef3711c1e9ef3d4ad7d74534ee0745422534bc04fd166d4eceb62a3aa7dc951505d6f6d2a81d16e90bebb032be409ec0500974a36 - languageName: node - linkType: hard - -"jest-snapshot@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-snapshot@npm:28.1.3" - dependencies: - "@babel/core": ^7.11.6 - "@babel/generator": ^7.7.2 - "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/traverse": ^7.7.2 - "@babel/types": ^7.3.3 - "@jest/expect-utils": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/babel__traverse": ^7.0.6 - "@types/prettier": ^2.1.5 - babel-preset-current-node-syntax: ^1.0.0 - chalk: ^4.0.0 - expect: ^28.1.3 - graceful-fs: ^4.2.9 - jest-diff: ^28.1.3 - jest-get-type: ^28.0.2 - jest-haste-map: ^28.1.3 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - natural-compare: ^1.4.0 - pretty-format: ^28.1.3 - semver: ^7.3.5 - checksum: 2a46a5493f1fb50b0a236a21f25045e7f46a244f9f3ae37ef4fbcd40249d0d68bb20c950ce77439e4e2cac985b05c3061c90b34739bf6069913a1199c8c716e1 - languageName: node - linkType: hard - -"jest-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-util@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 + "@jest/types": ^29.5.0 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: fd6459742c941f070223f25e38a2ac0719aad92561591e9fb2a50d602a5d19d754750b79b4074327a42b00055662b95da3b006542ceb8b54309da44d4a62e721 - languageName: node - linkType: hard - -"jest-validate@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-validate@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - camelcase: ^6.2.0 - chalk: ^4.0.0 - jest-get-type: ^28.0.2 - leven: ^3.1.0 - pretty-format: ^28.1.3 - checksum: 95e0513b3803c3372a145cda86edbdb33d9dfeaa18818176f2d581e821548ceac9a179f065b6d4671a941de211354efd67f1fff8789a4fb89962565c85f646db - languageName: node - linkType: hard - -"jest-watcher@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-watcher@npm:28.1.3" - dependencies: - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - emittery: ^0.10.2 - jest-util: ^28.1.3 - string-length: ^4.0.1 - checksum: 8f6d674a4865e7df251f71544f1b51f06fd36b5a3a61f2ac81aeb81fa2a196be354fba51d0f97911c88f67cd254583b3a22ee124bf2c5b6ee2fadec27356c207 - languageName: node - linkType: hard - -"jest-worker@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-worker@npm:28.1.3" - dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: e921c9a1b8f0909da9ea07dbf3592f95b653aef3a8bb0cbcd20fc7f9a795a1304adecac31eecb308992c167e8d7e75c522061fec38a5928ace0f9571c90169ca - languageName: node - linkType: hard - -"jest@npm:^28.1.3": - version: 28.1.3 - resolution: "jest@npm:28.1.3" - dependencies: - "@jest/core": ^28.1.3 - "@jest/types": ^28.1.3 - import-local: ^3.0.2 - jest-cli: ^28.1.3 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: b9dcb542eb7c16261c281cdc2bf37155dbb3f1205bae0b567f05051db362c85ddd4b765f126591efb88f6d298eb10336d0aa6c7d5373b4d53f918137a9a70182 + checksum: fd9212950d34d2ecad8c990dda0d8ea59a8a554b0c188b53ea5d6c4a0829a64f2e1d49e6e85e812014933d17426d7136da4785f9cf76fff1799de51b88bc85d3 languageName: node linkType: hard @@ -6080,9 +5664,9 @@ __metadata: linkType: hard "js-sdsl@npm:^4.1.4": - version: 4.3.0 - resolution: "js-sdsl@npm:4.3.0" - checksum: ce908257cf6909e213af580af3a691a736f5ee8b16315454768f917a682a4ea0c11bde1b241bbfaecedc0eb67b72101b2c2df2ffaed32aed5d539fca816f054e + version: 4.4.0 + resolution: "js-sdsl@npm:4.4.0" + checksum: 7bb08a2d746ab7ff742720339aa006c631afe05e77d11eda988c1c35fae8e03e492e4e347e883e786e3ce6170685d4780c125619111f0730c11fdb41b04059c7 languageName: node linkType: hard @@ -6093,18 +5677,6 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: ^1.0.7 - esprima: ^4.0.0 - bin: - js-yaml: bin/js-yaml.js - checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c - languageName: node - linkType: hard - "js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -6153,7 +5725,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^1.0.1": +"json5@npm:^1.0.2": version: 1.0.2 resolution: "json5@npm:1.0.2" dependencies: @@ -6173,6 +5745,13 @@ __metadata: languageName: node linkType: hard +"jsonc-parser@npm:^3.2.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 + languageName: node + linkType: hard + "jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.3": version: 3.3.3 resolution: "jsx-ast-utils@npm:3.3.3" @@ -6199,13 +5778,6 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 - languageName: node - linkType: hard - "klona@npm:^2.0.5": version: 2.0.6 resolution: "klona@npm:2.0.6" @@ -6229,13 +5801,6 @@ __metadata: languageName: node linkType: hard -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 - languageName: node - linkType: hard - "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" @@ -6253,12 +5818,10 @@ __metadata: languageName: node linkType: hard -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: ^4.1.0 - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 +"local-pkg@npm:^0.4.2": + version: 0.4.3 + resolution: "local-pkg@npm:0.4.3" + checksum: 7825aca531dd6afa3a3712a0208697aa4a5cd009065f32e3fb732aafcc42ed11f277b5ac67229222e96f4def55197171cdf3d5522d0381b489d2e5547b407d55 languageName: node linkType: hard @@ -6278,14 +5841,14 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.20, lodash@npm:^4.17.21": +"lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 languageName: node linkType: hard -"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: @@ -6296,6 +5859,15 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^2.3.1, loupe@npm:^2.3.6": + version: 2.3.6 + resolution: "loupe@npm:2.3.6" + dependencies: + get-func-name: ^2.0.0 + checksum: cc83f1b124a1df7384601d72d8d1f5fe95fd7a8185469fec48bb2e4027e45243949e7a013e8d91051a138451ff0552310c32aa9786e60b6a30d1e801bdc2163f + languageName: node + linkType: hard + "lowercase-keys@npm:^2.0.0": version: 2.0.0 resolution: "lowercase-keys@npm:2.0.0" @@ -6329,9 +5901,18 @@ __metadata: linkType: hard "lru-cache@npm:^7.7.1": - version: 7.16.1 - resolution: "lru-cache@npm:7.16.1" - checksum: 64618e3ed4fd1203afedd9bbf5247921b1419f8e3100f20e58e5f04e741f8287bd7d04fefaad332411bb53b3a73445714b235de750cf5d310cba1fa23bd82795 + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + +"lz-string@npm:^1.5.0": + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" + bin: + lz-string: bin/bin.js + checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d languageName: node linkType: hard @@ -6346,6 +5927,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.27.0": + version: 0.27.0 + resolution: "magic-string@npm:0.27.0" + dependencies: + "@jridgewell/sourcemap-codec": ^1.4.13 + checksum: 273faaa50baadb7a2df6e442eac34ad611304fc08fe16e24fe2e472fd944bfcb73ffb50d2dc972dc04e92784222002af46868cb9698b1be181c81830fd95a13e + languageName: node + linkType: hard + "make-dir@npm:^3.0.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -6379,19 +5969,26 @@ __metadata: languageName: node linkType: hard -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: 1.0.5 - checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 languageName: node linkType: hard -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 +"merge-descriptors@npm:^1.0.1": + version: 1.0.1 + resolution: "merge-descriptors@npm:1.0.1" + checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 + languageName: node + linkType: hard + +"merge-options@npm:^3.0.4": + version: 3.0.4 + resolution: "merge-options@npm:3.0.4" + dependencies: + is-plain-obj: ^2.1.0 + checksum: d86ddb3dd6e85d558dbf25dc944f3527b6bacb944db3fdda6e84a3f59c4e4b85231095f58b835758b9a57708342dee0f8de0dffa352974a48221487fe9f4584f languageName: node linkType: hard @@ -6402,6 +5999,13 @@ __metadata: languageName: node linkType: hard +"methods@npm:^1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a + languageName: node + linkType: hard + "micromatch@npm:^4.0.4": version: 4.0.5 resolution: "micromatch@npm:4.0.5" @@ -6419,7 +6023,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12": +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -6428,10 +6032,12 @@ __metadata: languageName: node linkType: hard -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a +"mime@npm:^1.3.4": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 languageName: node linkType: hard @@ -6465,6 +6071,13 @@ __metadata: languageName: node linkType: hard +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + "minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -6551,9 +6164,9 @@ __metadata: linkType: hard "minipass@npm:^4.0.0": - version: 4.0.3 - resolution: "minipass@npm:4.0.3" - checksum: a09f405e2f380ae7f6ee0cbb53b45c1fcc1b6c70fc3896f4d20649d92a10e61892c57bd9960a64cedf6c90b50022cb6c195905b515039c335b423202f99e6f18 + version: 4.2.5 + resolution: "minipass@npm:4.2.5" + checksum: 4f9c19af23a5d4a9e7156feefc9110634b178a8cff8f8271af16ec5ebf7e221725a97429952c856f5b17b30c2065ebd24c81722d90c93d2122611d75b952b48f languageName: node linkType: hard @@ -6583,9 +6196,21 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.1.0, mlly@npm:^1.1.1": + version: 1.2.0 + resolution: "mlly@npm:1.2.0" + dependencies: + acorn: ^8.8.2 + pathe: ^1.1.0 + pkg-types: ^1.0.2 + ufo: ^1.1.1 + checksum: 640b019eb20e8e556bd623141b861d47e5c05f8af00210376ce1015912695dbd93a38cfe7ba18ca04f00e75645378f0f94a48a90bfa6e1b5dee1f0ec9c14eed1 + languageName: node + linkType: hard + "mpd-parser@npm:^1.0.1": - version: 1.0.1 - resolution: "mpd-parser@npm:1.0.1" + version: 1.1.0 + resolution: "mpd-parser@npm:1.1.0" dependencies: "@babel/runtime": ^7.12.5 "@videojs/vhs-utils": ^3.0.5 @@ -6593,7 +6218,7 @@ __metadata: global: ^4.4.0 bin: mpd-to-m3u8-json: bin/parse.js - checksum: a82c4ba7335d193aa248f4e39d4ad58359c5ff055a50fd574980b2a29318fbaccda9741f2106fe933a46ff5d092a6a78a542912bd3f1046e70b8ae63f80482ee + checksum: f75b4c9a4d7e4ed026ba3a27c8c5fa49afe0cf7c3b3a42c1407d4f231f1cb0dd31cee3741f45ab6bde6363dff4cb3ce3f230d1d8e76cfaaa35cd6b04d2558761 languageName: node linkType: hard @@ -6628,15 +6253,15 @@ __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" +"mux.js@npm:6.3.0, mux.js@npm:^6.2.0": + version: 6.3.0 + resolution: "mux.js@npm:6.3.0" dependencies: "@babel/runtime": ^7.11.2 global: ^4.4.0 bin: muxjs-transmux: bin/transmux.js - checksum: ecf54ead3480351967cbf6e54b57e38406b0ac5bc6dc194ae59e77e80ae6e6f6ab6fa42c15f0b0938cd0cce866fb7249c571be41d6cf78ee4531ecdfe65cfef9 + checksum: dc914bc12ee7d1e8143dc124697db87e41b57c6735a5a0024d5592e9ea424e25f5c19fc6fd7f66333621bb2c5e86120de862049eb62f2c8ac5a17dd5dc54b194 languageName: node linkType: hard @@ -6650,11 +6275,11 @@ __metadata: linkType: hard "nanoid@npm:^3.3.4": - version: 3.3.4 - resolution: "nanoid@npm:3.3.4" + version: 3.3.6 + resolution: "nanoid@npm:3.3.6" bin: nanoid: bin/nanoid.cjs - checksum: 2fddd6dee994b7676f008d3ffa4ab16035a754f4bb586c61df5a22cf8c8c94017aadd360368f47d653829e0569a92b129979152ff97af23a558331e47e37cd9c + checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 languageName: node linkType: hard @@ -6672,7 +6297,7 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:^0.6.3": +"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 @@ -6697,29 +6322,30 @@ __metadata: languageName: node linkType: hard -"next@npm:^13.1.6": - version: 13.1.6 - resolution: "next@npm:13.1.6" +"next@npm:^13.2.1": + version: 13.2.4 + resolution: "next@npm:13.2.4" dependencies: - "@next/env": 13.1.6 - "@next/swc-android-arm-eabi": 13.1.6 - "@next/swc-android-arm64": 13.1.6 - "@next/swc-darwin-arm64": 13.1.6 - "@next/swc-darwin-x64": 13.1.6 - "@next/swc-freebsd-x64": 13.1.6 - "@next/swc-linux-arm-gnueabihf": 13.1.6 - "@next/swc-linux-arm64-gnu": 13.1.6 - "@next/swc-linux-arm64-musl": 13.1.6 - "@next/swc-linux-x64-gnu": 13.1.6 - "@next/swc-linux-x64-musl": 13.1.6 - "@next/swc-win32-arm64-msvc": 13.1.6 - "@next/swc-win32-ia32-msvc": 13.1.6 - "@next/swc-win32-x64-msvc": 13.1.6 + "@next/env": 13.2.4 + "@next/swc-android-arm-eabi": 13.2.4 + "@next/swc-android-arm64": 13.2.4 + "@next/swc-darwin-arm64": 13.2.4 + "@next/swc-darwin-x64": 13.2.4 + "@next/swc-freebsd-x64": 13.2.4 + "@next/swc-linux-arm-gnueabihf": 13.2.4 + "@next/swc-linux-arm64-gnu": 13.2.4 + "@next/swc-linux-arm64-musl": 13.2.4 + "@next/swc-linux-x64-gnu": 13.2.4 + "@next/swc-linux-x64-musl": 13.2.4 + "@next/swc-win32-arm64-msvc": 13.2.4 + "@next/swc-win32-ia32-msvc": 13.2.4 + "@next/swc-win32-x64-msvc": 13.2.4 "@swc/helpers": 0.4.14 caniuse-lite: ^1.0.30001406 postcss: 8.4.14 styled-jsx: 5.1.1 peerDependencies: + "@opentelemetry/api": ^1.4.0 fibers: ">= 3.1.0" node-sass: ^6.0.0 || ^7.0.0 react: ^18.2.0 @@ -6753,6 +6379,8 @@ __metadata: "@next/swc-win32-x64-msvc": optional: true peerDependenciesMeta: + "@opentelemetry/api": + optional: true fibers: optional: true node-sass: @@ -6761,7 +6389,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 584977e382bd826c21e7fc5f67bca50e4d95741a854b1686394d45331404479c7266569671227421975fc18e5cf70769a4ad7edede7450d4497213205bba77c8 + checksum: 8531dee41b60181b582f5ee80858907b102f083ef8808ff9352d589dd39e6b3a96f7a11b3776a03eef3a28430cff768336fa2e3ff2c6f8fcd699fbc891749051 languageName: node linkType: hard @@ -6772,6 +6400,34 @@ __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-fetch@npm:^2.x.x": + version: 2.6.9 + resolution: "node-fetch@npm:2.6.9" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: acb04f9ce7224965b2b59e71b33c639794d8991efd73855b0b250921382b38331ffc9d61bce502571f6cc6e11a8905ca9b1b6d4aeb586ab093e2756a1fd190d0 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 9.3.1 resolution: "node-gyp@npm:9.3.1" @@ -6792,13 +6448,6 @@ __metadata: languageName: node linkType: hard -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e - languageName: node - linkType: hard - "node-json-rpc@npm:0.0.1": version: 0.0.1 resolution: "node-json-rpc@npm:0.0.1" @@ -6806,6 +6455,24 @@ __metadata: languageName: node linkType: hard +"node-mocks-http@npm:^1.12.2": + version: 1.12.2 + resolution: "node-mocks-http@npm:1.12.2" + dependencies: + accepts: ^1.3.7 + content-disposition: ^0.5.3 + depd: ^1.1.0 + fresh: ^0.5.2 + merge-descriptors: ^1.0.1 + methods: ^1.1.2 + mime: ^1.3.4 + parseurl: ^1.3.3 + range-parser: ^1.2.0 + type-is: ^1.6.18 + checksum: 39e50b7146bd37fd56a0588ee3df46fd310f76395d52e9b8889545910aca6cc8e8a41de3cdd3e103903d4bbfc556e67624fcbe934c0bd3b0cca6ee1358a0f440 + languageName: node + linkType: hard + "node-releases@npm:^2.0.8": version: 2.0.10 resolution: "node-releases@npm:2.0.10" @@ -6845,15 +6512,6 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^4.0.1": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: ^3.0.0 - checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 - languageName: node - linkType: hard - "npmlog@npm:^6.0.0": version: 6.0.2 resolution: "npmlog@npm:6.0.2" @@ -6884,7 +6542,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": version: 1.12.3 resolution: "object-inspect@npm:1.12.3" checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db @@ -6979,15 +6637,6 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.2": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: ^2.1.0 - checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 - languageName: node - linkType: hard - "opener@npm:^1.5.2": version: 1.5.2 resolution: "opener@npm:1.5.2" @@ -7025,16 +6674,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: ^2.0.0 - checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": +"p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -7043,12 +6683,12 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" dependencies: - p-limit: ^2.2.0 - checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + yocto-queue: ^1.0.0 + checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b languageName: node linkType: hard @@ -7070,13 +6710,6 @@ __metadata: languageName: node linkType: hard -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae - languageName: node - linkType: hard - "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -7086,7 +6719,7 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": +"parse-json@npm:^5.0.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" dependencies: @@ -7098,6 +6731,13 @@ __metadata: languageName: node linkType: hard +"parseurl@npm:^1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -7112,7 +6752,7 @@ __metadata: languageName: node linkType: hard -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": +"path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 @@ -7133,6 +6773,20 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^1.1.0": + version: 1.1.0 + resolution: "pathe@npm:1.1.0" + checksum: 6b9be9968ea08a90c0824934799707a1c6a1ad22ac1f22080f377e3f75856d5e53a331b01d327329bfce538a14590587cfb250e8e7947f64408797c84c252056 + languageName: node + linkType: hard + +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -7147,13 +6801,6 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.4": - version: 4.0.5 - resolution: "pirates@npm:4.0.5" - checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 - languageName: node - linkType: hard - "pkcs7@npm:^1.0.4": version: 1.0.4 resolution: "pkcs7@npm:1.0.4" @@ -7165,12 +6812,14 @@ __metadata: languageName: node linkType: hard -"pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" +"pkg-types@npm:^1.0.2": + version: 1.0.2 + resolution: "pkg-types@npm:1.0.2" dependencies: - find-up: ^4.0.0 - checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + jsonc-parser: ^3.2.0 + mlly: ^1.1.1 + pathe: ^1.1.0 + checksum: 2d0a70c1721c2ebbe075b912531a4f43136e6658fdcc59dc76c39966201ab5ddf265868d1211943183406d4b70d373c17e3b176487bc2020ea737d030b0fd080 languageName: node linkType: hard @@ -7185,6 +6834,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.21": + version: 8.4.21 + resolution: "postcss@npm:8.4.21" + dependencies: + nanoid: ^3.3.4 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: e39ac60ccd1542d4f9d93d894048aac0d686b3bb38e927d8386005718e6793dbbb46930f0a523fe382f1bbd843c6d980aaea791252bf5e176180e5a4336d9679 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -7193,23 +6853,33 @@ __metadata: linkType: hard "prettier@npm:^2.7.1": - version: 2.8.4 - resolution: "prettier@npm:2.8.4" + version: 2.8.7 + resolution: "prettier@npm:2.8.7" bin: prettier: bin-prettier.js - checksum: c173064bf3df57b6d93d19aa98753b9b9dd7657212e33b41ada8e2e9f9884066bb9ca0b4005b89b3ab137efffdf8fbe0b462785aba20364798ff4303aadda57e + checksum: fdc8f2616f099f5f0d685907f4449a70595a0fc1d081a88919604375989e0d5e9168d6121d8cc6861f21990b31665828e00472544d785d5940ea08a17660c3a6 languageName: node linkType: hard -"pretty-format@npm:^28.1.3": - version: 28.1.3 - resolution: "pretty-format@npm:28.1.3" +"pretty-format@npm:^27.0.2, pretty-format@npm:^27.5.1": + version: 27.5.1 + resolution: "pretty-format@npm:27.5.1" dependencies: - "@jest/schemas": ^28.1.3 ansi-regex: ^5.0.1 ansi-styles: ^5.0.0 + react-is: ^17.0.1 + checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 + languageName: node + linkType: hard + +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.5.0": + version: 29.5.0 + resolution: "pretty-format@npm:29.5.0" + dependencies: + "@jest/schemas": ^29.4.3 + ansi-styles: ^5.0.0 react-is: ^18.0.0 - checksum: e69f857358a3e03d271252d7524bec758c35e44680287f36c1cb905187fbc82da9981a6eb07edfd8a03bc3cbeebfa6f5234c13a3d5b59f2bbdf9b4c4053e0a7f + checksum: 4065356b558e6db25b4d41a01efb386935a6c06a0c9c104ef5ce59f2f476b8210edb8b3949b386e60ada0a6dc5ebcb2e6ccddc8c64dfd1a9943c3c3a9e7eaf89 languageName: node linkType: hard @@ -7251,16 +6921,6 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.0.1": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" - dependencies: - kleur: ^3.0.3 - sisteransi: ^1.0.5 - checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d - languageName: node - linkType: hard - "prop-types@npm:^15.6.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" @@ -7324,6 +6984,13 @@ __metadata: languageName: node linkType: hard +"range-parser@npm:^1.2.0": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 + languageName: node + linkType: hard + "react-dom@npm:^18.2.0": version: 18.2.0 resolution: "react-dom@npm:18.2.0" @@ -7374,6 +7041,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^17.0.1": + version: 17.0.2 + resolution: "react-is@npm:17.0.2" + checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 + languageName: node + linkType: hard + "react-is@npm:^18.0.0": version: 18.2.0 resolution: "react-is@npm:18.2.0" @@ -7395,6 +7069,48 @@ __metadata: languageName: node linkType: hard +"react-refresh@npm:^0.14.0": + version: 0.14.0 + resolution: "react-refresh@npm:0.14.0" + checksum: dc69fa8c993df512f42dd0f1b604978ae89bd747c0ed5ec595c0cc50d535fb2696619ccd98ae28775cc01d0a7c146a532f0f7fb81dc22e1977c242a4912312f4 + languageName: node + linkType: hard + +"react-remove-scroll-bar@npm:^2.3.3": + version: 2.3.4 + resolution: "react-remove-scroll-bar@npm:2.3.4" + dependencies: + react-style-singleton: ^2.2.1 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: b5ce5f2f98d65c97a3e975823ae4043a4ba2a3b63b5ba284b887e7853f051b5cd6afb74abde6d57b421931c52f2e1fdbb625dc858b1cb5a32c27c14ab85649d4 + languageName: node + linkType: hard + +"react-remove-scroll@npm:^2.5.5": + version: 2.5.5 + resolution: "react-remove-scroll@npm:2.5.5" + dependencies: + react-remove-scroll-bar: ^2.3.3 + react-style-singleton: ^2.2.1 + tslib: ^2.1.0 + use-callback-ref: ^1.3.0 + use-sidecar: ^1.1.2 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 2c7fe9cbd766f5e54beb4bec2e2efb2de3583037b23fef8fa511ab426ed7f1ae992382db5acd8ab5bfb030a4b93a06a2ebca41377d6eeaf0e6791bb0a59616a4 + languageName: node + linkType: hard + "react-simple-code-editor@npm:^0.13.1": version: 0.13.1 resolution: "react-simple-code-editor@npm:0.13.1" @@ -7405,6 +7121,23 @@ __metadata: languageName: node linkType: hard +"react-style-singleton@npm:^2.2.1": + version: 2.2.1 + resolution: "react-style-singleton@npm:2.2.1" + dependencies: + get-nonce: ^1.0.0 + invariant: ^2.2.4 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7ee8ef3aab74c7ae1d70ff34a27643d11ba1a8d62d072c767827d9ff9a520905223e567002e0bf6c772929d8ea1c781a3ba0cc4a563e92b1e3dc2eaa817ecbe8 + languageName: node + linkType: hard + "react-textarea-autosize@npm:8.3.4": version: 8.3.4 resolution: "react-textarea-autosize@npm:8.3.4" @@ -7443,8 +7176,8 @@ __metadata: linkType: hard "readable-stream@npm:^2.0.2": - version: 2.3.7 - resolution: "readable-stream@npm:2.3.7" + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" dependencies: core-util-is: ~1.0.0 inherits: ~2.0.3 @@ -7453,18 +7186,18 @@ __metadata: safe-buffer: ~5.1.1 string_decoder: ~1.1.1 util-deprecate: ~1.0.1 - checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 languageName: node linkType: hard "readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": - version: 3.6.0 - resolution: "readable-stream@npm:3.6.0" + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" dependencies: inherits: ^2.0.3 string_decoder: ^1.1.1 util-deprecate: ^1.0.1 - checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d languageName: node linkType: hard @@ -7489,6 +7222,16 @@ __metadata: languageName: node linkType: hard +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: ^4.0.0 + strip-indent: ^3.0.0 + checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b + languageName: node + linkType: hard + "regenerator-runtime@npm:^0.13.11": version: 0.13.11 resolution: "regenerator-runtime@npm:0.13.11" @@ -7507,13 +7250,6 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.2.0": - version: 3.2.0 - resolution: "regexpp@npm:3.2.0" - checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 - languageName: node - linkType: hard - "remove-accents@npm:0.4.2": version: 0.4.2 resolution: "remove-accents@npm:0.4.2" @@ -7542,15 +7278,6 @@ __metadata: languageName: node linkType: hard -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: ^5.0.0 - checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 - languageName: node - linkType: hard - "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -7558,21 +7285,7 @@ __metadata: languageName: node linkType: hard -"resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf - languageName: node - linkType: hard - -"resolve.exports@npm:^1.1.0": - version: 1.1.1 - resolution: "resolve.exports@npm:1.1.1" - checksum: 485aa10082eb388a569d696e17ad7b16f4186efc97dd34eadd029d95b811f21ffee13b1b733198bb4584dbb3cb296aa6f141835221fb7613b9606b84f1386655 - languageName: node - linkType: hard - -"resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1": +"resolve@npm:^1.19.0, resolve@npm:^1.22.1": version: 1.22.1 resolution: "resolve@npm:1.22.1" dependencies: @@ -7598,7 +7311,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": +"resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" dependencies: @@ -7656,7 +7369,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -7667,6 +7380,20 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^3.18.0": + version: 3.20.2 + resolution: "rollup@npm:3.20.2" + dependencies: + fsevents: ~2.3.2 + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 34b0932839b7c2a5d1742fb21ce95a47e0b49a0849f4abee2dccf25833187aa7babb898ca90d4fc761cffa4102b9ed0ac6ad7f6f6b96c8b8e2d67305abc5da65 + languageName: node + linkType: hard + "rss-parser@npm:^3.12.0": version: 3.12.0 resolution: "rss-parser@npm:3.12.0" @@ -7705,6 +7432,13 @@ __metadata: languageName: node linkType: hard +"safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + "safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" @@ -7712,13 +7446,6 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 - languageName: node - linkType: hard - "safe-json-parse@npm:4.0.0": version: 4.0.0 resolution: "safe-json-parse@npm:4.0.0" @@ -7747,15 +7474,15 @@ __metadata: linkType: hard "sass@npm:^1.56.1": - version: 1.58.2 - resolution: "sass@npm:1.58.2" + version: 1.60.0 + resolution: "sass@npm:1.60.0" dependencies: chokidar: ">=3.0.0 <4.0.0" immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: e0febe4d274af7b9490b9207ff7f05762d60df6b2ad307f7a823432cb4e1604eced6784ae635a6b80e4a6177c047f5a9623c53a15aaec3b9bf981ea86e8937a9 + checksum: 06e163c37af466ec194cf2ed8dab616372afeb19322d356947d48ea664fc38398ae77c4d91bea9cb0ace954ce289d5518d0f8555ecc49f6bf2539a8ef52fc580 languageName: node linkType: hard @@ -7829,7 +7556,14 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 8aa5a98640ca09fe00d74416eca97551b3e42991614a3d1b824b115fc1401543650914f651ab1311518177e4d297e80b953f4cd4cd7ea1eabe824e8f2091de01 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -7847,10 +7581,14 @@ __metadata: languageName: node linkType: hard -"sisteransi@npm:^1.0.5": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 +"sirv@npm:^2.0.2": + version: 2.0.2 + resolution: "sirv@npm:2.0.2" + dependencies: + "@polka/url": ^1.0.0-next.20 + mrmime: ^1.0.0 + totalist: ^3.0.0 + checksum: 6982f8ecee9392d246d7eeea8144e50334fe1b46a4fa942995a844ea88c2d518b17cce781bb09926c9a5692a7002a207d18dfd67af2aa538a15e733dc2042298 languageName: node linkType: hard @@ -7861,6 +7599,16 @@ __metadata: languageName: node linkType: hard +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: ^6.0.0 + is-fullwidth-code-point: ^4.0.0 + checksum: 7e600a2a55e333a21ef5214b987c8358fe28bfb03c2867ff2cbf919d62143d1812ac27b4297a077fdaf27a03da3678e49551c93e35f9498a3d90221908a1180e + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -7896,16 +7644,6 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:0.5.13": - version: 0.5.13 - resolution: "source-map-support@npm:0.5.13" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 - languageName: node - linkType: hard - "source-map@npm:^0.5.7": version: 0.5.7 resolution: "source-map@npm:0.5.7" @@ -7913,7 +7651,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1": +"source-map@npm:^0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 @@ -7927,13 +7665,6 @@ __metadata: languageName: node linkType: hard -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 - languageName: node - linkType: hard - "ssh2@npm:^1.11.0": version: 1.11.0 resolution: "ssh2@npm:1.11.0" @@ -7969,6 +7700,20 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 + languageName: node + linkType: hard + +"std-env@npm:^3.3.1": + version: 3.3.2 + resolution: "std-env@npm:3.3.2" + checksum: c02256bb041ba1870d23f8360bc7e47a9cf1fabcd02c8b7c4246d48f2c6bb47b4f45c70964348844e6d36521df84c4a9d09d468654b51e0eb5c600e3392b4570 + languageName: node + linkType: hard + "stop-iteration-iterator@npm:^1.0.0": version: 1.0.0 resolution: "stop-iteration-iterator@npm:1.0.0" @@ -7978,16 +7723,6 @@ __metadata: languageName: node linkType: hard -"string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: ^1.0.2 - strip-ansi: ^6.0.0 - checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 - languageName: node - linkType: hard - "string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -7999,6 +7734,17 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^5.0.0": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + "string.prototype.matchall@npm:^4.0.8": version: 4.0.8 resolution: "string.prototype.matchall@npm:4.0.8" @@ -8015,6 +7761,17 @@ __metadata: languageName: node linkType: hard +"string.prototype.trim@npm:^1.2.7": + version: 1.2.7 + resolution: "string.prototype.trim@npm:1.2.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 05b7b2d6af63648e70e44c4a8d10d8cc457536df78b55b9d6230918bde75c5987f6b8604438c4c8652eb55e4fc9725d2912789eb4ec457d6995f3495af190c09 + languageName: node + linkType: hard + "string.prototype.trimend@npm:^1.0.6": version: 1.0.6 resolution: "string.prototype.trimend@npm:1.0.6" @@ -8071,6 +7828,15 @@ __metadata: languageName: node linkType: hard +"strip-ansi@npm:^7.0.1": + version: 7.0.1 + resolution: "strip-ansi@npm:7.0.1" + dependencies: + ansi-regex: ^6.0.1 + checksum: 257f78fa433520e7f9897722731d78599cb3fce29ff26a20a5e12ba4957463b50a01136f37c43707f4951817a75e90820174853d6ccc240997adc5df8f966039 + languageName: node + linkType: hard + "strip-bom@npm:^3.0.0": version: 3.0.0 resolution: "strip-bom@npm:3.0.0" @@ -8078,17 +7844,12 @@ __metadata: languageName: node linkType: hard -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 - languageName: node - linkType: hard - -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: ^1.0.0 + checksum: 18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 languageName: node linkType: hard @@ -8099,6 +7860,15 @@ __metadata: languageName: node linkType: hard +"strip-literal@npm:^1.0.0": + version: 1.0.1 + resolution: "strip-literal@npm:1.0.1" + dependencies: + acorn: ^8.8.2 + checksum: ab40496820f02220390d95cdd620a997168efb69d5bd7d180bc4ef83ca562a95447843d8c7c88b8284879a29cf4eedc89d8001d1e098c1a1e23d12a9c755dff4 + languageName: node + linkType: hard + "style-to-js@npm:1.1.0": version: 1.1.0 resolution: "style-to-js@npm:1.1.0" @@ -8158,7 +7928,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": +"supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: @@ -8167,25 +7937,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: ^4.0.0 - checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 - languageName: node - linkType: hard - -"supports-hyperlinks@npm:^2.0.0": - version: 2.3.0 - resolution: "supports-hyperlinks@npm:2.3.0" - dependencies: - has-flag: ^4.0.0 - supports-color: ^7.0.0 - checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -8239,16 +7990,6 @@ __metadata: languageName: node linkType: hard -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: ^4.2.1 - supports-hyperlinks: ^2.0.0 - checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - "test-exclude@npm:^6.0.0": version: 6.0.0 resolution: "test-exclude@npm:6.0.0" @@ -8284,10 +8025,24 @@ __metadata: languageName: node linkType: hard -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 +"tinybench@npm:^2.3.1": + version: 2.4.0 + resolution: "tinybench@npm:2.4.0" + checksum: cfbe90f75755488653dde256019cc810f65e90f63fdd962e71e8b209b49598c5fc90c2227d2087eb807944895fafe7f12fe9ecae2b5e89db5adde66415e9b836 + languageName: node + linkType: hard + +"tinypool@npm:^0.4.0": + version: 0.4.0 + resolution: "tinypool@npm:0.4.0" + checksum: 8abcac9e784793499f1eeeace8290c026454b9d7338c74029ce6a821643bab8dcab7caeb4051e39006baf681d6a62d57c3319e9c0f6e2317a45ab0fdbd76ee26 + languageName: node + linkType: hard + +"tinyspy@npm:^1.0.2": + version: 1.1.1 + resolution: "tinyspy@npm:1.1.1" + checksum: 4ea908fdfddb92044c4454193ec543f5980ced0bd25c5b3d240a94c1511e47e765ad39cd13ae6d3370fb730f62038eedc357f55e4e239416e126bc418f0eee79 languageName: node linkType: hard @@ -8314,6 +8069,13 @@ __metadata: languageName: node linkType: hard +"totalist@npm:^3.0.0": + version: 3.0.0 + resolution: "totalist@npm:3.0.0" + checksum: ec499bddfc73d5b6c73f8ff68afd7bed286705797f928a11177fee5d1ee80e9052ffcb434638437702e16864bd5490f437a54f79bfea9564e875d34ed3254bca + languageName: node + linkType: hard + "tough-cookie@npm:^4.0.0, tough-cookie@npm:^4.1.2": version: 4.1.2 resolution: "tough-cookie@npm:4.1.2" @@ -8326,15 +8088,22 @@ __metadata: languageName: node linkType: hard +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.14.1": - version: 3.14.1 - resolution: "tsconfig-paths@npm:3.14.1" + version: 3.14.2 + resolution: "tsconfig-paths@npm:3.14.2" dependencies: "@types/json5": ^0.0.29 - json5: ^1.0.1 + json5: ^1.0.2 minimist: ^1.2.6 strip-bom: ^3.0.0 - checksum: 8afa01c673ebb4782ba53d3a12df97fa837ce524f8ad38ee4e2b2fd57f5ac79abc21c574e9e9eb014d93efe7fe8214001b96233b5c6ea75bd1ea82afe17a4c6d + checksum: a6162eaa1aed680537f93621b82399c7856afd10ec299867b13a0675e981acac4e0ec00896860480efc59fc10fd0b16fdc928c0b885865b52be62cadac692447 languageName: node linkType: hard @@ -8345,7 +8114,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": +"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.4.0": version: 2.5.0 resolution: "tslib@npm:2.5.0" checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 @@ -8363,58 +8132,58 @@ __metadata: languageName: node linkType: hard -"turbo-darwin-64@npm:1.8.0": - version: 1.8.0 - resolution: "turbo-darwin-64@npm:1.8.0" +"turbo-darwin-64@npm:1.9.0": + version: 1.9.0 + resolution: "turbo-darwin-64@npm:1.9.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"turbo-darwin-arm64@npm:1.8.0": - version: 1.8.0 - resolution: "turbo-darwin-arm64@npm:1.8.0" +"turbo-darwin-arm64@npm:1.9.0": + version: 1.9.0 + resolution: "turbo-darwin-arm64@npm:1.9.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"turbo-linux-64@npm:1.8.0": - version: 1.8.0 - resolution: "turbo-linux-64@npm:1.8.0" +"turbo-linux-64@npm:1.9.0": + version: 1.9.0 + resolution: "turbo-linux-64@npm:1.9.0" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"turbo-linux-arm64@npm:1.8.0": - version: 1.8.0 - resolution: "turbo-linux-arm64@npm:1.8.0" +"turbo-linux-arm64@npm:1.9.0": + version: 1.9.0 + resolution: "turbo-linux-arm64@npm:1.9.0" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"turbo-windows-64@npm:1.8.0": - version: 1.8.0 - resolution: "turbo-windows-64@npm:1.8.0" +"turbo-windows-64@npm:1.9.0": + version: 1.9.0 + resolution: "turbo-windows-64@npm:1.9.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"turbo-windows-arm64@npm:1.8.0": - version: 1.8.0 - resolution: "turbo-windows-arm64@npm:1.8.0" +"turbo-windows-arm64@npm:1.9.0": + version: 1.9.0 + resolution: "turbo-windows-arm64@npm:1.9.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"turbo@npm:^1.7.4": - version: 1.8.0 - resolution: "turbo@npm:1.8.0" +"turbo@npm:latest": + version: 1.9.0 + resolution: "turbo@npm:1.9.0" dependencies: - turbo-darwin-64: 1.8.0 - turbo-darwin-arm64: 1.8.0 - turbo-linux-64: 1.8.0 - turbo-linux-arm64: 1.8.0 - turbo-windows-64: 1.8.0 - turbo-windows-arm64: 1.8.0 + turbo-darwin-64: 1.9.0 + turbo-darwin-arm64: 1.9.0 + turbo-linux-64: 1.9.0 + turbo-linux-arm64: 1.9.0 + turbo-windows-64: 1.9.0 + turbo-windows-arm64: 1.9.0 dependenciesMeta: turbo-darwin-64: optional: true @@ -8430,7 +8199,7 @@ __metadata: optional: true bin: turbo: bin/turbo - checksum: 7f97068d7f9a155e088d3575b1f9922e68fa3015aae0c92625238d44b4e6c275bec2a281907702dedb402fca29a6cd4690499e916cb334d7c24c98099bc3d8b0 + checksum: ca78c45fe09ce6985f37097bedd1ffd1785e5c21ea5b0c7eb3f67a6eb7170f45d5cdf159ed7164424efa1e6080e31c45aa179f4d79b81f55c72a1816b4ccb5a4 languageName: node linkType: hard @@ -8450,7 +8219,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8": +"type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 @@ -8464,10 +8233,13 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 +"type-is@npm:^1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: 0.3.0 + mime-types: ~2.1.24 + checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 languageName: node linkType: hard @@ -8502,6 +8274,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.1.1": + version: 1.1.1 + resolution: "ufo@npm:1.1.1" + checksum: 6bd210ed93d8c0dedd76c456b1d1dfb0e3b08c2216ee6080e61f0f545de0bac24b3d3a5530cd6a403810855f8d8fc3922583965296142e04cfc287442635e6c7 + languageName: node + linkType: hard + "unbox-primitive@npm:^1.0.2": version: 1.0.2 resolution: "unbox-primitive@npm:1.0.2" @@ -8579,6 +8358,21 @@ __metadata: languageName: node linkType: hard +"use-callback-ref@npm:^1.3.0": + version: 1.3.0 + resolution: "use-callback-ref@npm:1.3.0" + dependencies: + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7913df383a5a6fcb399212eedefaac2e0c6f843555202d4e3010bac3848afe38ecaa3d0d6500ad1d936fbeffd637e6c517e68edb024af5e6beca7f27f3ce7b21 + languageName: node + linkType: hard + "use-composed-ref@npm:^1.3.0": version: 1.3.0 resolution: "use-composed-ref@npm:1.3.0" @@ -8614,6 +8408,22 @@ __metadata: languageName: node linkType: hard +"use-sidecar@npm:^1.1.2": + version: 1.1.2 + resolution: "use-sidecar@npm:1.1.2" + dependencies: + detect-node-es: ^1.1.0 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 925d1922f9853e516eaad526b6fed1be38008073067274f0ecc3f56b17bb8ab63480140dd7c271f94150027c996cea4efe83d3e3525e8f3eda22055f6a39220b + languageName: node + linkType: hard + "use-sync-external-store@npm:1.2.0, use-sync-external-store@npm:^1.2.0": version: 1.2.0 resolution: "use-sync-external-store@npm:1.2.0" @@ -8639,7 +8449,7 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^9.0.1": +"v8-to-istanbul@npm:^9.0.0": version: 9.1.0 resolution: "v8-to-istanbul@npm:9.1.0" dependencies: @@ -8651,11 +8461,11 @@ __metadata: linkType: hard "video.js@npm:^7 || ^8, video.js@npm:^8.0.3": - version: 8.0.4 - resolution: "video.js@npm:8.0.4" + version: 8.2.1 + resolution: "video.js@npm:8.2.1" dependencies: "@babel/runtime": ^7.12.5 - "@videojs/http-streaming": 3.0.0 + "@videojs/http-streaming": 3.0.2 "@videojs/vhs-utils": ^4.0.0 "@videojs/xhr": 2.6.0 aes-decrypter: ^4.0.1 @@ -8666,9 +8476,9 @@ __metadata: mux.js: ^6.2.0 safe-json-parse: 4.0.0 videojs-contrib-quality-levels: 3.0.0 - videojs-font: 3.2.0 + videojs-font: 4.1.0 videojs-vtt.js: 0.15.4 - checksum: e106e7985355c8039a8534b9e506b7d3dd4685d247777e0a86af1a7396c0c11048efb3d1a954e759250c2576516c8c4099d9039c16857ed4d21f182328a71fa2 + checksum: b1bc77490e8e66ed9c68ee8d2def842297382edfa1a98c5bcc6917f98bfb12d65995deac3d2915de7f3bf621cedc1d689ff17964c1339d89a8d4b86c43534ba8 languageName: node linkType: hard @@ -8683,10 +8493,10 @@ __metadata: languageName: node linkType: hard -"videojs-font@npm:3.2.0": - version: 3.2.0 - resolution: "videojs-font@npm:3.2.0" - checksum: 3c773d4a64123c237c26029a5d04c51919e3b6e688db0a20c6f9c647198ec815425d96a62dd24989046f27aa583c96cecae715f789f8d98452b4df419c23158a +"videojs-font@npm:4.1.0": + version: 4.1.0 + resolution: "videojs-font@npm:4.1.0" + checksum: 7259a9e1855e269cfc08c72b031e4fa1e0008a8da7f3352b407a990177a06176c3ba69d732d91f7c9b2c1ae8b62f6aa9b5b6049ad8e0a98b86f5baea44c3d31f languageName: node linkType: hard @@ -8699,6 +8509,131 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:0.29.8": + version: 0.29.8 + resolution: "vite-node@npm:0.29.8" + dependencies: + cac: ^6.7.14 + debug: ^4.3.4 + mlly: ^1.1.0 + pathe: ^1.1.0 + picocolors: ^1.0.0 + vite: ^3.0.0 || ^4.0.0 + bin: + vite-node: vite-node.mjs + checksum: b0981d4d63b1f373579eb9da69ca5af9123bf27c81ac246c541cdecf879ef4ef542e0b521cb6ceaafd5ead2cc3d243105d1fb8bf076953d42a6b2203607ce928 + languageName: node + linkType: hard + +"vite@npm:^3.0.0 || ^4.0.0": + version: 4.2.1 + resolution: "vite@npm:4.2.1" + dependencies: + esbuild: ^0.17.5 + fsevents: ~2.3.2 + postcss: ^8.4.21 + resolve: ^1.22.1 + rollup: ^3.18.0 + peerDependencies: + "@types/node": ">= 14" + less: "*" + sass: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 70eb162ffc299017a3c310e3adc95e9661def6b17aafd1f8e5e02e516766060435590dbe3df1e4e95acc3583c728a76e91f07c546221d1e701f1b2b021293f45 + languageName: node + linkType: hard + +"vitest-fetch-mock@npm:^0.2.2": + version: 0.2.2 + resolution: "vitest-fetch-mock@npm:0.2.2" + dependencies: + cross-fetch: ^3.0.6 + peerDependencies: + vitest: ">=0.16.0" + checksum: fa160f301171cd45dbf7d782880b6b6063fc74b9dd1965ef9206545e812ca8696e6be76662afbac822c6bf850fbb66cf8fb066af646e0e159f5a87ab25c97a02 + languageName: node + linkType: hard + +"vitest@npm:^0.29.3": + version: 0.29.8 + resolution: "vitest@npm:0.29.8" + dependencies: + "@types/chai": ^4.3.4 + "@types/chai-subset": ^1.3.3 + "@types/node": "*" + "@vitest/expect": 0.29.8 + "@vitest/runner": 0.29.8 + "@vitest/spy": 0.29.8 + "@vitest/utils": 0.29.8 + acorn: ^8.8.1 + acorn-walk: ^8.2.0 + cac: ^6.7.14 + chai: ^4.3.7 + debug: ^4.3.4 + local-pkg: ^0.4.2 + pathe: ^1.1.0 + picocolors: ^1.0.0 + source-map: ^0.6.1 + std-env: ^3.3.1 + strip-literal: ^1.0.0 + tinybench: ^2.3.1 + tinypool: ^0.4.0 + tinyspy: ^1.0.2 + vite: ^3.0.0 || ^4.0.0 + vite-node: 0.29.8 + why-is-node-running: ^2.2.2 + peerDependencies: + "@edge-runtime/vm": "*" + "@vitest/browser": "*" + "@vitest/ui": "*" + happy-dom: "*" + jsdom: "*" + playwright: "*" + safaridriver: "*" + webdriverio: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + bin: + vitest: vitest.mjs + checksum: 203e33bf093fdb99a6832c905a6c78175bb15313e06e1dcfbeb010a0e3efb8ff0aba4d317efedb4de76bd0086691bbd2c4bc7d6631f60fb1634b96832cba144f + languageName: node + linkType: hard + "void-elements@npm:3.1.0": version: 3.1.0 resolution: "void-elements@npm:3.1.0" @@ -8706,15 +8641,6 @@ __metadata: languageName: node linkType: hard -"walker@npm:^1.0.8": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: 1.0.12 - checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c - languageName: node - linkType: hard - "web-streams-polyfill@npm:4.0.0-beta.3": version: 4.0.0-beta.3 resolution: "web-streams-polyfill@npm:4.0.0-beta.3" @@ -8722,6 +8648,20 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b + languageName: node + linkType: hard + "webpack-bundle-analyzer@npm:4.3.0": version: 4.3.0 resolution: "webpack-bundle-analyzer@npm:4.3.0" @@ -8741,6 +8681,32 @@ __metadata: languageName: node linkType: hard +"whatwg-encoding@npm:^2.0.0": + version: 2.0.0 + resolution: "whatwg-encoding@npm:2.0.0" + dependencies: + iconv-lite: 0.6.3 + checksum: 7087810c410aa9b689cbd6af8773341a53cdc1f3aae2a882c163bd5522ec8ca4cdfc269aef417a5792f411807d5d77d50df4c24e3abb00bb60192858a40cc675 + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 + languageName: node + linkType: hard + +"whatwg-url@npm:^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" @@ -8791,6 +8757,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.2.2": + version: 2.2.2 + resolution: "why-is-node-running@npm:2.2.2" + dependencies: + siginfo: ^2.0.0 + stackback: 0.0.2 + bin: + why-is-node-running: cli.js + checksum: 50820428f6a82dfc3cbce661570bcae9b658723217359b6037b67e495255409b4c8bc7931745f5c175df71210450464517cab32b2f7458ac9c40b4925065200a + languageName: node + linkType: hard + "wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" @@ -8825,16 +8803,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.1": - version: 4.0.2 - resolution: "write-file-atomic@npm:4.0.2" - dependencies: - imurmurhash: ^0.1.4 - signal-exit: ^3.0.7 - checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c - languageName: node - linkType: hard - "ws@npm:^7.3.1": version: 7.5.9 resolution: "ws@npm:7.5.9" @@ -8922,25 +8890,25 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c +"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.9": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 languageName: node linkType: hard -"yargs@npm:^17.3.1": - version: 17.7.0 - resolution: "yargs@npm:17.7.0" +"yargs@npm:^16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" dependencies: - cliui: ^8.0.1 + cliui: ^7.0.2 escalade: ^3.1.1 get-caller-file: ^2.0.5 require-directory: ^2.1.1 - string-width: ^4.2.3 + string-width: ^4.2.0 y18n: ^5.0.5 - yargs-parser: ^21.1.1 - checksum: e7d5f5b60e63b04ded7c27c3d4b194565565cac3ea19fffcdbb183bed973a83106822a04dda28ebba4811ce92949a9d9858d3935186ff8f343548bf98aab2120 + yargs-parser: ^20.2.2 + checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 languageName: node linkType: hard @@ -8961,9 +8929,23 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 + languageName: node + linkType: hard + +"zod@npm:^3.21.4": + version: 3.21.4 + resolution: "zod@npm:3.21.4" + checksum: f185ba87342ff16f7a06686767c2b2a7af41110c7edf7c1974095d8db7a73792696bcb4a00853de0d2edeb34a5b2ea6a55871bc864227dace682a0a28de33e1f + languageName: node + linkType: hard + "zustand@npm:^4.1.4": - version: 4.3.3 - resolution: "zustand@npm:4.3.3" + version: 4.3.6 + resolution: "zustand@npm:4.3.6" dependencies: use-sync-external-store: 1.2.0 peerDependencies: @@ -8974,6 +8956,6 @@ __metadata: optional: true react: optional: true - checksum: fe0277ab0ce14849dea254cbdcfe83d4614364d38e616875f75ef2419f29085f5b03605efabeb33189a4557e647efaa294e0984c4f642e0566f445a7b207cdd6 + checksum: 4d3cec03526f04ff3de6dc45b6f038c47f091836af9660fbf5f682cae1628221102882df20e4048dfe699a43f67424e5d6afc1116f3838a80eea5dd4f95ddaed languageName: node linkType: hard
{t('card.table.header.session')} {humanFileSize(size, false)} {downloadSpeed > 0 ? `${downloadSpeed.toFixed(1)} Mb/s` : '-'} {uploadSpeed > 0 ? `${uploadSpeed.toFixed(1)} Mb/s` : '-'} {torrent.eta <= 0 ? '∞' : calculateETA(torrent.eta)}