diff --git a/.eslintrc.js b/.eslintrc.js index ff00609..df432eb 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,5 +1,14 @@ module.exports = { - rules: { - 'no-console': 'off', - }, -}; + env: { + node: true, + }, + extends: [ + "eslint:recommended", + "plugin:vue/vue3-recommended", + "prettier", + ], + rules: { + // override/add rules settings here, such as: + // 'vue/no-unused-vars': 'error' + } +} diff --git a/.gitea/issue_template/ISSUE_TEMPLATE.yml b/.gitea/issue_template/ISSUE_TEMPLATE.yml index 96e6c28..8486a5f 100644 --- a/.gitea/issue_template/ISSUE_TEMPLATE.yml +++ b/.gitea/issue_template/ISSUE_TEMPLATE.yml @@ -26,7 +26,7 @@ body: id: configuration attributes: label: Configuration - description: Export the configuration using the admin page and copy/paste here ([documentation](https://deblan.gitnet.page/side_menu_doc/tips/#export-the-configuration)). + description: Export the configuration using the admin page and copy/paste here ([documentation](https://deblan.gitnet.page/side_menu_doc/docs/FAQ/export-config/)). value: | ``` { diff --git a/.gitea/issue_template/QUESTION_TEMPLATE.yml b/.gitea/issue_template/QUESTION_TEMPLATE.yml new file mode 100644 index 0000000..41301ae --- /dev/null +++ b/.gitea/issue_template/QUESTION_TEMPLATE.yml @@ -0,0 +1,30 @@ +name: New question +about: Use this template when you don't know how to do something +title: "[Question] " +labels: + - question +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill information. + + - type: textarea + id: environment + attributes: + label: Environment + value: | + * Custom menu version: + * Nextcloud version: + * PHP version: + * Web server (Nginx, Apache2): + * Web browser and version (Firefox 80, Google Chrome 74, etc): + validations: + required: true + + - type: textarea + id: question + attributes: + label: Question + validations: + required: true diff --git a/.gitea/issue_template/config.yml b/.gitea/issue_template/config.yml new file mode 100644 index 0000000..d065f39 --- /dev/null +++ b/.gitea/issue_template/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Documentation + url: https://deblan.gitnet.page/side_menu_doc/ + about: Official documentation web site + - name: Ask a question in our Matrix room + about: If you prefer a chat-like conversation or in need for quick help, this might be an alternative to opening an issue. + url: https://matrix.to/#/#custommenu:neutralnetwork.org diff --git a/.gitignore b/.gitignore index d10e458..0b4ab44 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,4 @@ /node_modules /l10n/* /releases -/package-lock.json !/l10n/.gitkeep -/yarn*.log diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..a2065a9 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "bracketSpacing": true, + "bracketSameLine": false, + "semi": false, + "singleQuote": true, + "singleAttributePerLine": true, + "printWidth": 160 +} diff --git a/.woodpecker.yml b/.woodpecker.yml deleted file mode 100644 index 43bf009..0000000 --- a/.woodpecker.yml +++ /dev/null @@ -1,95 +0,0 @@ -steps: - dependencies: - image: node:16 - pull: true - commands: - - npm i - when: - event: [tag, push, pull_request, manual] - branch: [master, develop, feature/*, fix/*, bugfix/*, translations] - - osv-detector: - image: gitnet.fr/deblan/osv-detector:v0.10 - commands: - - osv-detector package-lock.json - failure: ignore - - build-js: - image: node:16 - commands: - - npm run build - when: - event: [tag, push, pull_request, manual] - branch: [master, develop, feature/*, fix/*, bugfix/*, translations] - - build-translations: - image: deblan/php:8.0 - commands: - - php bin/generate_l10n.php - when: - event: [tag, push, pull_request, manual] - branch: [master, develop, feature/*, fix/*, bugfix/*, translations] - - create-signature: - image: nextcloud:25 - secrets: [app_certificate, app_public_certificate] - environment: - SQLITE_DATABASE: /var/www/data/data.db - NEXTCLOUD_ADMIN_USER: admin - NEXTCLOUD_ADMIN_PASSWORD: admin - commands: - - echo "$APP_CERTIFICATE" > "/tmp/side_menu.key" - - echo "$APP_PUBLIC_CERTIFICATE" > "/tmp/side_menu.crt" - - mkdir /tmp/app - - cp -r README.md CHANGELOG.md appinfo css lib img l10n js src templates screenshots vendor /tmp/app - - /usr/src/nextcloud/occ integrity:sign-app - --privateKey=/tmp/side_menu.key - --certificate=/tmp/side_menu.crt - --path=/tmp/app - - mv /tmp/app/appinfo/signature.json appinfo/ - when: - event: [tag] - - # check-code-quality: - # image: sonarsource/sonar-scanner-cli - # secrets: [sonar_token, sonar_host, sonar_project] - # commands: - # - sonar-scanner - # -Dsonar.projectKey=$SONAR_PROJECT - # -Dsonar.sources=. - # -Dsonar.host.url=$SONAR_HOST - # -Dsonar.pullrequest.key=$CI_COMMIT_PULL_REQUEST - # -Dsonar.pullrequest.branch=$CI_COMMIT_SOURCE_BRANCH - # -Dsonar.pullrequest.base=$CI_COMMIT_TARGET_BRANCH - # failure: ignore - # when: - # event: [pull_request] - - create-package: - image: deblan/php:8.0 - volumes: - - /var/www/html/artifacts:/var/www/html/artifacts - secrets: [app_certificate] - commands: - - apt-get update - - apt-get install -y zip make - - mkdir -p "$HOME/.nextcloud/certificates" - - echo "$APP_CERTIFICATE" > "$HOME/.nextcloud/certificates/side_menu.key" - - export VERSION=$(grep "" appinfo/info.xml | grep -o "[0-9]*\.[0-9]*\.[0-9]*" --color=never) - - export RELEASE_DIRECTORY="/var/www/html/artifacts/deblan/side_menu" - - make release - when: - event: [tag] - - push-release: - image: plugins/gitea-release - volumes: - - /var/www/html/artifacts:/var/www/html/artifacts - settings: - api_key: - from_secret: gitnet_api_key - base_url: https://gitnet.fr - note: ${CI_COMMIT_MESSAGE} - files: /var/www/html/artifacts/deblan/side_menu/${CI_COMMIT_TAG/v//}/* - when: - event: [tag] diff --git a/.woodpecker/.build.yml b/.woodpecker/.build.yml new file mode 100644 index 0000000..38526c5 --- /dev/null +++ b/.woodpecker/.build.yml @@ -0,0 +1,22 @@ +variables: + volumes: &volumes + - /data/${CI_REPO}:/builds + +when: + event: [tag, push, pull_request, manual] + branch: [master, develop, feature/*, fix/*, bugfix/*, translations] + +steps: + "Build JS": + image: node:20 + commands: + - make build + + "Build translations": + image: deblan/php:8.3 + commands: + - php bin/generate_l10n.php + + "Build cache": + image: gitnet.fr/deblan/woodpecker-cache + volumes: *volumes diff --git a/.woodpecker/.publish.yml b/.woodpecker/.publish.yml new file mode 100644 index 0000000..ac39564 --- /dev/null +++ b/.woodpecker/.publish.yml @@ -0,0 +1,66 @@ +variables: + volumes: &volumes + - /data/${CI_REPO}:/builds + - /var/www/html/artifacts:/var/www/html/artifacts + +depends_on: + - build + +when: + event: [tag] + +steps: + "Verify tag and app version": + image: alpine + commands: + - TAG=${CI_COMMIT_TAG/v//} + - grep "$TAG" appinfo/info.xml + + "Create signature": + image: nextcloud:25 + volumes: *volumes + environment: + APP_CERTIFICATE: + from_secret: app_certificate + APP_PUBLIC_CERTIFICATE: + from_secret: app_public_certificate + SQLITE_DATABASE: /var/www/data/data.db + NEXTCLOUD_ADMIN_USER: admin + NEXTCLOUD_ADMIN_PASSWORD: admin + commands: + - cd "/builds/$CI_COMMIT_SHA" + - echo "$APP_CERTIFICATE" > "/tmp/side_menu.key" + - echo "$APP_PUBLIC_CERTIFICATE" > "/tmp/side_menu.crt" + - mkdir /tmp/app + - cp -r README.md CHANGELOG.md appinfo lib img l10n js src templates screenshots vendor /tmp/app + - /usr/src/nextcloud/occ integrity:sign-app + --privateKey=/tmp/side_menu.key + --certificate=/tmp/side_menu.crt + --path=/tmp/app + - mv /tmp/app/appinfo/signature.json appinfo/ + + "Create package": + image: deblan/php:8.3 + volumes: *volumes + environment: + APP_CERTIFICATE: + from_secret: app_certificate + commands: + - cd "/builds/$CI_COMMIT_SHA" + - apt-get update + - apt-get install -y zip make + - mkdir -p "$HOME/.nextcloud/certificates" + - echo "$APP_CERTIFICATE" > "$HOME/.nextcloud/certificates/side_menu.key" + - export VERSION=$(grep "" appinfo/info.xml | grep -o "[0-9]*\.[0-9]*\.[0-9]*" --color=never) + - export RELEASE_DIRECTORY="/var/www/html/artifacts/deblan/side_menu" + - make release + + "Push release": + image: plugins/gitea-release + volumes: *volumes + settings: + api_key: + from_secret: gitnet_api_key + base_url: https://gitnet.fr + # note: ${CI_COMMIT_MESSAGE} + files: /var/www/html/artifacts/deblan/side_menu/${CI_COMMIT_TAG/v//}/* diff --git a/.woodpecker/.security.yml b/.woodpecker/.security.yml new file mode 100644 index 0000000..50612c6 --- /dev/null +++ b/.woodpecker/.security.yml @@ -0,0 +1,17 @@ +variables: + volumes: &volumes + - /data/${CI_REPO}:/builds + +depends_on: + - build + +skip_clone: true + +steps: + "Check dependencies": + image: gitnet.fr/deblan/osv-detector:v0.10 + volumes: *volumes + commands: + - cd "/builds/$CI_COMMIT_SHA" + - osv-detector package-lock.json + failure: ignore diff --git a/CHANGELOG.md b/CHANGELOG.md index 16b563b..4ae875d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,147 @@ ## [Unreleased] +## 5.2.2 +### Fixed +* fix #464: add Intl.Segmenter polyfill +### Added +* add new translations + +## 5.2.1 +### Added +* chore: set side_menu as package name +### Fixed +* fix(LangRepository): check orm capabilities to query entities +* fix(admin/\*SaveButton): cast settings to string + +## 5.2.0 +### Added +* add compatibility with NC33 +### Fixed +* fix #468: force nextcloud logo display css rule (opener-only) + +## 5.1.3 +### Fixed +* fix #445: fix build by adding package-lock.json + +## 5.1.2 +### Added +* add new translations +### Fixed +* fix #441: Side bar not working with Nextcloud 32 (thanks to AndyXheli) + +## 5.1.1 +### Fixed +* fix(build): define appName to fix this error: "The `@nextcloud/vue` library was used without setting / replacing the `appName`" +* fix #349: add custom controller to retrieve core apps + +## 5.1.0 +### Added +* fix #425: allow to set a color using hex code +### Fixed +* #422: usage of `OC\AppFramework\Http\Request` instead of `$_SERVER` + +## 5.0.3 +### Fixed +* fix #422: undefined array key "HTTP_USER_AGENT" + +## 5.0.2 +### Fixed +* fix #413: add user-agent check for memories mobile app +* fix #418: allow non admin user to access their settings + +## 5.0.1 +### Fixed +* fix(StandardMenu): appLimit must return a value > 0 + +## 5.0.0 +### Fixed +* fix apps's order in the standard menu +### Added +* add new translations +* add route `/apps/side_menu/user/config` +* add new UI for admin and personals settings +### Changed +* migrate to Vue 3 and so add/update or remove dependencies +* replace CSS with SCSS +* remove route `/apps/side_menu/js/script` +* remove generated Javascript using PHP +* rewrite the standard menu of Nextcloud +### Security +* fix CVE-2023-44270 +* fix CVE-2024-9506 +* fix CVE-2024-6783 + +## 4.1.1 +### Fixed +* fix(CssController): add missing NoCSRFRequired import (#397) +* fix(SideMenu): ncApps must be an array (#369) + +## 4.1.0 +### Added +* add compatibility with NC31 +### Fixed +* fix(service): add service constructor arguments +* fix(settings): remove non-existing and unused ILogger service +### Changed +* refactor(controller): usage of attributes instead of annotations + +## 4.0.1 +### Fixed +* fix top menu labels (fix #368) +* fix #369: The menu is displayed even if there are no apps + +## 4.0.0 +### Added +* add compatibility with NC30 + +## 3.13.1 +### Fixed +* fix #354: remove the opener when the menu is always displayed +* fix extra margin between the logo and the opener + +## 3.13.0 +### Added +* show apps generated with Tables (fix #349) +* add constructor property promotion +### Fixed +* remove .app-navigation--close translationX for always-displayed menu (fix #348) + +## 3.12.0 +### Added +* add compatibility with NC29 + +## 3.11.8 +### Fixed +* move the logo inside #nextcloud element (fix #278 #239) [NC26] + +## 3.11.7 +### Added +* update translations +* update ci steps names +* fully apply Nextcloud AppMenu.vue updates +### Fixed +* add accessibility to open and close buttons (#311) +* add missing label on the 'save' button in personal settings (fix #318) +### Changed +* upgrade axios +* upgrade css-loader + +## 3.11.6 +### Fixed +* add --background-invert-if-bright in top menu (fix #326) + +## 3.11.5 +### Fixed +* add missing label on buttons for accessiblity (fix #311) + +## 3.11.4 +### Fixed +* add label on buttons for accessiblity (fix #311) + +## 3.11.3 +### Fixed +* fix menu icon in decks, collectives and other apps (#302) + ## 3.11.2 ### Fixed * add default translations for Slovak - fix #298 @@ -84,7 +226,7 @@ ## 3.5.1 ### Added -* add translations (thanks to p-bo adn gallegonovato) +* add translations (thanks to p-bo and gallegonovato) ### Fixed * fix #189: sorting not applied on mobile @@ -213,323 +355,323 @@ ## 2.3.2 ### Fixed -- fix hidden menu +* fix hidden menu ## 2.3.1 ### Fixed -- fix #88: does not work with default menu +* fix #88: does not work with default menu ## 2.3.0 ### Added -- fix #82: add an option to keep visible an app in both menus -- fix #83: add custom categories -- add auto-reload when settings are saved +* fix #82: add an option to keep visible an app in both menus +* fix #83: add custom categories +* add auto-reload when settings are saved ## 2.2.0 ### Added -- fix #84: update icons -- fix #85: use Nextcloud colors by default +* fix #84: update icons +* fix #85: use Nextcloud colors by default ### Fixed -- fix categories order in large menu +* fix categories order in large menu ## 2.1.0 ### Added -- add compatibility with Nextcloud 23 +* add compatibility with Nextcloud 23 ## 2.0.1 ### Fixed -- fix #78: Top menu is broken - invisible apps are shown -- fix #77: Update personal settings - HTTP error 412 (Precondition Failed) -- fix js error on the personal settings page (undefined sortable) +* fix #78: Top menu is broken - invisible apps are shown +* fix #77: Update personal settings - HTTP error 412 (Precondition Failed) +* fix js error on the personal settings page (undefined sortable) ## 2.0.0 ### Fixed -- fix #66: removing usage of setInterval -- fix #73: icon background +* fix #66: removing usage of setInterval +* fix #73: icon background ### Changed -- fix #67: replace jQuery with Vanilla JS +* fix #67: replace jQuery with Vanilla JS ### Removed -- Nextcloud 18 is not supported anymore +* Nextcloud 18 is not supported anymore ## 1.28.0 ### Added -- fix #63: add a new side menu with categories +* fix #63: add a new side menu with categories ## 1.27.2 ### Fixed -- fix #62: hide app notification icon +* fix #62: hide app notification icon ## 1.27.1 ### Fixed -- fix German translation render +* fix German translation render ## 1.27.0 ### Added -- hide personal settings access when settings are forced by the administrator +* hide personal settings access when settings are forced by the administrator ### Fixed -- improve German translations +* improve German translations ## 1.26.0 ### Added -- add Czech translation +* add Czech translation ## 1.25.2 ### Fixed -- fix CHANGELOG +* fix CHANGELOG ## 1.25.1 ### Added -- add PHP version as dependency -- add chinese translation +* add PHP version as dependency +* add chinese translation ### Fixed -- fix CHANGELOG +* fix CHANGELOG ## 1.25.0 ### Added -- add compatibility with Nextcloud 22 -- add CHANGELOG.md (fix #59) -- update app icon +* add compatibility with Nextcloud 22 +* add CHANGELOG.md (fix #59) +* update app icon ## 1.24.0 ### Added -- add option to define the background opacity (fix #53) -- add missing translations +* add option to define the background opacity (fix #53) +* add missing translations ## 1.23.1 ### Fixed -- fix but wih dark mode opener option +* fix but wih dark mode opener option ## 1.23.0 ### Added -- add support of dark Theme and Breeze Dark -- add support of Nextcloud 21 +* add support of dark Theme and Breeze Dark +* add support of Nextcloud 21 ## 1.22.2 ### Fixed -- fix regression: apps does not open in new tab (fix #55) +* fix regression: apps does not open in new tab (fix #55) ## 1.22.1 ### Fixed -- fix regression: apps does not open in new tab +* fix regression: apps does not open in new tab ## 1.22.0 ### Added -- Add option to sort categories (fix #53) -- Update admin UI +* Add option to sort categories (fix #53) +* Update admin UI ## 1.21.0 ### Added -- [FEATURE] Logo in the menu links to main page of installation (#51) +* [FEATURE] Logo in the menu links to main page of installation (#51) ## 1.20.1 ### Fixed -- Fix translations +* Fix translations ## 1.20.0 ### Added -- [FEATURE] Ability to remove apps from the Big Menu (#49) +* [FEATURE] Ability to remove apps from the Big Menu (#49) ## 1.19.1 ### Fixed -- fix #47: setting for list/grid view in files app flashes and dissapears +* fix #47: setting for list/grid view in files app flashes and dissapears ## 1.19.0 ### Added -- add option: the menu is enabled by default for users (fix #46) +* add option: the menu is enabled by default for users (fix #46) ## 1.18.0 ### Added -- add option to show link to settings (fix #44) -- refactor menus using several components +* add option to show link to settings (fix #44) +* refactor menus using several components ## 1.17.0 ### Added -- compliance with the app checker -- add an action to export the configuration -- add an action to purge the cache +* compliance with the app checker +* add an action to export the configuration +* add an action to purge the cache ## 1.16.3 ### Fixed -- fix links that must be opened in new window (https://help.nextcloud.com/t/external-petit-probleme-concernant-lapplication-external-sites-ou-sites-externes/94884/11) +* fix links that must be opened in new window (https://help.nextcloud.com/t/external-petit-probleme-concernant-lapplication-external-sites-ou-sites-externes/94884/11) ## 1.16.2 ### Fixed -- fix issue with personal settings when global settings are forced +* fix issue with personal settings when global settings are forced ## 1.16.1 ### Fixed -- fix #42: add cache to manage failures to access apps.nextcloud.com -- fix #41: side menu was hover apps list +* fix #42: add cache to manage failures to access apps.nextcloud.com +* fix #41: side menu was hover apps list ## 1.16.0 ### Added -- add an option to force settings to users (fix #38) +* add an option to force settings to users (fix #38) ## 1.15.0 ### Changed -- New name +* New name ### Fixed -- Fix #36: always displayed is not expanding +* Fix #36: always displayed is not expanding ## 1.14.0 ### Added -- add an api accessed by components -- add a config proxy in controllers +* add an api accessed by components +* add a config proxy in controllers ### Fixed -- fix translations +* fix translations ## 1.13.0 ### Added -- add an option to display the avatar instead of the logo (fix #34) +* add an option to display the avatar instead of the logo (fix #34) ## 1.12.3 ### Added -- add a delay before moving elements (fix #33) +* add a delay before moving elements (fix #33) ## 1.12.2 ### Fixed -- fix #30: `Always displayed` menu can not be close using touchscreens +* fix #30: `Always displayed` menu can not be close using touchscreens ## 1.12.1 ### Fixed -- fix typo -- fix translations +* fix typo +* fix translations ## 1.12.0 ### Fixed -- fix #30: administrators and users can select what apps must be opened in new tab -- fix typo +* fix #30: administrators and users can select what apps must be opened in new tab +* fix typo ## 1.11.0 ### Added -- add the option for opening apps in new tab (fix #29) +* add the option for opening apps in new tab (fix #29) ### Fixed -- fix issue with the header of the always displayed menu +* fix issue with the header of the always displayed menu ## 1.10.0 ### Added -- add images to select the display of the menu -- add live preview -- update translations -- update app info +* add images to select the display of the menu +* add live preview +* update translations +* update app info ## 1.9.3 ### Fixed -- fix regression with logo display +* fix regression with logo display ## 1.9.2 ### Added -- add the option “always displayed” which fixes the position of the menu to the left and always displays the application icons (fix #21, fix #2) +* add the option “always displayed” which fixes the position of the menu to the left and always displays the application icons (fix #21, fix #2) ## 1.8.6 ### Added -- add translations: `fr` and `de` -- improve and publish the `Makefile` -- update documentation +* add translations: `fr` and `de` +* improve and publish the `Makefile` +* update documentation ## 1.8.5 ### Fixed -- fix #28: menu items invisible after 1.8.4 +* fix #28: menu items invisible after 1.8.4 ## 1.8.4 ### Fixed -- fix #27: disable side menu on public pages - broken in 1.8.3 +* fix #27: disable side menu on public pages - broken in 1.8.3 ## 1.8.3 ### Fixed -- fix alphabetic order of apps (#26) +* fix alphabetic order of apps (#26) ## 1.8.2 ### Added -- add icon for closing the big menu (fix #25) +* add icon for closing the big menu (fix #25) ### Fixed -- fix hidden icons in the top menu (fix #23) -- fix missing apps (fix #24) +* fix hidden icons in the top menu (fix #23) +* fix missing apps (fix #24) ## 1.8.1 ### Fixed -- fix issue with links -- fix missing l10n files +* fix issue with links +* fix missing l10n files ## 1.8.0 ### Added -- add a `big menu` display (fix #22) -- add the possibility to choose what apps are displayed in the top menu (fix #22) -- add icon color filter -- add icon opacity filter +* add a `big menu` display (fix #22) +* add the possibility to choose what apps are displayed in the top menu (fix #22) +* add icon color filter +* add icon opacity filter ## 1.8.0-rc2 ## 1.7.0 ### Added -- add a loader when the page is unloading -- add compatibility with Nextcloud 19 +* add a loader when the page is unloading +* add compatibility with Nextcloud 19 ## 1.6.3 ### Fixed -- fix #20: add a shortcut to open and to hide the menu +* fix #20: add a shortcut to open and to hide the menu ## 1.6.2 ### Fixed -- fix #19: add a cache to limit flashes +* fix #19: add a cache to limit flashes ## 1.6.1 ### Fixed -- fix #19: add a hack to show external sites in the top menu with navigation +* fix #19: add a hack to show external sites in the top menu with navigation ## 1.6.0 ### Added -- Add a page of personal settings -- Add an option to disable the side menu as user -- Refactoring of javascripts +* Add a page of personal settings +* Add an option to disable the side menu as user +* Refactoring of javascripts ## 1.5.0 ### Added -- add option to force light icons instead of dark icons +* add option to force light icons instead of dark icons ### Fixed -- fix #19: add option to keep external sites in the top menu -- fix #16 #17: add dark icons and handle the svg filters +* fix #19: add option to keep external sites in the top menu +* fix #16 #17: add dark icons and handle the svg filters ## 1.4.1 ### Added -- Rendering harmonization with browsers +* Rendering harmonization with browsers ### Fixed -- FIX #15: make menu start after icon +* FIX #15: make menu start after icon ## 1.4.0 ### Fixed -- Fix #12: add an option to hide the opener and the panel when there is no application +* Fix #12: add an option to hide the opener and the panel when there is no application ## 1.3.4 ### Fixed -- FIX #14: add option to show only the opener -- FIX #13: add alternate hamburger icon -- FIX #11: remove error in the console +* FIX #14: add option to show only the opener +* FIX #13: add alternate hamburger icon +* FIX #11: remove error in the console ## 1.3.3 ### Added -- Add a second background color to create a background gradiant -- Update documentation +* Add a second background color to create a background gradiant +* Update documentation ### Fixed -- FIX #10: add options to select the size of the icons and the text, or hide them +* FIX #10: add options to select the size of the icons and the text, or hide them ## 1.3.2 ### Fixed -- FIX #9: opener icon not visible with multiple apps_paths +* FIX #9: opener icon not visible with multiple apps_paths ## 1.3.1 ### Fixed -- FIX #3: Add an opition the choose the position of the opener (after or before the logo) -- FIX #8: Remove extension of dynamic asset's routes (js, css) +* FIX #3: Add an opition the choose the position of the opener (after or before the logo) +* FIX #8: Remove extension of dynamic asset's routes (js, css) ## 1.3.0 ### Added -- `main.js` is replaced by a controller and a template +* `main.js` is replaced by a controller and a template ### Fixed -- FIX #2: add option to open the menu by hovering over opener +* FIX #2: add option to open the menu by hovering over opener ## 1.2.4 ### Fixed -- FIX #7: Opener icon not visible in Safari +* FIX #7: Opener icon not visible in Safari diff --git a/Makefile b/Makefile index e5b6267..883cccb 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,6 @@ watch: dep dep: npm i - npm link @nextcloud/vue || sudo npm link @nextcloud/vue .ONESHELL: release: @@ -21,7 +20,7 @@ release: test -d $$RELEASE_DIRECTORY/$$VERSION && rm -fr $$RELEASE_DIRECTORY/$$VERSION mkdir -p $$RELEASE_DIRECTORY/$$VERSION/side_menu - cp -r README.md CHANGELOG.md appinfo css lib img l10n js src templates screenshots vendor $$RELEASE_DIRECTORY/$$VERSION/side_menu + cp -r README.md CHANGELOG.md appinfo lib img l10n js src templates screenshots vendor $$RELEASE_DIRECTORY/$$VERSION/side_menu cd $$RELEASE_DIRECTORY/$$VERSION zip -r side_menu_v$$VERSION.zip side_menu tar cvzf side_menu_v$$VERSION.tar.gz side_menu diff --git a/README.md b/README.md index bf8abbb..3cb739f 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,7 @@ You like this app and you want to support me? ☕ [Buy me a coffee](https://www. Requirements ------------ -* PHP >= 8.0 -* App `theming` enabled +* PHP >= 8.1 Installation and upgrade ------------------------ @@ -41,7 +40,7 @@ If you want to install it from source, go to https://gitnet.fr/deblan/side_menu/ ``` $ cd /path/to/nextcloud/apps -$ curl -sS https://gitnet.fr/attachments/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | tar xvfz - +$ VERSION=x.y.z; curl -sS "https://gitnet.fr/deblan/side_menu/releases/download/${VERSION}/side_menu_v${VERSION}.tar.gz" | tar xvfz - ``` Administrators can edit many settings using the administration page. diff --git a/appinfo/info.xml b/appinfo/info.xml index 299d527..d7af92a 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -1,6 +1,5 @@ - - + + side_menu Custom menu Modify the display of the menu. @@ -11,14 +10,13 @@ This application is rather suitable for instances that activate a lot of applica Use the shortcut `Ctrl`+`o` to open and to hide the side menu. Use `tab` to navigate. -You can customize colors depending of the theme (Dark theme and Breeze Dark). +You can customize colors depending of the theme. -You can report a bug or request a feature by opening an issue. +To report a bug or request a feature, please open an issue. Requirements: -* PHP >= 8.0 -* App `theming` enabled +* PHP >= 8.1 If you like this application and if you want to support the development: @@ -32,9 +30,9 @@ Notice Because I believe in a free and decentralized Internet, [Gitnet](https://gitnet.fr) is **self-hosted at home**. In case of downtime, you can download **Custom Menu** from [here](https://kim.deblan.fr/~side_menu/). ]]> - 3.11.2 + 5.2.2 agpl - Simon Vieille + Simon Vieille SideMenu https://deblan.gitnet.page/side_menu_doc/ @@ -42,20 +40,20 @@ In case of downtime, you can download **Custom Menu** from [here](https://kim.de customization https://gitnet.fr/deblan/side_menu - https://matrix.to/#/!TFPucDATKODpHNVAtu:neutralnetwork.org?via=neutralnetwork.org + https://gitnet.fr/deblan/side_menu/issues https://gitnet.fr/deblan/side_menu - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc19_default_menu.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/admin_settings.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/n19_big_menu.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc18_menu_always_displayed.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc20_big_menu_responsive.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/personal_settings.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc25_big_menu.png - https://gitnet.fr/deblan/side_menu/raw/branch/master/screenshots/nc25_default_menu.png + + + + + + + + - - + + OCA\SideMenu\Settings\Admin diff --git a/bin/generate_l10n.php b/bin/generate_l10n.php index e8e666b..146afad 100644 --- a/bin/generate_l10n.php +++ b/bin/generate_l10n.php @@ -31,6 +31,7 @@ function generateJsonContent($translations) chdir(__DIR__.'/../'); foreach (glob('src/l10n/fixtures/*.yaml') as $file) { + echo "$file\n"; $lang = str_replace('.yaml', '', basename($file)); $translations = yaml_parse(file_get_contents($file)); diff --git a/bin/import_config.php b/bin/import_config.php index f2fbd14..db5857d 100644 --- a/bin/import_config.php +++ b/bin/import_config.php @@ -1,21 +1,75 @@ prepare('UPDATE oc_appconfig SET configvalue=:value WHERE configkey=:key and appid=:appId'); + exit($code); +} -foreach ($config as $key => $value) { +function value(string $shortName, string $longName, array $options, bool $required = true): ?string +{ + $value = $options[$shortName] ?? $options[$longName] ?? null; + + if (is_array($value)) { + echo "To much --{$longName}\n"; + showUsageAndExit(1); + } + + if (empty($value) && $required) { + echo "--{$longName} is missing\n"; + showUsageAndExit(1); + } + + return $value; +} + +$options = getopt('t:f:c:h', [ + 'type:', + 'file:', + 'config:', + 'help', +]); + +$help = value('h', 'help', $options, false); +$config = value('c', 'config', $options); +$file = value('f', 'file', $options); + +if (!is_readable($config) && !is_file($config)) { + echo "No such file: {$config}\n"; + + exit(1); +} + +if (!is_readable($file) && !is_file($file)) { + echo "No such file: {$file}\n"; + + exit(1); +} + +$appConfig = json_decode(file_get_contents($file), true); + +require $config; + +if ('mysql' === $CONFIG['dbtype']) { + $pdo = new \PDO( + 'mysql:host='.$CONFIG['dbhost'].';dbname='.$CONFIG['dbname'], + $CONFIG['dbuser'], + $CONFIG['dbpassword'] + ); +} elseif ($CONFIG['dbtype']) { + $pdo = new \PDO(sprintf('sqlite:%s', $CONFIG['datadirectory'].'/owncloud.db')); +} else { + echo "dbtype is not valid\n"; + + exit(1); +} + +$stmt = $pdo->prepare('UPDATE '.$CONFIG['dbtableprefix'].'appconfig SET configvalue=:value WHERE configkey=:key and appid=:appId'); + +foreach ($appConfig as $key => $value) { $stmt->execute([ 'appId' => 'side_menu', 'key' => $key, diff --git a/css/admin.css b/css/admin.css deleted file mode 100644 index b3d0b7c..0000000 --- a/css/admin.css +++ /dev/null @@ -1,220 +0,0 @@ -/** - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#side-menu-section input[type="color"] { - width: 100px; - margin: 10px 0 10px 0; - padding: 0; - border-radius: 0; -} - -#-dropside-menu-section input[type="checkbox"] { - vertical-align: middle; -} - -#side-menu-section input[type="range"] { - vertical-align: middle; -} - -#side-menu-section select { - margin: 10px 0 10px 0; -} - -.keyboard-key { - padding: 1px 9px; - margin: 0 2px; - background: #eee; - border: 1px solid #aaa; - color: #555; - border-radius: 3px; -} - -.side-menu-display { - padding: 10px; - border: 2px solid transparent; - max-width: 100%; - cursor: pointer; -} - -.side-menu-display.is-active { - border: 2px solid #91cb7f; -} - -.info { - margin-top: 8px; - padding: 5px; - background: #91cb7f; - color: #fff; - border-radius: var(--border-radius); -} - -#side-menu-section h2 small { - font-size: 11px; - font-weight: normal; -} - -.side-menu-toggler { - cursor: pointer; -} - -.side-menu-setting-list { - margin: 10px 4px 4px 0px; - border: 2px solid var(--color-border-dark); - border-radius: 15px; -} - -.side-menu-setting-list-item { - padding: 5px 10px; - border-bottom: 1px solid var(--color-border-dark); - max-width: 300px; - margin: -1px 0 0 0; - cursor: pointer; - line-height: 32px; -} - -.side-menu-setting-list-item:last-child { - border-bottom: 0; -} - -.side-menu-setting-list-drop { - background: yellow; - border-color: yellow; - height: 34px; -} - -.side-menu-setting.arrow { - color: #ccc; - padding-right: 5px; -} - -.side-menu-setting-list-item input { - margin-top: 0; - height: 21px !important; - min-height: auto !important; -} - -#apps-categories-custom-list select { - width: 100%; -} - -.side-menu-setting-table { - display: table; - width: 100%; -} - -.side-menu-setting-row { - display: table; - margin-bottom: 10px; -} - -.side-menu-setting-row code { - margin-left: 2px; - margin-bottom: 1px; - padding: 3px 10px; - border-radius: 5px; - display: inline-block; - right: 2px; - border: 1px solid var(--color-border-dark); -} - -.side-menu-setting-label { - display: table-cell; - width: 430px; - padding-right: 20px; -} - -.side-menu-setting-label--top { - vertical-align: top; -} - -.side-menu-setting-form { - display: table-cell; - min-width: 300px; -} - -.side-menu-setting-label-short { - width: 300px; -} - -.side-menu-setting-form-long { - width: 400px; -} - -#side-menu-save-progress { - display: inline-block; - width: 0; - height: 15px; - background: #fff; -} - -.btn-reset { - display: inline-block; - cursor: pointer; - position: relative; - top: -8px; - left: 5px; - transition-duration: 0.8s; - transition-property: transform; - transform: rotate(360deg); -} - -.btn-reset--down { - top: 2px; -} - -.btn-reset--progress { - transform: rotate(-359deg); -} - -.badges { - margin-bottom: 14px; - margin-top: 4px; -} - -.badge { - border-width: 1px; - padding: 2px 8px; - margin-right: 2px; - margin-bottom: 5px; - display: inline-block; - border-radius: 4px; - font-size: 13px; -} - -.badge-1 { - background: #d4ce14; - border-color: #cad413; - color: #373a05; -} - -.badge-2 { - background: #96d47f; - border-color: #7ed49b; - color: #333; -} - -.badge-3 { - background: #d4540a; - border-color: #d4700c; - color: #fff; -} - -.badge-4 { - background: #9d81d4; - border-color: #c681d4; - color: #fff; -} diff --git a/css/sideMenu.css b/css/sideMenu.css deleted file mode 100644 index 690e4b0..0000000 --- a/css/sideMenu.css +++ /dev/null @@ -1,370 +0,0 @@ -/** - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#side-menu { - position: fixed; - top: 0; - left: 0; - height: 100vh; - width: 100%; - max-width: 290px; - background: linear-gradient(90deg, var(--side-menu-background-color, #333) 0%, var(--side-menu-background-color-to, #333) 100%); - z-index: 3000; - color: var(--side-menu-text-color, #fff); - box-shadow: rgba(0, 0, 0, 0.22) 0px 25.6px 57.6px 0px, rgba(0, 0, 0, 0.18) 0px 4.8px 14.4px 0px; - display: none; -} - -#side-menu a { - transition: 0.2s; -} - -#side-menu.open { - display: block; -} - -#header .side-menu-opener { - margin-left: 0px; - margin-top: -1px; -} - -.side-menu-settings { - margin-right: 9px; - margin-top: 2px; - float: right; - line-height: 34px; - height: 42px; - display: none; -} - -.side-menu-settings a { - color: var(--side-menu-text-color, #fff); - display: block; - padding: 4px 7px; -} - -.side-menu-settings:hover a, .side-menu-settings a:active, .side-menu-settings a:focus { - background: var(--side-menu-current-app-background-color, #444); -} - -.side-menu-settings img { - vertical-align: bottom; - margin-left: 3px; - width: 32px; - height: 32px; -} - -#side-menu.open .side-menu-settings { - display: block; -} - -.side-menu-opener { - background: var(--side-menu-opener, url('../img/side-menu-opener.svg')); - background-color: transparent !important; - height: 40px !important; - width: 40px !important; - border-radius: 0 !important; - border: 0 !important; - padding-right: 12px !important; - padding-left: 12px !important; - margin-left: 5px !important; - margin-left: 3px !important; -} - -.side-menu-opener:active, .side-menu-opener:focus { - background-color: var(--side-menu-current-app-background-color, #444) !important; -} - -.side-menu-closer { - background: url('../img/side-menu-opener-closer.svg'); - display: none; -} - -#side-menu.hide-opener .side-menu-opener, .side-menu-opener.hide, #side-menu.hide { - display: none !important; -} - -.side-menu-apps-list { - height: calc(100vh - 150px); - z-index: 2200; - position: fixed; - top: 150px; - width: 100%; - max-width: 290px; - overflow: auto; -} - -.side-menu-app-icon { - width: 20px; - vertical-align: middle; - margin-top: -4px; - margin-right: 10px; - filter: invert(var(--side-menu-icon-invert-filter, 0%)); - opacity: var(--side-menu-icon-opacity, 1); -} - -.side-menu-app a { - line-height: 30px; - color: var(--side-menu-text-color, #fff); - display: block; - padding: 7px 0 5px 15px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.side-menu-app a:hover, .side-menu-app.active, .side-menu-app a:focus { - background: var(--side-menu-current-app-background-color, #444); -} - -.side-menu-logo { - text-align: center; -} - -.side-menu-logo img { - max-width: 60%; - max-height: 100px; -} - -.enu-header { - height: 150px; - width: 100%; - z-index: 2300; - max-width: 290px; - position: fixed; - padding-top: 2px; - top: 0; -} - -#side-menu.side-menu-with-categories .side-menu-header { - max-width: 295px; -} - -#side-menu.hide-opener .side-menu-logo { - margin-top: 10px; -} - -#side-menu-loader { - position: fixed; - top: 0; - left: 0; - width: 100%; - z-index: 3001; -} - -#side-menu-loader-bar { - height: 4px; - background: var(--side-menu-loader-color, #0e75ac); - width: 0; - transition-property: width; -} - -#side-menu.side-menu-big, #side-menu.side-menu-with-categories { - max-width: 100%; - height: auto; -} - -.side-menu-big .side-menu-header, .side-menu-with-categories .side-menu-header { - height: auto; -} - -.side-menu-big .side-menu-apps-list, .side-menu-with-categories .side-menu-apps-list { - height: auto; - position: static; - max-width: 100vw; - overflow: auto; -} - -.side-menu-big .side-menu-app a, .side-menu-with-categories .side-menu-app a { - padding: 7px 0 7px 7px; -} - -.side-menu-categories-wrapper { - padding-bottom: 70px; -} - -.side-menu-categories { - max-height: calc(100vh - 55px); - overflow: auto; - position: relative; - display: flex; - flex-wrap: wrap; - justify-content: center; - padding: 0 10% 0 10%; -} - -.side-menu-category { - padding: 10px 20px; - flex: 1 1 auto; -} - -.side-menu-category-title { - padding-left: 10px; - color: var(--side-menu-text-color, #fff); -} - -.side-menu-loader { - text-align: center; -} - -.side-menu-loader svg { - width: 45px; - margin: auto; - stroke: var(--side-menu-text-color, #fff); -} - -.side-menu-with-categories .side-menu-app-icon, .side-menu-big .side-menu-app-icon { - vertical-align: middle; - margin-top: -2px; -} - -.side-menu-always-displayed body { - width: calc(100% - 50px) !important; - position: absolute; - left: 50px; -} - -.side-menu-always-displayed #header { - position: absolute !important; -} - -.side-menu-always-displayed #side-menu { - display: block; -} - -.side-menu-always-displayed .side-menu-apps-list { - height: 100vh; - top: 0; - overflow: hidden; -} - -.side-menu-always-displayed .side-menu-apps-list--with-settings { - height: calc(100vh - 49px); - top: 49px; -} - -.side-menu-always-displayed .side-menu-apps-list:hover { - overflow: auto; -} - -.side-menu-always-displayed #side-menu, -.side-menu-always-displayed .side-menu-header, -.side-menu-always-displayed .side-menu-apps-list { - width: 50px; -} - -.side-menu-always-displayed #side-menu .side-menu-app-text, -.side-menu-always-displayed #header .side-menu-opener, -.side-menu-always-displayed .side-menu-logo { - display: none; -} - -.side-menu-always-displayed #side-menu .side-menu-header { - height: 49px; -} - -.side-menu-always-displayed #side-menu.open, -.side-menu-always-displayed #side-menu.open .side-menu-apps-list, -.side-menu-always-displayed #side-menu.open .side-menu-header { - width: 100%; -} - -.side-menu-always-displayed #side-menu.open .side-menu-app-text { - display: inline; -} - -.side-menu-always-displayed .app-navigation--close { - transform: translateX(calc(-100% + 50px)) !important; -} - -#side-menu.side-menu-with-categories { - max-width: 290px; - height: 100vh; -} - -.side-menu-with-categories .side-menu-categories { - display: block; - padding: 0; - width: 100%; -} - -.side-menu-with-categories .side-menu-category { - padding: 10px 0; -} - -.side-menu-always-displayed #body-settings, #body-settings.body-settings-side-menu { - overflow-x: visible; -} - -.app-menu { - visibility: hidden; -} - -.app-menu.show { - visibility: visible; -} - -.side-menu-search { - float: right; -} - -.side-menu-search input { - background: none; - border: 0; - border-radius: 0; - color: var(--side-menu-text-color); -} - -.side-menu-search input::placeholder { - color: var(--side-menu-text-color); -} - -.side-menu-always-displayed .side-menu-search { - display: none; -} - -@media screen and (max-width: 1024px) { - #side-menu.side-menu-big { - max-width: 290px; - height: 100vh; - } - - #side-menu.hide-opener.side-menu-big .side-menu-search { - float: none; - } - - .side-menu-categories { - display: block; - padding: 0; - } - - .side-menu-category { - padding: 10px 0; - } -} - -@media screen and (min-width: 1024px) { - .side-menu-closer { - display: block; - float: right; - margin-right: 9px; - } - - .side-menu-big .side-menu-header { - max-width: 100%; - } -} diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index b812fd7..0f73c70 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -2,17 +2,25 @@ namespace OCA\SideMenu\AppInfo; -use OC; +use OC\AllConfig; +use OC\App\AppStore\Fetcher\CategoryFetcher; +use OC\AppFramework\Http\Request; use OC\Security\CSP\ContentSecurityPolicyNonceManager; use OC\User\User; use OCA\SideMenu\Service\AppRepository; use OCA\SideMenu\Service\CategoryRepository; +use OCA\SideMenu\Service\Color; use OCA\SideMenu\Service\ConfigProxy; +use OCA\Theming\ThemingDefaults; use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootContext; use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\IConfig; +use OCP\INavigationManager; use OCP\IUserSession; +use OCP\L10N\IFactory; use OCP\Util; use Psr\Container\ContainerInterface; @@ -24,33 +32,75 @@ use Psr\Container\ContainerInterface; class Application extends App implements IBootstrap { public const APP_ID = 'side_menu'; - public const APP_NAME = 'Custom menu'; - /** - * @var OC\AllConfig - */ - protected $config; - /** - * @var ContentSecurityPolicyNonceManager - */ - protected $cspnm; + protected AllConfig $config; + protected ContentSecurityPolicyNonceManager $cspnm; + protected Request $request; + protected ?User $user = null; - /** - * @var User - */ - protected $user; - - /** - * {@inheritdoc} - */ public function __construct(array $urlParams = []) { parent::__construct(self::APP_ID, $urlParams); } + public function register(IRegistrationContext $context): void + { + $context->registerService(CategoryRepository::class, function (ContainerInterface $c) { + return new CategoryRepository( + $c->get(CategoryFetcher::class), + $c->get(ConfigProxy::class), + $c->get(IConfig::class), + $c->get(IFactory::class), + $c->get(IUserSession::class) + ); + }); + + $context->registerService(AppRepository::class, function (ContainerInterface $c) { + return new AppRepository( + $c->get(\OC_App::class), + $c->get(INavigationManager::class), + $c->get(IFactory::class), + $c->get(ConfigProxy::class), + $c->get(CategoryRepository::class), + $c->get(IEventDispatcher::class), + $c->get(IUserSession::class) + ); + }); + + $context->registerService(ConfigProxy::class, function (ContainerInterface $c) { + return new ConfigProxy( + $c->get(IConfig::class), + ); + }); + + $context->registerService(Color::class, function (ContainerInterface $c) { + return new Color( + $c->get(ThemingDefaults::class), + ); + }); + } + + public function boot(IBootContext $context): void + { + $this->config = \OC::$server->getConfig(); + $this->cspnm = \OC::$server->getContentSecurityPolicyNonceManager(); + $this->user = \OC::$server[IUserSession::class]->getUser(); + $this->request = \OC::$server->getRequest(); + + if (!$this->isEnabled()) { + return; + } + + $this->addAssets(); + } + protected function isEnabled(): bool { + if (isset($this->request->server['HTTP_USER_AGENT']) && preg_match('/MemoriesNative/', $this->request->server['HTTP_USER_AGENT'])) { + return false; + } + $enabled = true; $isForced = (bool) $this->config->getAppValue(self::APP_ID, 'force', '0'); @@ -72,8 +122,7 @@ class Application extends App implements IBootstrap protected function addAssets() { - Util::addScript(self::APP_ID, 'sideMenu'); - Util::addStyle(self::APP_ID, 'sideMenu'); + Util::addScript(self::APP_ID, 'side_menu-menu'); $assets = [ 'stylesheet' => [ @@ -84,51 +133,19 @@ class Application extends App implements IBootstrap 'rel' => 'stylesheet', ], ], - 'script' => [ - 'route' => 'side_menu.Js.script', - 'type' => 'script', - 'route_attr' => 'src', - 'attr' => [ - 'nonce' => $this->cspnm->getNonce(), - ], - ], ]; $cache = $this->config->getAppValue(self::APP_ID, 'cache', '0'); foreach ($assets as $value) { - $route = OC::$server->getURLGenerator()->linkToRoute($value['route'], ['v' => $cache]); + $route = \OC::$server->getURLGenerator()->linkToRoute( + $value['route'], + ['v' => $cache] + ); + $value['attr'][$value['route_attr']] = $route; Util::addHeader($value['type'], $value['attr'], ''); } } - - public function register(IRegistrationContext $context): void - { - $context->registerService('AppRepository', function () { - return new AppRepository(); - }); - - $context->registerService('CategoryRepository', function () { - return new CategoryRepository(); - }); - - $context->registerService('ConfigProxy', function () { - return new ConfigProxy(); - }); - } - - public function boot(IBootContext $context): void - { - $this->config = OC::$server->getConfig(); - $this->cspnm = OC::$server->getContentSecurityPolicyNonceManager(); - $this->user = OC::$server[IUserSession::class]->getUser(); - - if (!$this->isEnabled()) { - return; - } - - $this->addAssets(); - } } diff --git a/lib/Controller/AdminSettingController.php b/lib/Controller/AdminSettingController.php index aa11d9a..e9ba8f9 100644 --- a/lib/Controller/AdminSettingController.php +++ b/lib/Controller/AdminSettingController.php @@ -1,4 +1,5 @@ config = $config; - $this->urlGenerator = $urlGenerator; } - /** - * @NoCSRFRequired - * - * @return RedirectResponse - */ - public function removeCache() + #[NoCSRFRequired] + #[FrontpageRoute(verb: 'GET', url: '/admin/cache/remove')] + public function removeCache(): RedirectResponse { $this->config->setAppValue(Application::APP_ID, 'cache-categories', '[]'); @@ -61,18 +58,16 @@ class AdminSettingController extends Controller ]).'#more'); } - /** - * @NoCSRFRequired - * - * @return Response - */ - public function exportConfiguration() + #[NoCSRFRequired] + #[FrontpageRoute(verb: 'GET', url: '/admin/config/export')] + public function exportConfiguration(): DataDownloadResponse { $keys = $this->config->getAppKeys(Application::APP_ID); $appConfig = []; $excludedKeys = [ 'cache', 'cache-categories', + 'langs', ]; foreach ($keys as $key) { @@ -89,4 +84,135 @@ class AdminSettingController extends Controller 'text/json' ); } + + #[NoCSRFRequired] + #[FrontpageRoute(verb: 'GET', url: '/admin/config')] + public function configuration(): JSONResponse + { + $keys = $this->config->getAppKeys(Application::APP_ID); + $booleans = [ + 'opener-only', + 'opener-hover', + 'display-logo', + 'use-avatar', + 'add-logo-link', + 'show-settings', + 'loader-enabled', + 'always-displayed', + 'enabled', + 'force', + 'big-menu', + 'external-sites-in-top-menu', + 'force-light-icon', + 'side-with-categories', + 'default-enabled', + ]; + + $arrays = [ + 'apps-categories-custom', + 'big-menu-hidden-apps', + 'apps-order', + 'categories-custom', + 'categories-order', + 'target-blank-apps', + 'top-menu-apps', + 'top-side-menu-apps', + ]; + + $integers = [ + 'background-color-opacity', + 'dark-mode-background-color-opacity', + 'dark-mode-icon-invert-filter', + 'dark-mode-icon-opacity', + 'icon-invert-filter', + 'icon-opacity', + 'target-blank-mode', + 'top-menu-mouse-over-hidden-label', + ]; + + $defaults = [ + 'opener-only' => '0', + 'opener-hover' => '0', + 'display-logo' => '1', + 'use-avatar' => '0', + 'add-logo-link' => '1', + 'show-settings' => '0', + 'loader-enabled' => '1', + 'always-displayed' => '0', + 'enabled' => '1', + 'force' => '0', + 'big-menu' => '0', + 'external-sites-in-top-menu' => '0', + 'force-light-icon' => '0', + 'side-with-categories' => '0', + 'cache' => '1', + 'default-enabled' => '1', + + 'apps-categories-custom' => '[]', + 'big-menu-hidden-apps' => '[]', + 'apps-order' => '[]', + 'categories-custom' => '[]', + 'categories-order' => '[]', + 'target-blank-apps' => '[]', + 'top-menu-apps' => '[]', + 'top-side-menu-apps' => '[]', + 'cache-categories' => '[]', + + 'background-color-opacity' => '100', + 'dark-mode-background-color-opacity' => '100', + 'dark-mode-icon-invert-filter' => '0', + 'dark-mode-icon-opacity' => '100', + 'icon-invert-filter' => '0', + 'icon-opacity' => '100', + 'top-menu-mouse-over-hidden-label' => '0', + + 'opener' => 'side-menu-opener', + 'dark-mode-opener' => 'side-menu-opener', + 'size-icon' => 'normal', + 'size-text' => 'normal', + 'opener-position' => 'before', + + 'background-color' => $this->color->getPrimaryColor(), + 'background-color-to' => $this->color->getLightenPrimaryColor(), + 'current-app-background-color' => $this->color->getDarkenPrimaryColor(), + 'text-color' => $this->color->getTextColorPrimary(), + 'loader-color' => $this->color->getLightenPrimaryColor(), + + 'dark-mode-background-color' => $this->color->getDarkenPrimaryColor(), + 'dark-mode-background-color-to' => $this->color->getDarkenPrimaryColor(), + 'dark-mode-current-app-background-color' => $this->color->getDarkenPrimaryColor2(), + 'dark-mode-text-color' => $this->color->getTextColorPrimary(), + 'dark-mode-loader-color' => $this->color->getLightenPrimaryColor(), + + 'categories-order-type' => 'default', + ]; + + $config = []; + + foreach ($keys as $key) { + if (!isset($defaults[$key])) { + continue; + } + + if (in_array($key, $booleans)) { + $config[$key] = $this->configProxy->getAppValueBool($key, $defaults[$key]); + } elseif (in_array($key, $arrays)) { + $config[$key] = $this->configProxy->getAppValueArray($key, $defaults[$key]); + } elseif (in_array($key, $integers)) { + $config[$key] = $this->configProxy->getAppValueInt($key, $defaults[$key]); + } else { + $config[$key] = $this->configProxy->getAppValue($key, $defaults[$key]); + } + } + + foreach ($defaults as $key => $default) { + if (!array_key_exists($key, $config)) { + $config[$key] = $default; + } + } + + $config['langs'] = $this->langRepository->getUsedLangs(); + + return new JSONResponse($config); + } } diff --git a/lib/Controller/AppController.php b/lib/Controller/AppController.php index 588911f..6bc2e98 100644 --- a/lib/Controller/AppController.php +++ b/lib/Controller/AppController.php @@ -1,4 +1,5 @@ appRepository = $appRepository; - $this->urlGenerator = $urlGenerator; - $this->config = $config; } - /** - * @NoAdminRequired - * @NoCSRFRequired - */ + #[NoCSRFRequired] + #[NoAdminRequired] + #[FrontpageRoute(verb: 'GET', url: '/')] public function index(): RedirectResponse { - $user = OC::$server[IUserSession::class]->getUser(); + $user = \OC::$server[IUserSession::class]->getUser(); $topMenuApps = $this->config->getAppValueArray('top-menu-apps', '[]'); $hiddenApps = $this->config->getAppValueArray('big-menu-hidden-apps', '[]'); $isForced = $this->config->getAppValueBool('force', '0'); @@ -87,7 +75,7 @@ class AppController extends Controller protected function redirectToApp($app, bool $isHref = false): RedirectResponse { if (!$isHref) { - $isIgnoreFrontController = true === OC::$server->getConfig()->getSystemValue( + $isIgnoreFrontController = true === \OC::$server->getConfig()->getSystemValue( 'htaccess.IgnoreFrontController', false ); diff --git a/lib/Controller/CoreController.php b/lib/Controller/CoreController.php new file mode 100644 index 0000000..9302ef3 --- /dev/null +++ b/lib/Controller/CoreController.php @@ -0,0 +1,74 @@ +. + */ + +namespace OCA\SideMenu\Controller; + +use OCA\SideMenu\Service\AppRepository; +use OCA\SideMenu\Service\ConfigProxy; +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\Attribute\FrontpageRoute; +use OCP\AppFramework\Http\Attribute\NoAdminRequired; +use OCP\AppFramework\Http\Attribute\NoCSRFRequired; +use OCP\AppFramework\Http\Attribute\PublicPage; +use OCP\AppFramework\Http\JSONResponse; +use OCP\IRequest; +use OCP\IUserSession; + +class CoreController extends Controller +{ + public function __construct( + string $appName, + IRequest $request, + protected ConfigProxy $config, + protected AppRepository $appRepository, + ) { + parent::__construct($appName, $request); + } + + #[NoCSRFRequired] + #[NoAdminRequired] + #[PublicPage] + #[FrontpageRoute(verb: 'GET', url: '/core/apps')] + public function items(): JSONResponse + { + $user = \OC::$server[IUserSession::class]->getUser(); + $items = []; + + if (!$user) { + return new JSONResponse([ + 'items' => $items, + ]); + } + + $apps = $this->appRepository->getOrderedApps($user); + $keys = ['id', 'name', 'category', 'href', 'icon']; + + foreach ($apps as &$app) { + foreach ($app as $key => $value) { + if (!in_array($key, $keys)) { + unset($app[$key]); + } + } + } + + return new JSONResponse([ + 'items' => $apps, + ]); + } +} diff --git a/lib/Controller/CssController.php b/lib/Controller/CssController.php index 06f7ae8..6822563 100644 --- a/lib/Controller/CssController.php +++ b/lib/Controller/CssController.php @@ -1,4 +1,5 @@ user = OC::$server[IUserSession::class]->getUser(); - $this->config = $config; - $this->theming = $theming; - $this->color = $color; + $this->user = \OC::$server[IUserSession::class]->getUser(); } - /** - * @NoAdminRequired - * @NoCSRFRequired - * @PublicPage - * - * @return Response - */ - public function stylesheet() + #[NoCSRFRequired] + #[NoAdminRequired] + #[PublicPage] + #[FrontpageRoute(verb: 'GET', url: '/css/stylesheet')] + public function stylesheet(): TemplateResponse { $response = new TemplateResponse(Application::APP_ID, 'css/stylesheet', $this->getConfig(), 'blank'); $response->addHeader('Content-Type', 'text/css'); @@ -88,10 +66,6 @@ class CssController extends Controller $topMenuApps = $this->config->getAppValueArray('top-menu-apps', '[]'); $topSideMenuApps = $this->config->getAppValueArray('top-side-menu-apps', '[]'); - $isAccessibilityAppEnabled = $this->config->getAppValueBool('enabled', '0', 'accessibility'); - $isBreezeDarkAppEnabled = $this->config->getAppValueBool('enabled', '0', 'breezedark'); - $isBreezeDarkGlobalEnabled = $this->config->getAppValueBool('theme_enabled', '0', 'breezedark'); - if ($this->user) { $userTopMenuApps = $this->config->getUserValueArray($this->user, 'top-menu-apps', '[]'); $userTopSideMenuApps = $this->config->getUserValueArray($this->user, 'top-side-menu-apps', '[]'); @@ -103,81 +77,62 @@ class CssController extends Controller if (!empty($userTopSideMenuApps) && !$isForced) { $topSideMenuApps = $userTopSideMenuApps; } - - $isDarkThemeUserEnabled = 'dark' === $this->config->getUserValue($this->user, 'theme', '', 'accessibility'); - $isBreezeDarkUserEnabled = $this->config->getUserValue($this->user, 'theme_enabled', '', 'breezedark'); - - $isBreezeDarkUserEnabled = '1' === $isBreezeDarkUserEnabled || - ($isBreezeDarkGlobalEnabled && '' === $isBreezeDarkUserEnabled); - } else { - $isDarkThemeUserEnabled = false; - $isBreezeDarkUserEnabled = false; } - $isDarkMode = ($isAccessibilityAppEnabled && $isDarkThemeUserEnabled) || - ($isBreezeDarkAppEnabled && $isBreezeDarkUserEnabled); + $lightenPrimaryColor = $this->color->getLightenPrimaryColor(); + $darkenPrimaryColor = $this->color->getDarkenPrimaryColor(); + $darkenPrimaryColor2 = $this->color->getDarkenPrimaryColor2(); + $textColor = $this->color->getTextColorPrimary(); - $primaryColor = $this->theming->getColorPrimary(); - $lightenPrimaryColor = $this->color->adjustBrightness($primaryColor, 0.2); - $darkenPrimaryColor = $this->color->adjustBrightness($primaryColor, -0.2); - $darkenPrimaryColor2 = $this->color->adjustBrightness($primaryColor, -0.3); - $textColor = $this->theming->getTextColorPrimary(); - - if ($isDarkMode) { - $backgroundColor = $this->config->getAppValue('dark-mode-background-color', $darkenPrimaryColor); - $backgroundColorTo = $this->config->getAppValue('dark-mode-background-color-to', $darkenPrimaryColor); - $currentAppBackgroundColor = $this->config->getAppValue( - 'dark-mode-current-app-background-color', - $darkenPrimaryColor2 - ); - $loaderColor = $this->config->getAppValue('dark-mode-loader-color', $lightenPrimaryColor); - $textColor = $this->config->getAppValue('dark-mode-text-color', $textColor); - $iconInvertFilter = abs($this->config->getAppValueInt('dark-mode-icon-invert-filter', '0')).'%'; - $iconOpacity = abs($this->config->getAppValueInt('dark-mode-icon-opacity', '100') / 100); - $opener = $this->config->getAppValue('dark-mode-opener', 'side-menu-opener'); - - $opacity = $this->config->getAppValueInt('dark-mode-background-color-opacity', '100'); - $backgroundOpacity = dechex($opacity * 255 / 100); - } else { - $backgroundColor = $this->config->getAppValue('background-color', $darkenPrimaryColor); - $backgroundColorTo = $this->config->getAppValue('background-color-to', $darkenPrimaryColor); - $currentAppBackgroundColor = $this->config->getAppValue( - 'current-app-background-color', - $darkenPrimaryColor2 - ); - $loaderColor = $this->config->getAppValue('loader-color', $lightenPrimaryColor); - $textColor = $this->config->getAppValue('text-color', $textColor); - $iconInvertFilter = abs($this->config->getAppValueInt('icon-invert-filter', '0')).'%'; - $iconOpacity = abs($this->config->getAppValueInt('icon-opacity', '100') / 100); - $opener = $this->config->getAppValue('opener', 'side-menu-opener'); - - $opacity = $this->config->getAppValueInt('background-color-opacity', '100'); - $backgroundOpacity = dechex($opacity * 255 / 100); - } + $backgroundColor = $this->config->getAppValue('background-color', $darkenPrimaryColor); + $backgroundColorTo = $this->config->getAppValue('background-color-to', $darkenPrimaryColor); + $opacity = $this->config->getAppValueInt('background-color-opacity', '100'); + $backgroundOpacity = dechex($opacity * 255 / 100); $backgroundColor .= $backgroundOpacity; $backgroundColorTo .= $backgroundOpacity; + $darkBackgroundColor = $this->config->getAppValue('dark-mode-background-color', $darkenPrimaryColor); + $darkBackgroundColorTo = $this->config->getAppValue('dark-mode-background-color-to', $darkenPrimaryColor); + $darkOpacity = $this->config->getAppValueInt('dark-mode-background-color-opacity', '100'); + $darkBackgroundOpacity = dechex($opacity * 255 / 100); + + $darkBackgroundColor .= $darkBackgroundOpacity; + $darkBackgroundColorTo .= $darkBackgroundOpacity; + return [ 'vars' => [ - 'background-color' => $backgroundColor, - 'background-color-to' => $backgroundColorTo, - 'current-app-background-color' => $currentAppBackgroundColor, - 'loader-color' => $loaderColor, - 'text-color' => $textColor, - 'opener' => $opener, - 'icon-invert-filter' => $iconInvertFilter, - 'icon-opacity' => $iconOpacity, + 'light' => [ + 'background-color' => $backgroundColor, + 'background-color-to' => $backgroundColorTo, + 'current-app-background-color' => $this->config->getAppValue( + 'current-app-background-color', + $darkenPrimaryColor2 + ), + 'loader-color' => $this->config->getAppValue('loader-color', $lightenPrimaryColor), + 'text-color' => $this->config->getAppValue('text-color', $textColor), + 'opener' => $this->config->getAppValue('opener', 'side-menu-opener'), + 'icon-invert-filter' => abs($this->config->getAppValueInt('icon-invert-filter', '0')).'%', + 'icon-opacity' => abs($this->config->getAppValueInt('icon-opacity', '100') / 100), + ], + 'dark' => [ + 'background-color' => $darkBackgroundColor, + 'background-color-to' => $darkBackgroundColorTo, + 'current-app-background-color' => $this->config->getAppValue( + 'dark-mode-current-app-background-color', + $darkenPrimaryColor2 + ), + 'loader-color' => $this->config->getAppValue('dark-mode-loader-color', $lightenPrimaryColor), + 'text-color' => $this->config->getAppValue('dark-mode-text-color', $textColor), + 'opener' => $this->config->getAppValue('dark-mode-opener', 'side-menu-opener'), + 'icon-invert-filter' => abs($this->config->getAppValueInt('dark-mode-icon-invert-filter', '0')).'%', + 'icon-opacity' => abs($this->config->getAppValueInt('dark-mode-icon-opacity', '100') / 100), + ] ], - 'display-logo' => $this->config->getAppValueBool('display-logo', '1'), 'opener-only' => $this->config->getAppValueBool('opener-only', '0'), - 'external-sites-in-top-menu' => $this->config->getAppValueBool('external-sites-in-top-menu', '0'), 'size-icon' => $this->config->getAppValue('size-icon', 'normal'), 'size-text' => $this->config->getAppValue('size-text', 'normal'), 'always-displayed' => $this->config->getAppValueBool('always-displayed', '0'), - 'big-menu' => $this->config->getAppValueBool('big-menu', '0'), - 'top-menu-apps' => $topMenuApps, - 'top-side-menu-apps' => $topSideMenuApps, ]; } } diff --git a/lib/Controller/JsController.php b/lib/Controller/JsController.php index 13d803e..302de3d 100644 --- a/lib/Controller/JsController.php +++ b/lib/Controller/JsController.php @@ -1,4 +1,5 @@ themingDefaults = $themingDefaults; - - $this->user = OC::$server[IUserSession::class]->getUser(); - $this->config = $config; - $this->l10nFactory = $l10nFactory; + $this->user = $this->userSession->getUser(); } - /** - * @NoAdminRequired - * @NoCSRFRequired - * @PublicPage - */ - public function script(): TemplateResponse - { - $response = new TemplateResponse(Application::APP_ID, 'js/script', $this->getConfig(), 'blank'); - $response->addHeader('Content-Type', 'text/javascript'); - - return $response; - } - - /** - * @NoAdminRequired - * @NoCSRFRequired - * @PublicPage - */ + #[NoCSRFRequired] + #[NoAdminRequired] + #[PublicPage] + #[FrontpageRoute(verb: 'GET', url: '/js/config')] public function config(): JSONResponse { return new JSONResponse($this->getConfig()); @@ -127,25 +99,25 @@ class JsController extends Controller $targetBlankApps = $userTargetBlankApps; } - $isAvatarSet = OC::$server->getAvatarManager()->getAvatar($this->user->getUid())->exists(); + $isAvatarSet = $this->avatarManager->getAvatar($this->user->getUID())->exists(); if ($useAvatar && $isAvatarSet) { - $avatar = OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', [ - 'userId' => $this->user->getUid(), + $avatar = $this->urlGenerator->linkToRoute('core.avatar.getAvatar', [ + 'userId' => $this->user->getUID(), 'size' => 128, 'v' => $this->config->getUserValueInt($this->user, 'avatar', 'version', 0), ]); } if ($this->config->getAppValueBool('show-settings', '0')) { - $settingsNav = OC::$server->getNavigationManager()->getAll('settings'); + $settingsNav = $this->navigationManager->getAll('settings'); if (isset($settingsNav['settings'])) { $settings = [ 'href' => $settingsNav['settings']['href'], 'name' => $settingsNav['settings']['name'], - 'avatar' => OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', [ - 'userId' => $this->user->getUid(), + 'avatar' => $this->urlGenerator->linkToRoute('core.avatar.getAvatar', [ + 'userId' => $this->user->getUID(), 'size' => 32, 'v' => $this->config->getUserValueInt($this->user, 'avatar', 'version', 0), ]), @@ -154,13 +126,15 @@ class JsController extends Controller } } - $indexUrl = OC::$server->getURLGenerator()->linkTo('', 'index.php'); + $indexUrl = $this->urlGenerator->linkTo('', 'index.php'); return [ 'opener-position' => $this->config->getAppValue('opener-position', 'before'), 'opener-hover' => $this->config->getAppValueBool('opener-hover', '0'), 'external-sites-in-top-menu' => $this->config->getAppValueBool('external-sites-in-top-menu', '0'), 'force-light-icon' => $this->config->getAppValueBool('force-light-icon', '0'), + 'display-logo' => $this->config->getAppValueBool('display-logo', '1'), + 'use-avatar' => $this->config->getAppValueBool('use-avatar', '0'), 'hide-when-no-apps' => $this->config->getAppValueBool('hide-when-no-apps', '0'), 'loader-enabled' => $this->config->getAppValueBool('loader-enabled', '1'), 'always-displayed' => $this->config->getAppValueBool('always-displayed', '0'), diff --git a/lib/Controller/NavController.php b/lib/Controller/NavController.php index 50efc4c..23540df 100644 --- a/lib/Controller/NavController.php +++ b/lib/Controller/NavController.php @@ -1,4 +1,5 @@ config = $config; - $this->appRepository = $appRepository; - $this->categoryRepository = $categoryRepository; - $this->l10nFactory = $l10nFactory; - $this->router = $router; } - /** - * @NoAdminRequired - * @NoCSRFRequired - * @PublicPage - * - * @return JSONResponse - */ - public function items() + #[NoCSRFRequired] + #[NoAdminRequired] + #[PublicPage] + #[FrontpageRoute(verb: 'GET', url: '/nav/items')] + public function items(): JSONResponse { - $user = OC::$server[IUserSession::class]->getUser(); + $user = \OC::$server[IUserSession::class]->getUser(); $items = []; if (!$user) { @@ -146,6 +115,7 @@ class NavController extends Controller $appsCategories[$app['id']][] = $category; $items[$category]['apps'][$app['id']] = [ + 'id' => $app['id'], 'name' => $app['name'], 'href' => $app['href'], 'icon' => $app['icon'], @@ -189,11 +159,11 @@ class NavController extends Controller usort($items, function ($a, $b) use ($categoriesLabels) { foreach ($categoriesLabels as $key => $value) { - if ($a['categoryId'] === 'other') { + if ('other' === $a['categoryId']) { return -1; } - if ($b['categoryId'] === 'other') { + if ('other' === $b['categoryId']) { return 1; } diff --git a/lib/Controller/PersonalSettingController.php b/lib/Controller/PersonalSettingController.php index fc30c35..285f89c 100644 --- a/lib/Controller/PersonalSettingController.php +++ b/lib/Controller/PersonalSettingController.php @@ -1,4 +1,5 @@ config = $config; - $this->configProxy = $configProxy; - $this->userSession = $userSession; } - /** - * @NoAdminRequired - * @NoCSRFRequired - * - * @param mixed $name - * @param mixed $value - * - * @return Response - */ - public function valueSet($name, $value) + #[NoCSRFRequired] + #[NoAdminRequired] + #[FrontpageRoute(verb: 'POST', url: '/user/valueSet')] + public function valueSet($name, $value): array { $doSave = false; $user = $this->userSession->getUser(); @@ -87,22 +66,7 @@ class PersonalSettingController extends Controller } } - if ('target-blank-apps' === $name) { - $doSave = true; - $data = json_decode($value, true); - - if (!is_array($data)) { - $doSave = false; - } else { - foreach ($data as $v) { - if (!is_string($v)) { - $doSave = false; - } - } - } - } - - if (in_array($name, ['top-menu-apps', 'top-side-menu-apps', 'apps-order'])) { + if (in_array($name, ['target-blank-apps', 'top-menu-apps', 'top-side-menu-apps', 'apps-order'])) { $doSave = true; $data = json_decode($value, true); @@ -132,4 +96,63 @@ class PersonalSettingController extends Controller return []; } + + #[NoCSRFRequired] + #[NoAdminRequired] + #[FrontpageRoute(verb: 'GET', url: '/user/config')] + public function configuration(): JSONResponse + { + $user = $this->userSession->getUser(); + $keys = $this->config->getUserKeys($user->getUid(), Application::APP_ID); + + $booleans = [ + 'enabled', + ]; + + $arrays = [ + 'apps-order', + 'target-blank-apps', + 'top-menu-apps', + 'top-side-menu-apps', + ]; + + $integers = [ + 'target-blank-mode', + ]; + + $defaults = [ + 'enabled' => '1', + 'target-blank-mode' => '1', + 'apps-order' => '[]', + 'target-blank-apps' => '[]', + 'top-menu-apps' => '[]', + 'top-side-menu-apps' => '[]', + ]; + + $config = []; + + foreach ($keys as $key) { + if (!isset($defaults[$key])) { + continue; + } + + if (in_array($key, $booleans)) { + $config[$key] = $this->configProxy->getUserValueBool($user, $key, $defaults[$key]); + } elseif (in_array($key, $arrays)) { + $config[$key] = $this->configProxy->getUserValueArray($user, $key, $defaults[$key]); + } elseif (in_array($key, $integers)) { + $config[$key] = $this->configProxy->getUserValueInt($user, $key, $defaults[$key]); + } else { + $config[$key] = $this->configProxy->getUserValue($user, $key, $defaults[$key]); + } + } + + foreach ($defaults as $key => $default) { + if (!array_key_exists($key, $config)) { + $config[$key] = $default; + } + } + + return new JSONResponse($config); + } } diff --git a/lib/Service/AppRepository.php b/lib/Service/AppRepository.php index ec10a36..3c64f7d 100644 --- a/lib/Service/AppRepository.php +++ b/lib/Service/AppRepository.php @@ -3,7 +3,12 @@ namespace OCA\SideMenu\Service; use OC\User\User; +use OCA\SideMenu\AppInfo\Application; +use OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\EventDispatcher\IEventDispatcher; use OCP\INavigationManager; +use OCP\IUserSession; use OCP\L10N\IFactory; /** @@ -13,51 +18,25 @@ use OCP\L10N\IFactory; */ class AppRepository { - /** - * @var \OC_App - */ - protected $ocApp; - - /** - * @var IFactory - */ - protected $l10nFactory; - - /** - * @var ConfigProxy - */ - protected $config; - - /** - * @var CategoryRepository - */ - protected $categoryRepository; - - /** - * @var INavigationManager - */ - protected $navigationManager; - public function __construct( - \OC_App $ocApp, - INavigationManager $navigationManager, - IFactory $l10nFactory, - ConfigProxy $config, - CategoryRepository $categoryRepository + protected \OC_App $ocApp, + protected INavigationManager $navigationManager, + protected IFactory $l10nFactory, + protected ConfigProxy $config, + protected CategoryRepository $categoryRepository, + protected IEventDispatcher $dispatcher, + protected IUserSession $userSession, ) { - $this->ocApp = $ocApp; - $this->l10nFactory = $l10nFactory; - $this->config = $config; - $this->navigationManager = $navigationManager; - $this->categoryRepository = $categoryRepository; + $this->dispatcher->dispatchTyped(new BeforeTemplateRenderedEvent( + $this->userSession->isLoggedIn(), + new TemplateResponse(Application::APP_NAME, '') + )); } /** * Retrieves visibles apps. - * - * @return array */ - public function getVisibleApps() + public function getVisibleApps(): array { $navigation = $this->navigationManager->getAll(); $appCategoriesCustom = $this->config->getAppValueArray('apps-categories-custom', '[]'); @@ -90,6 +69,14 @@ class AppRepository 'external_links', ], ]; + } elseif ('tables_application' === substr($app['id'], 0, 18)) { + $visibleApps[$app['id']] = [ + 'id' => $app['id'], + 'name' => $this->getAppName($app), + 'href' => $app['href'], + 'icon' => $app['icon'], + 'category' => [], + ]; } elseif ('files' === $app['id']) { $visibleApps[$app['id']] = [ 'id' => $app['id'], @@ -110,7 +97,7 @@ class AppRepository return $visibleApps; } - public function getAppName($app) + public function getAppName($app): string { return $this->config->getAppValue( 'app.navigation.name', @@ -119,7 +106,7 @@ class AppRepository ); } - public function getOrderedApps(?User $user = null) + public function getOrderedApps(?User $user = null): array { $apps = $this->getVisibleApps(); $orders = $this->config->getAppValueArray('apps-order', '[]'); diff --git a/lib/Service/CategoryRepository.php b/lib/Service/CategoryRepository.php index c146609..404c061 100644 --- a/lib/Service/CategoryRepository.php +++ b/lib/Service/CategoryRepository.php @@ -15,51 +15,19 @@ use OCP\L10N\IFactory; */ class CategoryRepository { - /** - * @var CategoryFetcher - */ - protected $categoryFetcher; - - /** - * @var IFactory - */ - protected $l10nFactory; - - /** - * @var ConfigProxy - */ - protected $config; - - /** - * @var IConfig - */ - protected $iConfig; - - /** - * @var IUserSession - */ - protected $userSession; - public function __construct( - CategoryFetcher $categoryFetcher, - ConfigProxy $config, - IConfig $iConfig, - IFactory $l10nFactory, - IUserSession $userSession + protected CategoryFetcher $categoryFetcher, + protected ConfigProxy $config, + protected IConfig $iConfig, + protected IFactory $l10nFactory, + protected IUserSession $userSession, ) { - $this->categoryFetcher = $categoryFetcher; - $this->l10nFactory = $l10nFactory; - $this->config = $config; - $this->iConfig = $iConfig; - $this->userSession = $userSession; } /** * Retrieves categories. - * - * @return array */ - public function getOrderedCategories() + public function getOrderedCategories(): array { $currentLanguage = substr($this->l10nFactory->findLanguage(), 0, 2); $type = $this->config->getAppValue('categories-order-type', 'default'); diff --git a/lib/Service/Color.php b/lib/Service/Color.php index cf90dd6..98e4ed5 100644 --- a/lib/Service/Color.php +++ b/lib/Service/Color.php @@ -2,6 +2,8 @@ namespace OCA\SideMenu\Service; +use OCA\Theming\ThemingDefaults; + /** * class Color. * @@ -9,6 +11,10 @@ namespace OCA\SideMenu\Service; */ class Color { + public function __construct(protected ThemingDefaults $theming) + { + } + /** * @thanks https://stackoverflow.com/posts/54393956/revision */ @@ -31,4 +37,29 @@ class Color return '#'.implode($hexCode); } + + public function getPrimaryColor() + { + return $this->theming->getColorPrimary(); + } + + public function getLightenPrimaryColor() + { + return $this->adjustBrightness($this->getPrimaryColor(), 0.2); + } + + public function getDarkenPrimaryColor() + { + return $this->adjustBrightness($this->getPrimaryColor(), -0.2); + } + + public function getDarkenPrimaryColor2() + { + return $this->adjustBrightness($this->getPrimaryColor(), -0.3); + } + + public function getTextColorPrimary() + { + return $this->theming->getTextColorPrimary(); + } } diff --git a/lib/Service/ConfigProxy.php b/lib/Service/ConfigProxy.php index d162dfd..6745851 100644 --- a/lib/Service/ConfigProxy.php +++ b/lib/Service/ConfigProxy.php @@ -13,12 +13,7 @@ use OCP\IConfig; */ class ConfigProxy { - /** - * @var IConfig - */ - protected $config; - - public function __construct(IConfig $config) + public function __construct(protected IConfig $config) { $this->config = $config; } diff --git a/lib/Service/LangRepository.php b/lib/Service/LangRepository.php index 3c379f0..4034b85 100644 --- a/lib/Service/LangRepository.php +++ b/lib/Service/LangRepository.php @@ -11,12 +11,7 @@ use OCP\IDBConnection; */ class LangRepository { - /** - * @var IDBConnection - */ - protected $db; - - public function __construct(IDBConnection $db) + public function __construct(protected IDBConnection $db) { $this->db = $db; } @@ -35,7 +30,12 @@ class LangRepository ->from('preferences') ; - $stmt = $qb->execute(); + // Nextcloud >=33+ + if (method_exists($qb, 'executeQuery')) { + $stmt = $qb->executeQuery(); + } else { + $stmt = $qb->execute(); + } $langs = ['en']; diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index 86ddac4..0d806c7 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -1,4 +1,5 @@ l = $l; - $this->logger = $logger; - $this->config = $config; - $this->appRepository = $appRepository; - $this->categoryRepository = $categoryRepository; - $this->theming = $theming; - $this->color = $color; - $this->langRepository = $langRepository; } /** diff --git a/lib/Settings/AdminSection.php b/lib/Settings/AdminSection.php index 8629e8a..820b0f3 100644 --- a/lib/Settings/AdminSection.php +++ b/lib/Settings/AdminSection.php @@ -1,4 +1,5 @@ url = $url; - $this->l = $l; + public function __construct( + protected IURLGenerator $url, + protected IL10N $l, + ) { } - /** - * returns the ID of the section. It is supposed to be a lower case string, - * e.g. 'ldap'. - * - * @returns string - */ public function getID() { return Application::APP_ID; } - /** - * returns the translated name as it should be displayed, e.g. 'LDAP / AD - * integration'. Use the L10N service to translate it. - * - * @return string - */ public function getName() { return $this->l->t(Application::APP_NAME); } - /** - * @return int whether the form should be rather on the top or bottom of - * the settings navigation. The sections are arranged in ascending order of - * the priority values. It is required to return a value between 0 and 99. - * - * E.g.: 70 - */ public function getPriority() { return 70; } - /** - * {@inheritdoc} - */ public function getIcon() { return $this->url->imagePath(Application::APP_ID, 'icon.svg'); diff --git a/lib/Settings/Personal.php b/lib/Settings/Personal.php index 57112d0..fbc1e57 100644 --- a/lib/Settings/Personal.php +++ b/lib/Settings/Personal.php @@ -1,4 +1,5 @@ l = $l; - $this->logger = $logger; - $this->config = $config; - $this->userSession = $userSession; - $this->appRepository = $appRepository; } /** diff --git a/lib/Settings/PersonalSection.php b/lib/Settings/PersonalSection.php index 58a773f..a42a56e 100644 --- a/lib/Settings/PersonalSection.php +++ b/lib/Settings/PersonalSection.php @@ -1,4 +1,5 @@ url = $url; - $this->l = $l; - $this->configProxy = $configProxy; + public function __construct( + protected IURLGenerator $url, + protected IL10N $l, + protected ConfigProxy $configProxy, + ) { } - /** - * returns the ID of the section. It is supposed to be a lower case string, - * e.g. 'ldap'. - * - * @returns string - */ public function getID() { if ($this->configProxy->getAppValueBool('force', '0')) { @@ -63,12 +43,6 @@ class PersonalSection implements IIconSection return Application::APP_ID; } - /** - * returns the translated name as it should be displayed, e.g. 'LDAP / AD - * integration'. Use the L10N service to translate it. - * - * @return string - */ public function getName() { if ($this->configProxy->getAppValueBool('force', '0')) { @@ -78,13 +52,6 @@ class PersonalSection implements IIconSection return $this->l->t(Application::APP_NAME); } - /** - * @return int whether the form should be rather on the top or bottom of - * the settings navigation. The sections are arranged in ascending order of - * the priority values. It is required to return a value between 0 and 99. - * - * E.g.: 70 - */ public function getPriority() { if ($this->configProxy->getAppValueBool('force', '0')) { @@ -94,9 +61,6 @@ class PersonalSection implements IIconSection return 70; } - /** - * {@inheritdoc} - */ public function getIcon() { return $this->url->imagePath(Application::APP_ID, 'icon.svg'); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0b5a50f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8188 @@ +{ + "name": "side_menu", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "license": "agpl", + "dependencies": { + "@babel/core": ">=7.12.0 <8.0.0", + "@formatjs/intl-segmenter": "^12.0.8", + "@nextcloud/router": "^3.0.1", + "@nextcloud/vue": "^9.0.0-alpha.8", + "node-polyfill-webpack-plugin": "^4.1.0", + "pinia": "^3.0.1", + "postcss": "^7.0.0 || ^8.0.1", + "vue": "^3.5.13", + "vuedraggable": "^4.1.0" + }, + "devDependencies": { + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@nextcloud/axios": "^2.5.1", + "@nextcloud/browserslist-config": "^3.0.1", + "@nextcloud/event-bus": "^3.3.1", + "@nextcloud/initial-state": "^2.2.0", + "@nextcloud/l10n": "^3.2.0", + "babel-loader": "^9.1.3", + "css-loader": "^7.1.2", + "eslint": "^9.19.0", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-vue": "^9.32.0", + "file-loader": "^6.2.0", + "mini-css-extract-plugin": "^2.9.1", + "postcss-loader": "^8.1.1", + "prettier": "3.4.2", + "sass": "^1.78.0", + "sass-loader": "^16.0.1", + "source-map-loader": "^5.0.0", + "style-loader": "^4.0.0", + "vue-loader": "^17.4.2", + "vue-router": "^4.4.5", + "webpack": "^5.94.0", + "webpack-cli": "^5.1.4", + "webpack-notifier": "^1.15.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ckpack/vue-color": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@ckpack/vue-color/-/vue-color-1.6.0.tgz", + "integrity": "sha512-b9kFTKhYbNArfgP1lmnaVm0VNsWdZjqIbyHUYry7mZ+E7JeTQclbjq1+2xWn0SE3wzqRYlXmAVjECPOgteWmMQ==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.6.0", + "material-colors": "^1.2.6" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz", + "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", + "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.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" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.24.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.24.0.tgz", + "integrity": "sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.13.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.13", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-3.0.8.tgz", + "integrity": "sha512-NRiqvxAvhbARZRFSRFPjN0y8txxmVutv2vMYvW2HSdCVf58w9l4osLj6Ujif643vImwZBcbKqhiKE0IOhY+DvA==", + "license": "MIT", + "dependencies": { + "@formatjs/fast-memoize": "3.0.3", + "@formatjs/intl-localematcher": "0.7.5", + "decimal.js": "^10.4.3", + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.0.3.tgz", + "integrity": "sha512-CArYtQKGLAOruCMeq5/RxCg6vUXFx3OuKBdTm30Wn/+gCefehmZ8Y2xSMxMrO2iel7hRyE3HKfV56t3vAU6D4Q==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.7.5.tgz", + "integrity": "sha512-7/nd90cn5CT7SVF71/ybUKAcnvBlr9nZlJJp8O8xIZHXFgYOC4SXExZlSdgHv2l6utjw1byidL06QzChvQMHwA==", + "license": "MIT", + "dependencies": { + "@formatjs/fast-memoize": "3.0.3", + "tslib": "^2.8.0" + } + }, + "node_modules/@formatjs/intl-segmenter": { + "version": "12.0.8", + "resolved": "https://registry.npmjs.org/@formatjs/intl-segmenter/-/intl-segmenter-12.0.8.tgz", + "integrity": "sha512-seByJgn5tx34X25O8mu63wYJ5JVQcUM4fkscobkA+wBhmyI1rJSgNCf6p8XZ28nCm514Cb2N0f3sAmpEyLPJ6g==", + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "3.0.8", + "@formatjs/intl-localematcher": "0.7.5", + "tslib": "^2.8.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nextcloud/auth": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.4.0.tgz", + "integrity": "sha512-T5OFltKd0O9Hfj47VrzE7TVjCwqOMHH9JLyjjLUR3pu2MaTY9WL6AjL79sHbFTXUaIkftZgJKu12lHYmqXnL2Q==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/browser-storage": "^0.4.0", + "@nextcloud/event-bus": "^3.3.1" + }, + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/axios": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@nextcloud/axios/-/axios-2.5.1.tgz", + "integrity": "sha512-AA7BPF/rsOZWAiVxqlobGSdD67AEwjOnymZCKUIwEIBArKxYK7OQEqcILDjQwgj6G0e/Vg9Y8zTVsPZp+mlvwA==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/auth": "^2.3.0", + "@nextcloud/router": "^3.0.1", + "axios": "^1.6.8" + }, + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/browser-storage": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nextcloud/browser-storage/-/browser-storage-0.4.0.tgz", + "integrity": "sha512-D6XxznxCYmJ3oBCC3p0JB6GZJ2RZ9dgbB1UqtTePXrIvHUMBAeF/YkiGKYxLAVZCZb+NSNZXgAYHm/3LnIUbDg==", + "license": "GPL-3.0-or-later", + "dependencies": { + "core-js": "3.37.0" + }, + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/browserslist-config": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@nextcloud/browserslist-config/-/browserslist-config-3.0.1.tgz", + "integrity": "sha512-GZTxL5fsDgmFoot/qnRurjHCuHjSfOg+A6t4+P2TySXua2Q1Ex0lecZYlSnRuOR/W5BGOZ06ITTA/hbkSh1Ypg==", + "dev": true, + "license": "GPL-3.0-or-later", + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/capabilities": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@nextcloud/capabilities/-/capabilities-1.2.0.tgz", + "integrity": "sha512-L1NQtOfHWzkfj0Ple1MEJt6HmOHWAi3y4qs+OnwSWexqJT0DtXTVPyRxi7ADyITwRxS5H9R/HMl6USAj4Nr1nQ==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/initial-state": "^2.1.0" + }, + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/event-bus": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.2.tgz", + "integrity": "sha512-1Qfs6i7Tz2qd1A33NpBQOt810ydHIRjhyXMFwSEkYX2yUI80lAk/sWO8HIB2Fqp+iffhyviPPcQYoytMDRyDNw==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@types/semver": "^7.5.8", + "semver": "^7.6.3" + }, + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/event-bus/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nextcloud/initial-state": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-2.2.0.tgz", + "integrity": "sha512-cDW98L5KGGgpS8pzd+05304/p80cyu8U2xSDQGa+kGPTpUFmCbv2qnO5WrwwGTauyjYijCal2bmw82VddSH+Pg==", + "license": "GPL-3.0-or-later", + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/l10n": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.2.0.tgz", + "integrity": "sha512-5TbIc415C0r8YUA0i4bOXKL0iInY8ka+t8PGHihqevzqf/LAkFatd+p6mCLJT3tQPxgkcIRCIuyOkiUM0Lyw5Q==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/router": "^3.0.1", + "@nextcloud/typings": "^1.9.1", + "@types/dompurify": "^3.2.0", + "@types/escape-html": "^1.0.4", + "dompurify": "^3.2.4", + "escape-html": "^1.0.3" + }, + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/logger": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.2.tgz", + "integrity": "sha512-wByt0R0/6QC44RBpaJr1MWghjjOxk/pRbACHo/ZWWKht1qYbJRHB4GtEi+35KEIHY07ZpqxiDk6dIRuN7sXYWQ==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/auth": "^2.3.0" + }, + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/router": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.0.1.tgz", + "integrity": "sha512-Ci/uD3x8OKHdxSqXL6gRJ+mGJOEXjeiHjj7hqsZqVTsT7kOrCjDf0/J8z5RyLlokKZ0IpSe+hGxgi3YB7Gpw3Q==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/typings": "^1.7.0" + }, + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/sharing": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.2.4.tgz", + "integrity": "sha512-kOLAr0w4NDUGPF42L22i9iSs6Z3ylTsE0RudAGDBzw/pnxGY8PEwZI2j0IMAFRfQ7XFNcpV/EVHI5YCMxtxGMQ==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/initial-state": "^2.2.0" + }, + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/timezones": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nextcloud/timezones/-/timezones-0.1.1.tgz", + "integrity": "sha512-ldLuLyz605sszetnp6jy6mtlThu4ICKsZThxHIZwn6t4QzjQH3xr+k8mRU7GIvKq9egUFDqBp4gBjxm3/ROZig==", + "license": "AGPL-3.0-or-later", + "dependencies": { + "ical.js": "^2.0.1" + }, + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/typings": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.9.1.tgz", + "integrity": "sha512-i0l/L5gKW8EACbXHVxXM6wn3sUhY2qmnL2OijppzU4dENC7/hqySMQDer7/+cJbNSNG7uHF/Z+9JmHtDfRfuGg==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@types/jquery": "3.5.16" + }, + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/vue": { + "version": "9.0.0-alpha.8", + "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-9.0.0-alpha.8.tgz", + "integrity": "sha512-k1MITATUmu4kAV+Dksmox3pbaPaQqSvqc2Y47iWqbTXVYshD78APbfxYFW2DtKnpFuNJNYE1tvl5ME1JZFqErQ==", + "license": "AGPL-3.0-or-later", + "dependencies": { + "@ckpack/vue-color": "^1.6.0", + "@floating-ui/dom": "^1.6.13", + "@nextcloud/auth": "^2.4.0", + "@nextcloud/axios": "^2.5.1", + "@nextcloud/browser-storage": "^0.4.0", + "@nextcloud/capabilities": "^1.2.0", + "@nextcloud/event-bus": "^3.3.2", + "@nextcloud/initial-state": "^2.2.0", + "@nextcloud/l10n": "^3.2.0", + "@nextcloud/logger": "^3.0.2", + "@nextcloud/router": "^3.0.1", + "@nextcloud/sharing": "^0.2.4", + "@nextcloud/timezones": "^0.1.1", + "@vuepic/vue-datepicker": "^11.0.2", + "@vueuse/components": "^13.0.0", + "@vueuse/core": "^13.0.0", + "blurhash": "^2.0.5", + "clone": "^2.1.2", + "debounce": "^2.2.0", + "dompurify": "^3.2.4", + "emoji-mart-vue-fast": "^15.0.4", + "escape-html": "^1.0.3", + "floating-vue": "^5.2.2", + "focus-trap": "^7.6.4", + "linkifyjs": "^4.2.0", + "p-queue": "^8.0.1", + "rehype-external-links": "^3.0.0", + "rehype-highlight": "^7.0.2", + "rehype-react": "^8.0.0", + "remark-breaks": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.1", + "splitpanes": "^4.0.3", + "string-length": "^6.0.0", + "striptags": "^3.2.0", + "tabbable": "^6.2.0", + "tributejs": "^5.1.3", + "unified": "^11.0.5", + "unist-builder": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vue": "^3.5.13", + "vue-router": "^4.5.0", + "vue-select": "^4.0.0-beta.6" + }, + "engines": { + "node": "^20.11.0", + "npm": "^10.0.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/dompurify": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.2.0.tgz", + "integrity": "sha512-Fgg31wv9QbLDA0SpTOXO3MaxySc4DKGLi8sna4/Utjo4r3ZRPdCt4UQee8BWr+Q5z21yifghREPJGYaEOEIACg==", + "deprecated": "This is a stub types definition. dompurify provides its own type definitions, so you do not need this installed.", + "license": "MIT", + "dependencies": { + "dompurify": "*" + } + }, + "node_modules/@types/escape-html": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", + "integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==", + "license": "MIT" + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/jquery": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.16.tgz", + "integrity": "sha512-bsI7y4ZgeMkmpG9OM710RRzDFp+w4P1RGiIt30C1mSBT+ExCleeh4HObwgArnDFELmRrOpXgSYN9VF1hj+f1lw==", + "license": "MIT", + "dependencies": { + "@types/sizzle": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", + "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/semver": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", + "license": "MIT" + }, + "node_modules/@types/sizzle": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz", + "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.5.tgz", + "integrity": "sha512-HYV3tJGARROq5nlVMJh5KKHk7GU8Au3IrrmNNqr978m0edxgpHgYPDoNUGrvEgIbObz09SQezFR3A1EVmB5WZg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.5" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.5.tgz", + "integrity": "sha512-S9VAVJYVAe4RPx2JZb9ZTEi0lqTySz2CBeF0wHT5D3dkTLnT9yMMGegKNl4b2EIELwLSkcI9bl2qp0/jW+upqA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.5", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.5.tgz", + "integrity": "sha512-QBjG72RfpM0DKtpns2RZOxBltO226kOAls9e4Lri6YxS2gWTgL0H+wj1R2K76lxxIeOrqo4+2Ty6RQnzv+WSTQ==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT" + }, + "node_modules/@vuepic/vue-datepicker": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-11.0.2.tgz", + "integrity": "sha512-uHh78mVBXCEjam1uVfTzZ/HkyDwut/H6b2djSN9YTF+l/EA+XONfdCnOVSi1g+qVGSy65DcQAwyBNidAssnudQ==", + "license": "MIT", + "dependencies": { + "date-fns": "^4.1.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "vue": ">=3.3.0" + } + }, + "node_modules/@vueuse/components": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/components/-/components-13.1.0.tgz", + "integrity": "sha512-2cqRdRJ1CP/a9WpDAlIZneaivUuwze2e8W0CjKHbWqJ9p7nldccwMyEqKC7N6naYvipG469IGfYk6rnT/hoKfA==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "13.1.0", + "@vueuse/shared": "13.1.0" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/core": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.1.0.tgz", + "integrity": "sha512-PAauvdRXZvTWXtGLg8cPUFjiZEddTqmogdwYpnn60t08AA5a8Q4hZokBnpTOnVNqySlFlTcRYIC8OqreV4hv3Q==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.1.0", + "@vueuse/shared": "13.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.1.0.tgz", + "integrity": "sha512-+TDd7/a78jale5YbHX9KHW3cEDav1lz1JptwDvep2zSG8XjCsVE+9mHIzjTOaPbHUAk5XiE4jXLz51/tS+aKQw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.1.0.tgz", + "integrity": "sha512-IVS/qRRjhPTZ6C2/AM3jieqXACGwFZwWTdw5sNTSKk2m/ZpkuuN+ri+WCVUP8TqaKwJYt/KuMwmXspMAw8E6ew==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "license": "MIT" + }, + "node_modules/assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/birpc": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.3.0.tgz", + "integrity": "sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/blurhash": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz", + "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" + }, + "node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "license": "MIT", + "dependencies": { + "resolve": "^1.17.0" + } + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", + "license": "MIT", + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "license": "ISC", + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "license": "MIT", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "license": "MIT" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "license": "MIT" + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001714", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001714.tgz", + "integrity": "sha512-mtgapdwDLSSBnCI3JokHM7oEQBLxiJKVRtg10AxM1AyeiKcM96f0Mkbqeq+1AbiCtvMcHRulAAEMu693JrSWqg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "license": "ISC" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-js": { + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", + "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "license": "MIT" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "license": "MIT", + "dependencies": { + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/debounce": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-2.2.0.tgz", + "integrity": "sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, + "node_modules/decode-named-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", + "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "license": "MIT" + }, + "node_modules/domain-browser": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", + "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/dompurify": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.5.tgz", + "integrity": "sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.137", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.137.tgz", + "integrity": "sha512-/QSJaU2JyIuTbbABAo/crOs+SuAZLS+fVVS10PVrIT9hrRkmZl8Hb0xPSkKRUUWHQtYzXHpQUW3Dy5hwMzGZkA==", + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "license": "MIT" + }, + "node_modules/emoji-mart-vue-fast": { + "version": "15.0.4", + "resolved": "https://registry.npmjs.org/emoji-mart-vue-fast/-/emoji-mart-vue-fast-15.0.4.tgz", + "integrity": "sha512-OjuxqoMJRTTG7Vevz0mR1ZnqY1DI8gGnmoskuuC8qL8VwwTjrGdwAO4WRWtAUN8P6Di7kxvY6cUgNETNFmbP4A==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.18.6", + "core-js": "^3.23.5" + }, + "peerDependencies": { + "vue": ">2.0.0" + } + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.24.0.tgz", + "integrity": "sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.24.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz", + "integrity": "sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz", + "integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "vue-eslint-parser": "^9.4.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-vue/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/floating-vue": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/floating-vue/-/floating-vue-5.2.2.tgz", + "integrity": "sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "~1.1.1", + "vue-resize": "^2.0.0-alpha.1" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.0", + "vue": "^3.2.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/floating-vue/node_modules/@floating-ui/dom": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.1.tgz", + "integrity": "sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.1.0" + } + }, + "node_modules/focus-trap": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.4.tgz", + "integrity": "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==", + "license": "MIT", + "dependencies": { + "tabbable": "^6.2.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "license": "MIT" + }, + "node_modules/ical.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ical.js/-/ical.js-2.1.0.tgz", + "integrity": "sha512-BOVfrH55xQ6kpS3muGvIXIg2l7p+eoe12/oS7R5yrO3TL/j/bLsR0PR+tYQESFbyTbvGgPHn9zQ6tI4FWyuSaQ==", + "license": "MPL-2.0" + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.1.tgz", + "integrity": "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/is-absolute-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", + "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-timers-promises": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", + "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/linkifyjs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.2.0.tgz", + "integrity": "sha512-pCj3PrQyATaoTYKHrgWRF3SJwsm61udVh+vuls/Rl6SptiDhgE7ziUIudAedRY9QEfynmM7/RmLEfPUyw1HPCw==", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lowlight": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz", + "integrity": "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.0.0", + "highlight.js": "~11.11.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-newline-to-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-newline-to-break/-/mdast-util-newline-to-break-2.0.0.tgz", + "integrity": "sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-find-and-replace": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-notifier": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-polyfill-webpack-plugin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-b4ei444EKkOagG/yFqojrD3QTYM5IOU1f8tn9o6uwrG4qL+brI7oVhjPVd0ZL2xy+Z6CP5bu9w8XTvlWgiXHcw==", + "license": "MIT", + "dependencies": { + "node-stdlib-browser": "^1.3.0", + "type-fest": "^4.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "webpack": ">=5" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" + }, + "node_modules/node-stdlib-browser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.3.1.tgz", + "integrity": "sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==", + "license": "MIT", + "dependencies": { + "assert": "^2.0.0", + "browser-resolve": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^5.7.1", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "create-require": "^1.1.1", + "crypto-browserify": "^3.12.1", + "domain-browser": "4.22.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "isomorphic-timers-promises": "^1.0.1", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "pkg-dir": "^5.0.0", + "process": "^0.11.10", + "punycode": "^1.4.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.6.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.1", + "url": "^0.11.4", + "util": "^0.12.4", + "vm-browserify": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-stdlib-browser/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz", + "integrity": "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "license": "ISC", + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.2.tgz", + "integrity": "sha512-sH2JK3wNY809JOeiiURUR0wehJ9/gd9qFN2Y828jCbxEzKEmEt0pzCXwqiSTfuRsK9vQsOflSdnbdBOGrhtn+g==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/pkg-dir/node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/property-information": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", + "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/rehype-external-links": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz", + "integrity": "sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-is-element": "^3.0.0", + "is-absolute-url": "^4.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-highlight": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rehype-highlight/-/rehype-highlight-7.0.2.tgz", + "integrity": "sha512-k158pK7wdC2qL3M5NcZROZ2tR/l7zOzjxXd5VGdcfIyoijjQqpHd3JKtYSBDpDZ38UI2WJWuFAtkMDxmx5kstA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-text": "^4.0.0", + "lowlight": "^3.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-react": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/rehype-react/-/rehype-react-8.0.0.tgz", + "integrity": "sha512-vzo0YxYbB2HE+36+9HWXVdxNoNDubx63r5LBzpxBGVWM8s9mdnMdbmuJBAX6TTyuGdZjZix6qU3GcSuKCIWivw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-breaks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-breaks/-/remark-breaks-4.0.0.tgz", + "integrity": "sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-newline-to-break": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.86.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.86.3.tgz", + "integrity": "sha512-iGtg8kus4GrsGLRDLRBRHY9dNVA78ZaS7xr01cWnS7PEMQyFtTqBiyCrfpTYTZXRWM94akzckYjh8oADfFNTzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-loader": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", + "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "license": "MIT" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sortablejs": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", + "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/splitpanes": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/splitpanes/-/splitpanes-4.0.3.tgz", + "integrity": "sha512-S/f1CoH2JroOib7kzQtTQNtQCa7VzNQ2qKOO5HNj/5EVVcNkfz1eX/sH+X3XKdBdDLihEKDekVGwrLADd2oirA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antoniandre" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "license": "MIT", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-6.0.0.tgz", + "integrity": "sha512-1U361pxZHEQ+FeSjzqRpV+cu2vTzYeWeafXFLykiFlv4Vc0n3njgU8HrMbyik5uwm77naWMuVG8fhEF+Ovb1Kg==", + "license": "MIT", + "dependencies": { + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/striptags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", + "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==", + "license": "MIT" + }, + "node_modules/style-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", + "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.27.0" + } + }, + "node_modules/style-to-js": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.16.tgz", + "integrity": "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.8" + } + }, + "node_modules/style-to-object": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "license": "MIT", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tributejs": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/tributejs/-/tributejs-5.1.3.tgz", + "integrity": "sha512-B5CXihaVzXw+1UHhNFyAwUTMDk1EfoLP5Tj1VhD9yybZ1I8DZJEv8tZ1l0RJo0t0tk9ZhR8eG5tEsaCvRigmdQ==", + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "license": "MIT" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.0.tgz", + "integrity": "sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-builder": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-4.0.0.tgz", + "integrity": "sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-loader": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz", + "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "watchpack": "^2.4.0" + }, + "peerDependencies": { + "webpack": "^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/vue-resize": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz", + "integrity": "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz", + "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/vue-select": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/vue-select/-/vue-select-4.0.0-beta.6.tgz", + "integrity": "sha512-K+zrNBSpwMPhAxYLTCl56gaMrWZGgayoWCLqe5rWwkB8aUbAUh7u6sXjIR7v4ckp2WKC7zEEUY27g6h1MRsIHw==", + "license": "MIT", + "peerDependencies": { + "vue": "3.x" + } + }, + "node_modules/vuedraggable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", + "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", + "license": "MIT", + "dependencies": { + "sortablejs": "1.14.0" + }, + "peerDependencies": { + "vue": "^3.0.1" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.99.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.5.tgz", + "integrity": "sha512-q+vHBa6H9qwBLUlHL4Y7L0L1/LlyBKZtS9FHNCQmtayxjI5RKC9yD8gpvLeqGv5lCQp1Re04yi0MF40pf30Pvg==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-notifier": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", + "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" + }, + "peerDependencies": { + "@types/webpack": ">4.41.31" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + } + } + }, + "node_modules/webpack-notifier/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-notifier/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json index 05e2ef7..fdb050f 100644 --- a/package.json +++ b/package.json @@ -1,63 +1,55 @@ { - "license": "agpl", - "private": true, - "scripts": { - "build": "NODE_ENV=production ./node_modules/.bin/webpack-cli --progress --config webpack.js", - "dev": "NODE_ENV=development ./node_modules/.bin/webpack-cli --progress --config webpack.js", - "watch": "NODE_ENV=development ./node_modules/.bin/webpack-cli --progress --watch --config webpack.js", - "lint": "./node_modules/.bin/eslint --ext .js,.vue src", - "lint:fix": "./node_modules/.bin/eslint --ext .js,.vue src --fix", - "stylelint": "./node_modules/.bin/stylelint src", - "stylelint:fix": "./node_modules/.bin/stylelint src --fix" - }, - "dependencies": { - "axios": "^0.24.0", - "trim": "^1.0.1", - "vue": "^2.6.11" - }, - "browserslist": [ - "extends @nextcloud/browserslist-config" - ], - "engines": { - "node": ">=16.0.0" - }, - "devDependencies": { - "@babel/core": "^7.9.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/preset-env": "^7.9.0", - "@nextcloud/axios": "^2.3.0", - "@nextcloud/browserslist-config": "^2.3.0", - "@nextcloud/eslint-config": "^8.1.2", - "@nextcloud/initial-state": "^2.0.0", - "@nextcloud/l10n": "^2.1.0", - "@nextcloud/vue": "^7.12.1", - "babel-eslint": "^10.1.0", - "babel-loader": "^8.1.0", - "css-loader": "^3.4.2", - "eslint": "^8.0.0", - "eslint-config-standard": "^17.0.0", - "eslint-import-resolver-webpack": "^0.12.1", - "eslint-plugin-import": "^2.20.0", - "eslint-plugin-nextcloud": "^0.3.0", - "eslint-plugin-node": "^10.0.0", - "eslint-plugin-promise": "^6.0.0", - "eslint-plugin-standard": "^4.0.1", - "eslint-plugin-vue": "^9.0.0", - "eslint-webpack-plugin": "^3.0.0", - "file-loader": "^6.0.0", - "sass": "^1.49.9", - "sass-loader": "^13.0.2", - "stylelint": "^14.0.0", - "stylelint-config-recommended-scss": "^7.0.0", - "stylelint-scss": "^4.0.0", - "stylelint-webpack-plugin": "^3.3.0", - "url-loader": "^4.0.0", - "vue-loader": "^15", - "vue-style-loader": "^4.1.3", - "vue-template-compiler": "^2.7.13", - "webpack": "^5.0.0", - "webpack-cli": "^4.0.0", - "webpack-merge": "^4.2.2", - "webpack-node-externals": "^1.7.2" - } + "license": "agpl", + "private": true, + "module": true, + "scripts": { + "build": "NODE_ENV=production ./node_modules/.bin/webpack-cli --progress --config webpack.config.js", + "dev": "NODE_ENV=development ./node_modules/.bin/webpack-cli --progress --config webpack.config.js", + "watch": "NODE_ENV=development ./node_modules/.bin/webpack-cli --progress --watch --config webpack.config.js", + "lint": "ESLINT_USE_FLAT_CONFIG=false ./node_modules/.bin/eslint --ext .js,.vue --ignore-path .gitignore --fix src", + "format": "./node_modules/.bin/prettier src --write" + }, + "dependencies": { + "@babel/core": ">=7.12.0 <8.0.0", + "@formatjs/intl-segmenter": "^12.0.8", + "@nextcloud/router": "^3.0.1", + "@nextcloud/vue": "^9.0.0-alpha.8", + "node-polyfill-webpack-plugin": "^4.1.0", + "pinia": "^3.0.1", + "postcss": "^7.0.0 || ^8.0.1", + "vue": "^3.5.13", + "vuedraggable": "^4.1.0" + }, + "browserslist": [ + "extends @nextcloud/browserslist-config" + ], + "engines": { + "node": ">=16.0.0" + }, + "devDependencies": { + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@nextcloud/axios": "^2.5.1", + "@nextcloud/browserslist-config": "^3.0.1", + "@nextcloud/event-bus": "^3.3.1", + "@nextcloud/initial-state": "^2.2.0", + "@nextcloud/l10n": "^3.2.0", + "babel-loader": "^9.1.3", + "css-loader": "^7.1.2", + "eslint": "^9.19.0", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-vue": "^9.32.0", + "file-loader": "^6.2.0", + "mini-css-extract-plugin": "^2.9.1", + "postcss-loader": "^8.1.1", + "prettier": "3.4.2", + "sass": "^1.78.0", + "sass-loader": "^16.0.1", + "source-map-loader": "^5.0.0", + "style-loader": "^4.0.0", + "vue-loader": "^17.4.2", + "vue-router": "^4.4.5", + "webpack": "^5.94.0", + "webpack-cli": "^5.1.4", + "webpack-notifier": "^1.15.0" + } } diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..7190a60 --- /dev/null +++ b/renovate.json @@ -0,0 +1,3 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json" +} diff --git a/screenshots/admin_settings.png b/screenshots/admin_settings.png index 4d7a0e0..eae14bb 100644 Binary files a/screenshots/admin_settings.png and b/screenshots/admin_settings.png differ diff --git a/screenshots/personal_settings.png b/screenshots/personal_settings.png index 05a73ee..480063b 100644 Binary files a/screenshots/personal_settings.png and b/screenshots/personal_settings.png differ diff --git a/src/AdminCategoriesCustom.vue b/src/AdminCategoriesCustom.vue deleted file mode 100644 index 2a84749..0000000 --- a/src/AdminCategoriesCustom.vue +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - diff --git a/src/AppMenu.vue b/src/AppMenu.vue deleted file mode 100644 index c456370..0000000 --- a/src/AppMenu.vue +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - - diff --git a/src/Loader.vue b/src/Loader.vue deleted file mode 100644 index d059f68..0000000 --- a/src/Loader.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - - diff --git a/src/PageLoader.js b/src/PageLoader.js deleted file mode 100644 index 3c8bd13..0000000 --- a/src/PageLoader.js +++ /dev/null @@ -1,20 +0,0 @@ -const createElement = require('./lib/createElement') - -const PageLoader = () => { - const pageLoader = createElement('div', {id: 'side-menu-loader'}) - const pageLoaderBar = createElement('div', {id: 'side-menu-loader-bar'}) - - pageLoader.appendChild(pageLoaderBar) - document.querySelector('body').appendChild(pageLoader) - - let pageLoaderValue = 0 - - window.addEventListener('beforeunload', () => { - setInterval(() => { - pageLoaderBar.style.width = pageLoaderValue.toString() + '%' - pageLoaderValue = Math.min(pageLoaderValue + .2, 100) - }, 25) - }) -} - -module.exports = PageLoader diff --git a/src/SideMenu.js b/src/SideMenu.js deleted file mode 100644 index e7b3675..0000000 --- a/src/SideMenu.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import Vue from 'vue' -import AppMenu from './AppMenu.vue' -import SideMenu from './SideMenu.vue' -import SideMenuBig from './SideMenuBig.vue' -import SideMenuWithCategories from './SideMenuWithCategories.vue' -import PageLoader from './PageLoader' -import SMcreateElement from './lib/createElement' - -Vue.prototype.OC = OC -Vue.prototype.t = OC.L10N.translate - -window.SMcreateElement = SMcreateElement -window.PageLoader = PageLoader - -const mountSideMenuComponent = () => { - const container = document.querySelector('#side-menu') - - if (!container) { - return window.setTimeout(mountSideMenuComponent, 50) - } - - const component = (() => { - if (container.getAttribute('data-bigmenu')) { - return SideMenuBig - } else if(container.getAttribute('data-sidewithcategories')) { - return SideMenuWithCategories - } else { - return SideMenu - } - })() - - const View = Vue.extend(component) - const App = new View({}) - - App.$mount('#side-menu') - - document.querySelector('body').dispatchEvent(new CustomEvent('side-menu.ready')) -} - -const mountAppMenu = () => { - const container = document.querySelector('#header .app-menu') - - if (!container) { - return window.setTimeout(mountAppMenu, 50) - } - - const View = Vue.extend(AppMenu) - const App = new View({}) - - App.$mount('#header .app-menu') -} - -mountSideMenuComponent() -mountAppMenu() diff --git a/src/SideMenu.vue b/src/SideMenu.vue deleted file mode 100644 index 95731b3..0000000 --- a/src/SideMenu.vue +++ /dev/null @@ -1,171 +0,0 @@ - - - - diff --git a/src/SideMenuBig.vue b/src/SideMenuBig.vue deleted file mode 100644 index f9c0783..0000000 --- a/src/SideMenuBig.vue +++ /dev/null @@ -1,155 +0,0 @@ - - - - diff --git a/src/SideMenuWithCategories.vue b/src/SideMenuWithCategories.vue deleted file mode 100644 index 07530a8..0000000 --- a/src/SideMenuWithCategories.vue +++ /dev/null @@ -1,152 +0,0 @@ - - - - diff --git a/src/admin.js b/src/admin.js index 66fb71d..79505b7 100644 --- a/src/admin.js +++ b/src/admin.js @@ -8,275 +8,27 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ -import AdminCategoriesCustom from './AdminCategoriesCustom.vue' -import Vue from 'vue' +import './scss/admin.scss' -Vue.prototype.OC = window.OC -Vue.prototype.OCA = window.OCA +import '@formatjs/intl-segmenter/polyfill.js' -let elements = [] +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import { waitContainer } from './lib/dom.js' -const selector = '#side-menu-message' +import AdminSettings from './pages/AdminSettings' -const userConfig = (name, value, callbacks) => { - const url = OC.generateUrl('/apps/side_menu/personalSetting/valueSet') - const formData = [] - - formData.push('name=' + encodeURIComponent(name)) - formData.push('value=' + encodeURIComponent(value)) - - fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: formData.join('&') - }) - .then(callbacks.success) - .catch(callbacks.error) -} - -const appConfig = (name, value, callbacks) => { - OCP.AppConfig.setValue('side_menu', name, value, callbacks) -} - -const saveSettings = (key) => { - const element = elements[key] - - if (!element) { - return - } - - let value - let name - - if (element.hasAttribute('data-checkbox')) { - name = element.getAttribute('data-name') - value = [] - - const inputs = document.querySelectorAll('input[name="' + name + '[]"]:checked') - - for (let input of inputs) { - value.push(input.value) - } - - value = JSON.stringify(value) - } else { - name = element.getAttribute('name') - value = element.value - } - - const size = elements.length - - if (name === 'cache') { - ++value - } - - const progress = document.querySelector('#side-menu-save-progress') - - progress.style.width = '40px'; - progress.style.marginLeft = '5px'; - - const callbacks = { - success: () => { - const percent = parseInt((key + 1) * 100 / size); - - progress.setAttribute('value', percent) - - if (key < size - 1) { - saveSettings(key + 1) - } else { - location.reload() - } - }, - error: () => { - OC.msg.finishedError(selector, t('side_menu', 'Error while saving "' + element + '"')) - } - } - - if (element.hasAttribute('data-personal')) { - userConfig(name, value, callbacks) - } else { - appConfig(name, value, callbacks) - } -} - -const elementToggler = (element) => { - let display = 'none' - - if (window.getComputedStyle(element).display === 'none') { - display = 'block' - } - - element.style.display = display -} - -const updateAppsCategoriesCustom = () => { - let values = {} - - for (let item of document.querySelectorAll('.apps-categories-custom')) { - let app = item.getAttribute('data-app') - let value = item.value - - if (value) { - values[app] = value - } - } - - document.querySelector('#apps-categories-custom').value = JSON.stringify(values) -} - -document.addEventListener('DOMContentLoaded', () => { - $('*[data-toggle="tooltip"]').tooltip(); - - if (document.querySelector('#side-menu-categories-custom')) { - const View = Vue.extend(AdminCategoriesCustom) - const adminCategoriesCustom = new View({}) - - adminCategoriesCustom.$mount('#side-menu-categories-custom') - } - - elements = document.querySelectorAll('.side-menu-setting') - - document.querySelector('#side-menu-save').addEventListener('click', (event) => { - event.preventDefault() - OC.msg.startSaving(selector) - - saveSettings(0) - }) - - const resets = document.querySelectorAll('.btn-reset') - - for (let btn of resets) { - btn.addEventListener('click', (event) => { - const target = event.target - const values = JSON.parse(target.getAttribute('data-reset')) - - target.classList.toggle('btn-reset--progress', true) - - for (let i in values) { - document.querySelector(`#${i}`).value = values[i] - } - - window.setTimeout(() => { - target.classList.toggle('btn-reset--progress', false) - }, 800) - }) - } - - const displays = document.querySelectorAll('.side-menu-display') - - for (let display of displays) { - display.addEventListener('click', (event) => { - const target = event.target - - for (let d of displays) { - d.classList.toggle('is-active', d === display) - } - - document.querySelector('#side-menu-always-displayed').value = target.getAttribute('data-alwaysdiplayed') - document.querySelector('#side-menu-big-menu').value = target.getAttribute('data-bigmenu') - document.querySelector('#side-menu-side-with-categories').value = target.getAttribute('data-sidewithcategories') - }) - } - - for (let item of document.querySelectorAll('.apps-categories-custom')) { - item.addEventListener('change', (event) => { - updateAppsCategoriesCustom() - }) - } - - for (let item of document.querySelectorAll('.side-menu-setting-live')) { - item.addEventListener('change', (event) => { - const target = event.target - const name = target.getAttribute('name') - - let value = target.value - let id = null - - if (name === 'background-color-opacity') { - id = '#side-menu-background-color, #side-menu-background-color-to' - } else if (name === 'dark-mode-background-color-opacity') { - id = '#side-menu-dark-mode-background-color, #side-menu-dark-mode-background-color-to' - } - - if (id) { - document.querySelector(id).dispatchEvent(new CustomEvent('change')) - - return - } - - if (name === 'opener') { - const url = OC.generateUrl(`/apps/side_menu/img/${value}.svg`).replace('/index.php', '') - - value = `url(${url})` - } - - if (name === 'icon-invert-filter' || name === 'icon-opacity') { - value/=100 - } - - if (['dark-mode-background-color', 'dark-mode-background-color-to'].indexOf(name) > -1) { - const opacity = parseInt(document.querySelector('#side-menu-dark-mode-background-color-opacity').value * 255 / 100) - - value = [value, opacity.toString(16)].join('') - } else if (['background-color', 'background-color-to'].indexOf(name) > -1) { - const opacity = parseInt(document.querySelector('#side-menu-background-color-opacity').value * 255 / 100) - - value = [value, opacity.toString(16)].join('') - } - - document.documentElement.style.setProperty('--side-menu-' + name, value) - }) - } - - for (let toggler of document.querySelectorAll('.side-menu-toggler')) { - toggler.addEventListener('click', (event) => { - const target = event.target - const element = document.querySelector(target.getAttribute('data-target')) - - elementToggler(element) - }) - } - - sortable('#categories-list .side-menu-setting-list', { - placeholderClass: 'side-menu-setting-list-drop' - }) - - try { - sortable('#categories-list .side-menu-setting-list')[0].addEventListener('sortstop', (e) => { - let value = [] - - for (let item of document.querySelectorAll('#categories-list .side-menu-setting-list-item')) { - value.push(item.getAttribute('data-id')) - } - - document.querySelector('input[name="categories-order"]').value = JSON.stringify(value) - }) - } catch (e) { - } - - sortable('#apps-order-list .side-menu-setting-list', { - placeholderClass: 'side-menu-setting-list-drop' - }) - - try { - sortable('#apps-order-list .side-menu-setting-list')[0].addEventListener('sortstop', (e) => { - let value = [] - - for (let item of document.querySelectorAll('#apps-order-list .side-menu-setting-list-item')) { - value.push(item.getAttribute('data-id')) - } - - document.querySelector('input[name="apps-order"]').value = JSON.stringify(value) - }) - } catch (e) { - } +waitContainer('#side-menu-admin-settings').then((selector) => { + const pinia = createPinia() + const app = createApp(AdminSettings) + app.use(pinia) + app.mixin({ methods: { t, n } }) + app.mount(selector) }) diff --git a/src/components/AppSearch.vue b/src/components/AppSearch.vue new file mode 100644 index 0000000..9366756 --- /dev/null +++ b/src/components/AppSearch.vue @@ -0,0 +1,29 @@ + + + + diff --git a/src/CloserButton.vue b/src/components/CloserButton.vue similarity index 75% rename from src/CloserButton.vue rename to src/components/CloserButton.vue index 99779f8..cfff324 100644 --- a/src/CloserButton.vue +++ b/src/components/CloserButton.vue @@ -15,11 +15,15 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . --> - diff --git a/src/components/MenuLogo.vue b/src/components/MenuLogo.vue new file mode 100644 index 0000000..a619e96 --- /dev/null +++ b/src/components/MenuLogo.vue @@ -0,0 +1,52 @@ + + + + diff --git a/src/OpenerButton.vue b/src/components/OpenerButton.vue similarity index 78% rename from src/OpenerButton.vue rename to src/components/OpenerButton.vue index 32813e9..536c61c 100644 --- a/src/OpenerButton.vue +++ b/src/components/OpenerButton.vue @@ -15,11 +15,15 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . --> - diff --git a/src/components/PageLoader.vue b/src/components/PageLoader.vue new file mode 100644 index 0000000..fdd75a8 --- /dev/null +++ b/src/components/PageLoader.vue @@ -0,0 +1,49 @@ + + + + diff --git a/src/SettingsButton.vue b/src/components/SettingsButton.vue similarity index 70% rename from src/SettingsButton.vue rename to src/components/SettingsButton.vue index b8cb624..8c6eb41 100644 --- a/src/SettingsButton.vue +++ b/src/components/SettingsButton.vue @@ -15,35 +15,35 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . --> - diff --git a/src/SideMenuApp.vue b/src/components/SideMenuApp.vue similarity index 55% rename from src/SideMenuApp.vue rename to src/components/SideMenuApp.vue index c910dce..a6a1190 100644 --- a/src/SideMenuApp.vue +++ b/src/components/SideMenuApp.vue @@ -15,38 +15,44 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . --> - diff --git a/src/SideMenuBigApp.vue b/src/components/SideMenuBigApp.vue similarity index 55% rename from src/SideMenuBigApp.vue rename to src/components/SideMenuBigApp.vue index a0fcdde..a6a1190 100644 --- a/src/SideMenuBigApp.vue +++ b/src/components/SideMenuBigApp.vue @@ -15,38 +15,44 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . --> - diff --git a/src/components/settings/AdminSaveButton.vue b/src/components/settings/AdminSaveButton.vue new file mode 100644 index 0000000..cd639a8 --- /dev/null +++ b/src/components/settings/AdminSaveButton.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/src/components/settings/ExternalLink.vue b/src/components/settings/ExternalLink.vue new file mode 100644 index 0000000..80313fb --- /dev/null +++ b/src/components/settings/ExternalLink.vue @@ -0,0 +1,18 @@ + + + diff --git a/src/components/settings/SectionTitle.vue b/src/components/settings/SectionTitle.vue new file mode 100644 index 0000000..b08b570 --- /dev/null +++ b/src/components/settings/SectionTitle.vue @@ -0,0 +1,35 @@ + + + + + + diff --git a/src/Logo.vue b/src/components/settings/SettingItem.vue similarity index 64% rename from src/Logo.vue rename to src/components/settings/SettingItem.vue index 1aec19f..ae7f8f9 100644 --- a/src/Logo.vue +++ b/src/components/settings/SettingItem.vue @@ -15,30 +15,26 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . --> - + + diff --git a/src/components/settings/SettingLabel.vue b/src/components/settings/SettingLabel.vue new file mode 100644 index 0000000..a01b052 --- /dev/null +++ b/src/components/settings/SettingLabel.vue @@ -0,0 +1,71 @@ + + + + diff --git a/src/AppSearch.vue b/src/components/settings/SettingValue.vue similarity index 74% rename from src/AppSearch.vue rename to src/components/settings/SettingValue.vue index b2679a2..62db56c 100644 --- a/src/AppSearch.vue +++ b/src/components/settings/SettingValue.vue @@ -15,18 +15,20 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . --> - diff --git a/src/components/settings/SettingsSection.vue b/src/components/settings/SettingsSection.vue new file mode 100644 index 0000000..f163c27 --- /dev/null +++ b/src/components/settings/SettingsSection.vue @@ -0,0 +1,34 @@ + + + + diff --git a/src/components/settings/UserSaveButton.vue b/src/components/settings/UserSaveButton.vue new file mode 100644 index 0000000..b14974e --- /dev/null +++ b/src/components/settings/UserSaveButton.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/src/components/settings/form/FormAppCategory.vue b/src/components/settings/form/FormAppCategory.vue new file mode 100644 index 0000000..588ce73 --- /dev/null +++ b/src/components/settings/form/FormAppCategory.vue @@ -0,0 +1,292 @@ + + + + diff --git a/src/components/settings/form/FormAppPicker.vue b/src/components/settings/form/FormAppPicker.vue new file mode 100644 index 0000000..00df64b --- /dev/null +++ b/src/components/settings/form/FormAppPicker.vue @@ -0,0 +1,82 @@ + + + + diff --git a/src/components/settings/form/FormAppSort.vue b/src/components/settings/form/FormAppSort.vue new file mode 100644 index 0000000..7a2dec3 --- /dev/null +++ b/src/components/settings/form/FormAppSort.vue @@ -0,0 +1,116 @@ + + + + diff --git a/src/components/settings/form/FormCatSort.vue b/src/components/settings/form/FormCatSort.vue new file mode 100644 index 0000000..b335228 --- /dev/null +++ b/src/components/settings/form/FormCatSort.vue @@ -0,0 +1,119 @@ + + + + diff --git a/src/components/settings/form/FormColorPicker.vue b/src/components/settings/form/FormColorPicker.vue new file mode 100644 index 0000000..904fa95 --- /dev/null +++ b/src/components/settings/form/FormColorPicker.vue @@ -0,0 +1,34 @@ + + + + diff --git a/src/components/settings/form/FormDisplayPicker.vue b/src/components/settings/form/FormDisplayPicker.vue new file mode 100644 index 0000000..2e9c648 --- /dev/null +++ b/src/components/settings/form/FormDisplayPicker.vue @@ -0,0 +1,85 @@ + + diff --git a/src/components/settings/form/FormOpener.vue b/src/components/settings/form/FormOpener.vue new file mode 100644 index 0000000..f1129f9 --- /dev/null +++ b/src/components/settings/form/FormOpener.vue @@ -0,0 +1,37 @@ + + + + diff --git a/src/components/settings/form/FormRange.vue b/src/components/settings/form/FormRange.vue new file mode 100644 index 0000000..6ebada7 --- /dev/null +++ b/src/components/settings/form/FormRange.vue @@ -0,0 +1,65 @@ + + + + diff --git a/src/components/settings/form/FormSelect.vue b/src/components/settings/form/FormSelect.vue new file mode 100644 index 0000000..3b303ca --- /dev/null +++ b/src/components/settings/form/FormSelect.vue @@ -0,0 +1,78 @@ + + + + diff --git a/src/components/settings/form/FormSize.vue b/src/components/settings/form/FormSize.vue new file mode 100644 index 0000000..1e1b468 --- /dev/null +++ b/src/components/settings/form/FormSize.vue @@ -0,0 +1,35 @@ + + + + diff --git a/src/components/settings/form/FormYesNo.vue b/src/components/settings/form/FormYesNo.vue new file mode 100644 index 0000000..3d9f0aa --- /dev/null +++ b/src/components/settings/form/FormYesNo.vue @@ -0,0 +1,29 @@ + + + + diff --git a/src/components/settings/form/index.js b/src/components/settings/form/index.js new file mode 100644 index 0000000..ae9204b --- /dev/null +++ b/src/components/settings/form/index.js @@ -0,0 +1,13 @@ +import FormRange from './FormRange' +import FormColorPicker from './FormColorPicker' +import FormOpener from './FormOpener' +import FormSelect from './FormSelect' +import FormYesNo from './FormYesNo' +import FormSize from './FormSize' +import FormAppPicker from './FormAppPicker' +import FormAppSort from './FormAppSort' +import FormCatSort from './FormCatSort' +import FormDisplayPicker from './FormDisplayPicker' +import FormAppCategory from './FormAppCategory' + +export { FormRange, FormColorPicker, FormOpener, FormSelect, FormYesNo, FormSize, FormAppPicker, FormAppSort, FormCatSort, FormDisplayPicker, FormAppCategory } diff --git a/src/components/settings/index.js b/src/components/settings/index.js new file mode 100644 index 0000000..2036c95 --- /dev/null +++ b/src/components/settings/index.js @@ -0,0 +1,10 @@ +import SettingsSection from './SettingsSection' +import SettingItem from './SettingItem' +import SettingLabel from './SettingLabel' +import SettingValue from './SettingValue' +import SectionTitle from './SectionTitle' +import ExternalLink from './ExternalLink' +import AdminSaveButton from './AdminSaveButton' +import UserSaveButton from './UserSaveButton' + +export { SettingsSection, SettingItem, SettingLabel, SettingValue, SectionTitle, ExternalLink, AdminSaveButton, UserSaveButton } diff --git a/src/l10n/fixtures/cs.yaml b/src/l10n/fixtures/cs.yaml index 9969a4b..ded151a 100644 --- a/src/l10n/fixtures/cs.yaml +++ b/src/l10n/fixtures/cs.yaml @@ -1,95 +1,111 @@ -"Custom menu": "Uživatelsky určená nabídka" -"Enable the custom menu": "Zapnout uživatelsky určenou nabídku" -"No": "Ne" -"Yes": "Ano" -"Menu": "Nabídka" -? 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.' -: 'Pro otevření/skrytí postranní nabídky použijte zkratku Ctrl+O („O“ jako otevřít). Pro pohyb po použijte klávesu Tab.' -"Top menu": "Horní nabídka" -"Apps that not must be moved in the side menu": "Aplikace, které nepřesouvat do postranní nabídky" -"If there is no selection then the global configuration is applied.": "Pokud neexistuje žádný výběr, je uplatněno globální nastavení." -"Experimental": "Experimentální" -"Save": "Uložit" -"You like this app and you want to support me?": "Líbí se vám tato aplikace a chcete podpořit její vývoj?" -"Buy me a coffee ☕": "Kupte mi kafe ☕" -"Hidden": "Skryté" -"Small": "Malé" -"Normal": "Normální" -"Big": "Velké" -"Colors": "Barvy" -"Background color": "Barva pozadí" -"Background color of current app": "Barva pozadí stávající aplikace" -"Text color": "Barva textu" -"Loader": "Nástroj pro načítání" -"Icon": "Ikona" -"Same color": "Stejná barva" -"Opposite color": "Doplňková barva" -"Transparent": "Průhledné" -"Opaque": "Neprůhledné" -"Opener": "Tlačítko pro otevření" -"Default": "Výchozí" -"Default (dark)": "Výchozí (tmavé)" -"Hamburger": "Hamburger" -"Hamburger (dark)": "Hamburger (tmavé)" -"Hamburger 2": "Hamburger 2" -"Hamburger 2 (dark)": "Hamburger 2 (tmavé)" -"Before the logo": "Před logem" -"After the logo": "Za logem" -"Position": "Pozice" -"Show only the opener (hidden logo)": "Zobrazovat pouze otevírací tlačítko (logo skryto)" -"Do not display the side menu and the opener if there is no application (eg: public pages).": "Nezobrazovat postranní nabídku a její otevírací tlačítko pokud nejsou dostupné žádné aplikace (např. na veřejných stránkách)." -"Panel": "Panel" -"Open the menu when the mouse is hover the opener (automatically disabled on touch screens)": "Otevřít nabídku při najetím ukazatelem na tlačítko nabídky (automaticky vypnuto pro dotykové obrazovky)" -"Display the big menu": "Zobrazit velkou nabídku" -"Display the logo": "Zobrazit logo" -"Icons and texts": "Ikony a texty" -"Loader enabled": "Načítání zapnuto" -"Tips": "Tipy" -"Always displayed": "Vždy zobrazeno" -"This is the automatic behavior when the menu is always displayed.": "Toto je automatické chování, kdy je nabídka vždy zobrazena." -"Not compatible with touch screens.": "Nekompatibilní s dotykovými obrazovkami." -"Big menu": "Velká nabídka" -"Live preview": "Živý náhled" -"Open apps in new tab": "Otevírat aplikace v novém panelu" -"Use the global setting": "Použít globální nastavení" -"Use my selection": "Použít můj výběr" -"Show and hide the list of applications": "Zobrazit/skrýt seznam aplikací" -"Use the avatar instead of the logo": "Použít namísto loga profilový obrázek uživatele" -"You do not have permission to change the settings.": "Nemáte oprávnění měnit nastavení." -"Force this configuration to users": "Vynutit uplatnění těchto nastavení uživatelům" -"Export the configuration": "Exportovat nastavení" -"Purge the cache": "Vyprázdnit mezipaměť" -"Show the link to settings": "Zobrazit odkaz na nastavení" -"The menu is enabled by default for users": "Nabídka je ve výchozím stavu pro uživatele zapnutá" -"Except when the configuration is forced.": "S výjimkou, kdy je nastavení vynuceno." -"Apps that should not be displayed in the menu": "Aplikace, které by neměly být v nabídce zobrazeny" -"This feature is only compatible with the big menu display.": "Tato funkce je kompatibilní pouze s velkou nabídkou." -"The logo is a link to the default app": "Logo je odkaz na výchozí aplikaci" -"Others": "Ostatní" -"Categories": "Kategorie" -"Customize sorting": "Přizpůsobit si řazení" -"Order by": "Řadit podle" -"Name": "Název" -"Customed": "Přizpůsobeno" -"Show and hide the list of categories": "Zobrazit/skrýt seznam kategorií" -"This parameters are used when Dark theme or Breeze Dark Theme are enabled.": "Tyto parametry jsou použity v případě, že je zapnutý (Breeze) tmavý motiv vzhledu." -"Dark mode colors": "Barvy tmavého režimu" -"With categories": "S kategoriemi" -"Custom categories": "Vlastní kategorie" -"Customize application categories": "Přizpůsobte kategorie aplikací" -"Reset to default": "Vrátit zpět na výchozí hodnoty" -"Hidden icon": "Skrytá ikona" -"Small icon": "Malá ikona" -"Normal icon": "Normální ikona" -"Big icon": "Velká ikona" -"Hidden text": "Skrytý text" -"Small text": "Malý text" -"Normal text": "Normální text" -"Big text": "Velký text" -"Applications": "Aplikace" -"Applications kept in the top menu": "Aplikace ponechané v horní nabídce" -"Applications kept in the top menu but also shown in side menu": "Aplikace ponechané v horní nabídce ale také zobrazené v té boční" -"These applications must be selected in the previous option.": "Tyto aplikace je třeba vybrat v předchozí volbě." -"Hide labels on mouse over": "Skrýt popisky při najetím ukazatele myši" -"Except the hovered app": "Except the hovered app" -"Search": "Search" +'Custom menu': 'Uživatelsky určená nabídka' +'Enable the custom menu': 'Zapnout uživatelsky určenou nabídku' +'No': 'Ne' +'Yes': 'Ano' +'Menu': 'Nabídka' +'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Pro otevření/skrytí postranní nabídky použijte zkratku Ctrl+o („O“ jako otevřít). Pro pohyb po použijte klávesu tab key.' +'Top menu': 'Horní nabídka' +'Apps that not must be moved in the side menu': 'Aplikace, které nepřesouvat do postranní nabídky' +'If there is no selection then the global configuration is applied.': 'Pokud neexistuje žádný výběr, je uplatněno globální nastavení.' +'Experimental': 'Experimentální' +'Save': 'Uložit' +'You like this app and you want to support me?': 'Líbí se vám tato aplikace a chcete podpořit její vývoj?' +'Buy me a coffee ☕': 'Kupte mi kafe ☕' +'Hidden': 'Skryté' +'Small': 'Malé' +'Normal': 'Normální' +'Big': 'Velké' +'Colors': 'Barvy' +'Background color': 'Barva pozadí' +'Background color of current app': 'Barva pozadí stávající aplikace' +'Text color': 'Barva textu' +'Loader': 'Nástroj pro načítání' +'Icon': 'Ikona' +'Same color': 'Stejná barva' +'Opposite color': 'Doplňková barva' +'Transparent': 'Průhledné' +'Opaque': 'Neprůhledné' +'Opener': 'Tlačítko pro otevření' +'Default': 'Výchozí' +'Default (dark)': 'Výchozí (tmavé)' +'Hamburger': 'Hamburger' +'Hamburger (dark)': 'Hamburger (tmavé)' +'Hamburger 2': 'Hamburger 2' +'Hamburger 2 (dark)': 'Hamburger 2 (tmavé)' +'Before the logo': 'Před logem' +'After the logo': 'Za logem' +'Position': 'Pozice' +'Show only the opener (hidden logo)': 'Zobrazovat pouze otevírací tlačítko (logo skryto)' +'Do not display the side menu and the opener if there is no application (eg: public pages).': 'Nezobrazovat postranní nabídku a její otevírací tlačítko pokud nejsou dostupné žádné aplikace (např. na veřejných stránkách).' +'Panel': 'Panel' +'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Otevřít nabídku při najetím ukazatelem na tlačítko nabídky (automaticky vypnuto pro dotykové obrazovky)' +'Display the big menu': 'Zobrazit velkou nabídku' +'Display the logo': 'Zobrazit logo' +'Icons and texts': 'Ikony a texty' +'Loader enabled': 'Načítání zapnuto' +'Tips': 'Tipy' +'Always displayed': 'Vždy zobrazeno' +'This is the automatic behavior when the menu is always displayed.': 'Toto je automatické chování, kdy je nabídka vždy zobrazena.' +'Not compatible with touch screens.': 'Nekompatibilní s dotykovými obrazovkami.' +'Big menu': 'Velká nabídka' +'Live preview': 'Živý náhled' +'Open apps in new tab': 'Otevírat aplikace v novém panelu' +'Use the global setting': 'Použít globální nastavení' +'Use my selection': 'Použít můj výběr' +'Show and hide the list of applications': 'Zobrazit/skrýt seznam aplikací' +'Use the avatar instead of the logo': 'Použít namísto loga profilový obrázek uživatele' +'You do not have permission to change the settings.': 'Nemáte oprávnění měnit nastavení.' +'Force this configuration to users': 'Vynutit uplatnění těchto nastavení uživatelům' +'Export the configuration': 'Exportovat nastavení' +'Purge the cache': 'Vyprázdnit mezipaměť' +'Show the link to settings': 'Zobrazit odkaz na nastavení' +'The menu is enabled by default for users': 'Nabídka je ve výchozím stavu pro uživatele zapnutá' +'Except when the configuration is forced.': 'S výjimkou, kdy je nastavení vynuceno.' +'Apps that should not be displayed in the menu': 'Aplikace, které by neměly být v nabídce zobrazeny' +'This feature is only compatible with the big menu display.': 'Tato funkce je kompatibilní pouze s velkou nabídkou.' +'The logo is a link to the default app': 'Logo je odkaz na výchozí aplikaci' +'Others': 'Ostatní' +'Categories': 'Kategorie' +'Customize sorting': 'Přizpůsobit si řazení' +'Order by': 'Řadit podle' +'Name': 'Název' +'Customed': 'Přizpůsobeno' +'Show and hide the list of categories': 'Zobrazit/skrýt seznam kategorií' +'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Tyto parametry jsou použity v případě, že je zapnutý (Breeze) tmavý motiv vzhledu.' +'Dark mode colors': 'Barvy tmavého režimu' +'With categories': 'S kategoriemi' +'Custom categories': 'Vlastní kategorie' +'Customize application categories': 'Přizpůsobte kategorie aplikací' +'Reset to default': 'Vrátit zpět na výchozí hodnoty' +'Hidden icon': 'Skrytá ikona' +'Small icon': 'Malá ikona' +'Normal icon': 'Normální ikona' +'Big icon': 'Velká ikona' +'Hidden text': 'Skrytý text' +'Small text': 'Malý text' +'Normal text': 'Normální text' +'Big text': 'Velký text' +'Applications': 'Aplikace' +'Applications kept in the top menu': 'Aplikace ponechané v horní nabídce' +'Applications kept in the top menu but also shown in side menu': 'Aplikace ponechané v horní nabídce ale také zobrazené v té boční' +'These applications must be selected in the previous option.': 'Tyto aplikace je třeba vybrat v předchozí volbě.' +'Hide labels on mouse over': 'Skrýt popisky při najetím ukazatele myši' +'Except the hovered app': 'S výjimkou nadnášené aplikace' +'Search': 'Hledat' +'Toggle the menu': 'Vyp/zap nabídku' +'Open the documentation': 'Open the documentation' +'Ask the developer': 'Zeptejte se vývojáře' +'New request': 'Nový požadavek' +'Report a bug': 'Nahlásit chybu' +'Show the configuration': 'Zobrazit nastavení' +'Configuration:': 'Configuration:' +'Done!': 'Hotovo!' +'Copy': 'Zkopírovat' +'Need help': 'Potřebuji pomoc' +'I would like a new feature': 'Rád bych novou funkci v aplikaci' +'Something went wrong': 'Něco se pokazilo' +'Select apps': 'Vyberte aplikace' +'Sort': 'Seřadit' +'Customize': 'Přizpůsobit' +'Custom': 'Custom' +'Close': 'Zavřít' diff --git a/src/l10n/fixtures/de.yaml b/src/l10n/fixtures/de.yaml index 3710887..6323421 100644 --- a/src/l10n/fixtures/de.yaml +++ b/src/l10n/fixtures/de.yaml @@ -1,95 +1,111 @@ -"Custom menu": "Benutzerdefiniertes Menü" -"Enable the custom menu": "Benutzerdefiniertes Menü aktivieren" -"No": "Nein" -"Yes": "Ja" -"Menu": "Menü" -? 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.' -: 'Verwende die Tastenkombination Strg+o, um das Seitenmenü ein- und auszublenden. Verwende tab zum Navigieren.' -"Top menu": "Obere Navigationsleiste" -"Apps that not must be moved in the side menu": "Apps, die nicht ins Seitenmenü verschoben werden sollen" -"If there is no selection then the global configuration is applied.": "Wenn keine Auswahl vorhanden ist, wird die globale Konfiguration angewendet." -"Experimental": "Experimentell" -"Save": "Speichern" -"You like this app and you want to support me?": "Du magst diese App und möchtest mich unterstützen?" -"Buy me a coffee ☕": "Gib mir einen Kaffee aus ☕" -"Hidden": "Ausblenden" -"Small": "Klein" -"Normal": "Normal" -"Big": "Groß" -"Colors": "Farben" -"Background color": "Hintergrundfarbe" -"Background color of current app": "Hintergrundfarbe der aktuellen App" -"Text color": "Textfarbe" -"Loader": "Fortschrittsbalken" -"Icon": "Symbol" -"Same color": "Selbe Farbe" -"Opposite color": "Gegenfarbe" -"Transparent": "Transparent" -"Opaque": "Nicht transparent" -"Opener": "Menü-Symbol" -"Default": "Standard" -"Default (dark)": "Standard (dunkel)" -"Hamburger": "Hamburger" -"Hamburger (dark)": "Hamburger (dunkel)" -"Hamburger 2": "Hamburger 2" -"Hamburger 2 (dark)": "Hamburger 2 (dunkel)" -"Before the logo": "Vor dem Logo" -"After the logo": "Nach dem Logo" -"Position": "Position" -"Show only the opener (hidden logo)": "Nur das Menü-Symbol anzeigen (Logo wird ausgeblendet)" -"Do not display the side menu and the opener if there is no application (eg: public pages).": "Zeige das Seitenmenü und das Menü-Symbol nicht an, wenn keine App vorhanden ist (z.B. bei öffentlichen Seiten)." -"Panel": "Panel" -"Open the menu when the mouse is hover the opener (automatically disabled on touch screens)": "Öffne das Menü, wenn die Maus über das Menü-Symbol bewegt wird (auf Touchscreens automatisch deaktiviert)" -"Display the big menu": "Großes Menü anzeigen" -"Display the logo": "Logo anzeigen" -"Icons and texts": "Symbole und Texte" -"Loader enabled": "Fortschrittsbalken anzeigen" -"Tips": "Tipps" -"Always displayed": "Immer anzeigen" -"This is the automatic behavior when the menu is always displayed.": "Dies ist das automatische Verhalten, wenn das Menü immer angezeigt wird." -"Not compatible with touch screens.": "Nicht kompatibel mit Touchscreens." -"Big menu": "Großes Menü" -"Live preview": "Live-Vorschau" -"Open apps in new tab": "Öffne Apps in einem neuen Tab" -"Use the global setting": "Verwende die globale Einstellung" -"Use my selection": "Verwende meine Auswahl" -"Show and hide the list of applications": "Ein- und Ausblenden der Appliste" -"Use the avatar instead of the logo": "Avatar anstelle des Logos anzeigen" -"You do not have permission to change the settings.": "Du hast keine Berechtigung, die Einstellungen dieser App zu ändern." -"Force this configuration to users": "Konfiguration für alle Benutzer erzwingen" -"Export the configuration": "Konfiguration exportieren" -"Purge the cache": "Cache leeren" -"Show the link to settings": "Link zu den Einstellungen anzeigen" -"The menu is enabled by default for users": "Das Menü ist standardmäßig für alle Benutzer aktiviert" -"Except when the configuration is forced.": "Gilt nicht, wenn die Konfiguration erzwungen wird." -"Apps that should not be displayed in the menu": "Apps, die nicht im Menü angezeigt werden sollen" -"This feature is only compatible with the big menu display.": "Kompatibel mit dem großen Menü." -"The logo is a link to the default app": "Das Logo ist ein Link zur Standard-App" -"Others": "Andere" -"Categories": "Kategorien" -"Customize sorting": "Sortierung anpassen" -"Order by": "Sortieren nach" -"Name": "Name" -"Customed": "Benutzerdefiniert" -"Show and hide the list of categories": "Liste der Kategorien ein- und ausblenden" -"This parameters are used when Dark theme or Breeze Dark Theme are enabled.": "Diese Optionen werden auf Dark Theme oder Breeze Dark Theme angewendet." -"Dark mode colors": "Farben für den dunklen Modus" -"With categories": "Mit Kategorien" -"Custom categories": "Benutzerdefinierte Kategorien" -"Customize application categories": "App-Kategorien anpassen" -"Reset to default": "Auf Standard zurücksetzen" -"Hidden icon": "Verstecktes Symbol" -"Small icon": "Kleines Symbol" -"Normal icon": "Normales Symbol" -"Big icon": "Großes Icon" -"Hidden text": "Versteckter Text" -"Small text": "Kleiner Text" -"Normal text": "Normaler Text" -"Big text": "Großer Text" -"Applications": "Apps" -"Applications kept in the top menu": "Apps in der oberen Navigationsleiste" -"Applications kept in the top menu but also shown in side menu": "Apps in der oberen Navigationsleiste, die auch im Seitenmenü angezeigt werden sollen" -"These applications must be selected in the previous option.": "Diese Apps müssen auch in der vorherigen Einstellung ausgewählt werden." -"Hide labels on mouse over": "Labels ausblenden, wenn sich die Maus darüber befindet (Hover)" -"Except the hovered app": "Except the hovered app" -"Search": "Search" +'Custom menu': 'Benutzerdefiniertes Menü' +'Enable the custom menu': 'Benutzerdefiniertes Menü aktivieren' +'No': 'Nein' +'Yes': 'Ja' +'Menu': 'Menü' +'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Verwende die Tastenkombination Strg+o, um das Seitenmenü ein- und auszublenden. Verwende tab key zum Navigieren.' +'Top menu': 'Obere Navigationsleiste' +'Apps that not must be moved in the side menu': 'Apps, die nicht ins Seitenmenü verschoben werden sollen' +'If there is no selection then the global configuration is applied.': 'Wenn keine Auswahl vorhanden ist, wird die globale Konfiguration angewendet.' +'Experimental': 'Experimentell' +'Save': 'Speichern' +'You like this app and you want to support me?': 'Du magst diese App und möchtest mich unterstützen?' +'Buy me a coffee ☕': 'Gib mir einen Kaffee aus ☕' +'Hidden': 'Ausblenden' +'Small': 'Klein' +'Normal': 'Normal' +'Big': 'Groß' +'Colors': 'Farben' +'Background color': 'Hintergrundfarbe' +'Background color of current app': 'Hintergrundfarbe der aktuellen App' +'Text color': 'Textfarbe' +'Loader': 'Fortschrittsbalken' +'Icon': 'Symbol' +'Same color': 'Selbe Farbe' +'Opposite color': 'Gegenfarbe' +'Transparent': 'Transparent' +'Opaque': 'Nicht transparent' +'Opener': 'Menü-Symbol' +'Default': 'Standard' +'Default (dark)': 'Standard (dunkel)' +'Hamburger': 'Hamburger' +'Hamburger (dark)': 'Hamburger (dunkel)' +'Hamburger 2': 'Hamburger 2' +'Hamburger 2 (dark)': 'Hamburger 2 (dunkel)' +'Before the logo': 'Vor dem Logo' +'After the logo': 'Nach dem Logo' +'Position': 'Position' +'Show only the opener (hidden logo)': 'Nur das Menü-Symbol anzeigen (Logo wird ausgeblendet)' +'Do not display the side menu and the opener if there is no application (eg: public pages).': 'Zeige das Seitenmenü und das Menü-Symbol nicht an, wenn keine App vorhanden ist (z.B. bei öffentlichen Seiten).' +'Panel': 'Panel' +'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Öffne das Menü, wenn die Maus über das Menü-Symbol bewegt wird (auf Touchscreens automatisch deaktiviert)' +'Display the big menu': 'Großes Menü anzeigen' +'Display the logo': 'Logo anzeigen' +'Icons and texts': 'Symbole und Texte' +'Loader enabled': 'Fortschrittsbalken anzeigen' +'Tips': 'Tipps' +'Always displayed': 'Immer anzeigen' +'This is the automatic behavior when the menu is always displayed.': 'Dies ist das automatische Verhalten, wenn das Menü immer angezeigt wird.' +'Not compatible with touch screens.': 'Nicht kompatibel mit Touchscreens.' +'Big menu': 'Großes Menü' +'Live preview': 'Live-Vorschau' +'Open apps in new tab': 'Öffne Apps in einem neuen Tab' +'Use the global setting': 'Verwende die globale Einstellung' +'Use my selection': 'Verwende meine Auswahl' +'Show and hide the list of applications': 'Ein- und Ausblenden der Appliste' +'Use the avatar instead of the logo': 'Avatar anstelle des Logos anzeigen' +'You do not have permission to change the settings.': 'Du hast keine Berechtigung, die Einstellungen dieser App zu ändern.' +'Force this configuration to users': 'Konfiguration für alle Benutzer erzwingen' +'Export the configuration': 'Konfiguration exportieren' +'Purge the cache': 'Cache leeren' +'Show the link to settings': 'Link zu den Einstellungen anzeigen' +'The menu is enabled by default for users': 'Das Menü ist standardmäßig für alle Benutzer aktiviert' +'Except when the configuration is forced.': 'Gilt nicht, wenn die Konfiguration erzwungen wird.' +'Apps that should not be displayed in the menu': 'Apps, die nicht im Menü angezeigt werden sollen' +'This feature is only compatible with the big menu display.': 'Kompatibel mit dem großen Menü.' +'The logo is a link to the default app': 'Das Logo ist ein Link zur Standard-App' +'Others': 'Andere' +'Categories': 'Kategorien' +'Customize sorting': 'Sortierung anpassen' +'Order by': 'Sortieren nach' +'Name': 'Name' +'Customed': 'Benutzerdefiniert' +'Show and hide the list of categories': 'Liste der Kategorien ein- und ausblenden' +'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Diese Optionen werden auf Dark Theme oder Breeze Dark Theme angewendet.' +'Dark mode colors': 'Farben für den dunklen Modus' +'With categories': 'Mit Kategorien' +'Custom categories': 'Benutzerdefinierte Kategorien' +'Customize application categories': 'App-Kategorien anpassen' +'Reset to default': 'Auf Standard zurücksetzen' +'Hidden icon': 'Verstecktes Symbol' +'Small icon': 'Kleines Symbol' +'Normal icon': 'Normales Symbol' +'Big icon': 'Großes Icon' +'Hidden text': 'Versteckter Text' +'Small text': 'Kleiner Text' +'Normal text': 'Normaler Text' +'Big text': 'Großer Text' +'Applications': 'Apps' +'Applications kept in the top menu': 'Apps in der oberen Navigationsleiste' +'Applications kept in the top menu but also shown in side menu': 'Apps in der oberen Navigationsleiste, die auch im Seitenmenü angezeigt werden sollen' +'These applications must be selected in the previous option.': 'Diese Apps müssen auch in der vorherigen Einstellung ausgewählt werden.' +'Hide labels on mouse over': 'Labels ausblenden, wenn sich die Maus darüber befindet (Hover)' +'Except the hovered app': 'Außer die markierte App' +'Search': 'Suche' +'Toggle the menu': 'Menü ein- und ausblenden' +'Open the documentation': 'Open the documentation' +'Ask the developer': 'Ask the developer' +'New request': 'New request' +'Report a bug': 'Report a bug' +'Show the configuration': 'Show the configuration' +'Configuration:': 'Configuration:' +'Done!': 'Done!' +'Copy': 'Copy' +'Need help': 'Need help' +'I would like a new feature': 'I would like a new feature' +'Something went wrong': 'Something went wrong' +'Select apps': 'Select apps' +'Sort': 'Sort' +'Customize': 'Customize' +'Custom': 'Custom' +'Close': 'Close' diff --git a/src/l10n/fixtures/es.yaml b/src/l10n/fixtures/es.yaml index 3df3d8c..e1af7a6 100644 --- a/src/l10n/fixtures/es.yaml +++ b/src/l10n/fixtures/es.yaml @@ -1,95 +1,111 @@ -"Custom menu": "Menú personalizado" -"Enable the custom menu": "Habilitar el menú personalizado" -"No": "No" -"Yes": "Sí" -"Menu": "Menú" -? 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.' -: 'Usa la combinación de teclas Ctrl+o para activar y desactivar el menú lateral. Use tab para navegar.' -"Top menu": "Menu principal" -"Apps that not must be moved in the side menu": "Aplicaciones que no se deben mover al menú lateral" -"If there is no selection then the global configuration is applied.": "Si no hay selección, se aplica la configuración global." -"Experimental": "En pruebas" -"Save": "Guardar" -"You like this app and you want to support me?": "¿Te gusta esta aplicación y quieres apoyarme?" -"Buy me a coffee ☕": "Cómprame un café ☕" -"Hidden": "Oculto" -"Small": "Pequeño" -"Normal": "Normal" -"Big": "Grande" -"Hidden icon": "Ocultar Icono" -"Small icon": "Icono pequeño" -"Normal icon": "Icono normal" -"Big icon": "Icono grande" -"Hidden text": "Texto oculto" -"Small text": "Texto pequeño" -"Normal text": "Texto normal" -"Big text": "Texto grande" -"Colors": "Colores" -"Background color": "Color de fondo" -"Background color of current app": "Color de fondo de la aplicación actual" -"Text color": "Color del texto" -"Loader": "Cargador" -"Icon": "Icono" -"Same color": "El mismo color" -"Opposite color": "Color opuesto" -"Transparent": "Transparente" -"Opaque": "Opaco" -"Opener": "Abrir" -"Default": "Por defecto" -"Default (dark)": "Por defecto (oscuro)" -"Hamburger": "Hamburguesa" -"Hamburger (dark)": "Hamburger (negro)" -"Hamburger 2": "Hamburguesa 2" -"Hamburger 2 (dark)": "Hamburger 2 (negro)" -"Before the logo": "Antes del logotipo" -"After the logo": "Después del logotipo" -"Position": "Posición" -"Show only the opener (hidden logo)": "Mostrar solo abrir (ocultar logotipo)" -"Do not display the side menu and the opener if there is no application (eg: public pages).": "No mostrar el menú lateral y el abridor si no hay aplicación (por ejemplo: páginas públicas)." -"Panel": "Panel" -"Open the menu when the mouse is hover the opener (automatically disabled on touch screens)": "Abra el menú cuando el ratón esté sobre el icono (se desactiva automáticamente en las pantallas táctiles)" -"Display the big menu": "Mostrar el menú grande" -"Display the logo": "Mostrar el logotipo" -"Icons and texts": "Iconos y textos" -"Loader enabled": "Cargador activado" -"Tips": "Consejos" -"Always displayed": "Siempre se muestra" -"This is the automatic behavior when the menu is always displayed.": "Este es el comportamiento automático cuando aún se muestra el menú." -"Not compatible with touch screens.": "No es compatible con las pantallas táctiles." -"Big menu": "Menú grande" -"Live preview": "Previsualización en directo" -"Open apps in new tab": "Abrir las aplicaciones en una nueva pestaña" -"Use the global setting": "Utilizar la configuración global" -"Use my selection": "Utilizar mi selección" -"Show and hide the list of applications": "Mostrar y ocultar la lista de aplicaciones" -"Use the avatar instead of the logo": "Utilizar un avatar en lugar de un logotipo" -"You do not have permission to change the settings.": "No tienes permiso para cambiar la configuración." -"Force this configuration to users": "Forzar esta configuración a todos los usuarios" -"Export the configuration": "Exportar la configuración" -"Purge the cache": "Vaciar la caché" -"Show the link to settings": "Mostrar un enlace a la configuración" -"The menu is enabled by default for users": "El menú está activado por defecto para los usuarios" -"Except when the configuration is forced.": "Excepto cuando la configuración es forzada." -"Apps that should not be displayed in the menu": "Aplicaciones que no deben aparecer en el menú" -"This feature is only compatible with the big menu display.": "Esta función sólo es compatible con la pantalla del menú grande." -"The logo is a link to the default app": "El logotipo es un enlace a la aplicación por defecto" -"Others": "Otros" -"Categories": "Categorías" -"Customize sorting": "Personalizar la clasificación" -"Order by": "Ordenar por" -"Name": "Nombre" -"Customed": "Personalizado" -"Show and hide the list of categories": "Mostrar y ocultar la lista de categorías" -"This parameters are used when Dark theme or Breeze Dark Theme are enabled.": "Estos parámetros se utilizan cuando el tema oscuro o el tema oscuro de Breeze están activados." -"Dark mode colors": "Colores del modo oscuro" -"With categories": "Con categorías" -"Custom categories": "Categorías personalizadas" -"Customize application categories": "Personalizar las categorías de las aplicaciones" -"Reset to default": "Restablecer los valores por defecto" -"Applications": "Aplicaciones" -"Applications kept in the top menu": "Aplicaciones guardadas en el menú superior" -"Applications kept in the top menu but also shown in side menu": "Las aplicaciones se mantienen en el menú superior pero también se muestran en el menú lateral" -"These applications must be selected in the previous option.": "Estas aplicaciones deben ser seleccionadas en las opciones anteriores." -"Hide labels on mouse over": "Ocultar las etiquetas al pasar el ratón" -"Except the hovered app": "Except the hovered app" -"Search": "Search" +'Custom menu': 'Menú personalizado' +'Enable the custom menu': 'Activar el menú personalizado' +'No': 'No' +'Yes': 'Sí' +'Menu': 'Menú' +'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Usa la combinación de teclas Ctrl+o para activar y desactivar el menú lateral. Use tab key para navegar.' +'Top menu': 'Menu principal' +'Apps that not must be moved in the side menu': 'Aplicaciones que no se deben mover al menú lateral' +'If there is no selection then the global configuration is applied.': 'Si no hay selección, se aplica la configuración global.' +'Experimental': 'En pruebas' +'Save': 'Guardar' +'You like this app and you want to support me?': '¿Te gusta esta aplicación y quieres apoyarme?' +'Buy me a coffee ☕': 'Cómprame un café ☕' +'Hidden': 'Oculto' +'Small': 'Pequeño' +'Normal': 'Normal' +'Big': 'Grande' +'Hidden icon': 'Ocultar Icono' +'Small icon': 'Icono pequeño' +'Normal icon': 'Icono normal' +'Big icon': 'Icono grande' +'Hidden text': 'Texto oculto' +'Small text': 'Texto pequeño' +'Normal text': 'Texto normal' +'Big text': 'Texto grande' +'Colors': 'Colores' +'Background color': 'Color de fondo' +'Background color of current app': 'Color de fondo de la aplicación actual' +'Text color': 'Color del texto' +'Loader': 'Cargador' +'Icon': 'Icono' +'Same color': 'El mismo color' +'Opposite color': 'Color opuesto' +'Transparent': 'Transparente' +'Opaque': 'Opaco' +'Opener': 'Abrir' +'Default': 'Por defecto' +'Default (dark)': 'Por defecto (oscuro)' +'Hamburger': 'Hamburguesa' +'Hamburger (dark)': 'Hamburger (negro)' +'Hamburger 2': 'Hamburguesa 2' +'Hamburger 2 (dark)': 'Hamburger 2 (negro)' +'Before the logo': 'Antes del logotipo' +'After the logo': 'Después del logotipo' +'Position': 'Posición' +'Show only the opener (hidden logo)': 'Mostrar solo abrir (ocultar logotipo)' +'Do not display the side menu and the opener if there is no application (eg: public pages).': 'No mostrar el menú lateral y el abridor si no hay aplicación (por ejemplo: páginas públicas).' +'Panel': 'Panel' +'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Abra el menú cuando el ratón esté sobre el icono (se desactiva automáticamente en las pantallas táctiles)' +'Display the big menu': 'Mostrar el menú grande' +'Display the logo': 'Mostrar el logotipo' +'Icons and texts': 'Iconos y textos' +'Loader enabled': 'Cargador activado' +'Tips': 'Consejos' +'Always displayed': 'Siempre se muestra' +'This is the automatic behavior when the menu is always displayed.': 'Este es el comportamiento automático cuando aún se muestra el menú.' +'Not compatible with touch screens.': 'No es compatible con las pantallas táctiles.' +'Big menu': 'Menú grande' +'Live preview': 'Previsualización en directo' +'Open apps in new tab': 'Abrir las aplicaciones en una nueva pestaña' +'Use the global setting': 'Utilizar la configuración global' +'Use my selection': 'Utilizar mi selección' +'Show and hide the list of applications': 'Mostrar y ocultar la lista de aplicaciones' +'Use the avatar instead of the logo': 'Utilizar un avatar en lugar de un logotipo' +'You do not have permission to change the settings.': 'No tienes permiso para cambiar la configuración.' +'Force this configuration to users': 'Forzar esta configuración a todos los usuarios' +'Export the configuration': 'Exportar la configuración' +'Purge the cache': 'Vaciar la caché' +'Show the link to settings': 'Mostrar un enlace a la configuración' +'The menu is enabled by default for users': 'El menú está activado por defecto para los usuarios' +'Except when the configuration is forced.': 'Excepto cuando la configuración es forzada.' +'Apps that should not be displayed in the menu': 'Aplicaciones que no deben aparecer en el menú' +'This feature is only compatible with the big menu display.': 'Esta función sólo es compatible con la pantalla del menú grande.' +'The logo is a link to the default app': 'El logotipo es un enlace a la aplicación por defecto' +'Others': 'Otros' +'Categories': 'Categorías' +'Customize sorting': 'Personalizar la clasificación' +'Order by': 'Ordenar por' +'Name': 'Nombre' +'Customed': 'Personalizado' +'Show and hide the list of categories': 'Mostrar y ocultar la lista de categorías' +'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Estos parámetros se utilizan cuando el tema oscuro o el tema oscuro de Breeze están activados.' +'Dark mode colors': 'Colores del modo oscuro' +'With categories': 'Con categorías' +'Custom categories': 'Categorías personalizadas' +'Customize application categories': 'Personalizar las categorías de las aplicaciones' +'Reset to default': 'Restablecer los valores por defecto' +'Applications': 'Aplicaciones' +'Applications kept in the top menu': 'Aplicaciones guardadas en el menú superior' +'Applications kept in the top menu but also shown in side menu': 'Las aplicaciones se mantienen en el menú superior pero también se muestran en el menú lateral' +'These applications must be selected in the previous option.': 'Estas aplicaciones deben ser seleccionadas en las opciones anteriores.' +'Hide labels on mouse over': 'Ocultar las etiquetas al pasar el ratón' +'Except the hovered app': 'Excepto la aplicación sobre la que se pasa el cursor' +'Search': 'Buscar' +'Toggle the menu': 'Alternar el menú' +'Open the documentation': 'Open the documentation' +'Ask the developer': 'Pregúntale al desarrollador' +'New request': 'Nueva solicitud' +'Report a bug': 'Informar de un fallo' +'Show the configuration': 'Mostrar los ajustes' +'Configuration:': 'Configuration:' +'Done!': '¡Realizado!' +'Copy': 'Copiar' +'Need help': 'Ayudame' +'I would like a new feature': 'Me gustaría una nueva función' +'Something went wrong': 'Algo salió mal' +'Select apps': 'Selecciona las aplicaciones' +'Sort': 'Ordenar' +'Customize': 'Personalizar' +'Custom': 'Custom' +'Close': 'Cerrar' diff --git a/src/l10n/fixtures/fr.yaml b/src/l10n/fixtures/fr.yaml index 0cf835b..295680a 100644 --- a/src/l10n/fixtures/fr.yaml +++ b/src/l10n/fixtures/fr.yaml @@ -1,95 +1,130 @@ -"Custom menu": "Menu personnalisé" -"Enable the custom menu": "Activer le menu personnalisé" -"No": "Non" -"Yes": "Oui" -"Menu": "Menu" -? 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.' -: 'Utiliser le raccourcis clavier Ctrl+o pour ouvrir et fermer le menu latéral. Utiliser tab pour naviguer.' -"Top menu": "Menu supérieur" -"Apps that not must be moved in the side menu": "Les applications qui ne doivent pas être affichées dans le menu latéral" -"If there is no selection then the global configuration is applied.": "Si il n'y a aucune sélection alors la configuration globale sera appliquée." -"Experimental": "Expérimental" -"Save": "Sauvegarder" -"You like this app and you want to support me?": "Vous aimer cette application et vous souhaitez m'aider ?" -"Buy me a coffee ☕": "Offrez moi un café ☕" -"Hidden": "Caché" -"Small": "Petit" -"Normal": "Normal" -"Big": "Gros" -"Hidden icon": "Icône masqué" -"Small icon": "Petit icône" -"Normal icon": "Icône normal" -"Big icon": "Gros icône" -"Hidden text": "Text masqué" -"Small text": "Texte petit" -"Normal text": "Texte normal" -"Big text": "Gros texte" -"Colors": "Couleurs" -"Background color": "Couleur de fond" -"Background color of current app": "Couleur de fond de l'application en cours" -"Text color": "Couleur du texte" -"Loader": "Indicateur de chargement" -"Icon": "Icône" -"Same color": "Même couleur" -"Opposite color": "Couleur opposée" -"Transparent": "Transparent" -"Opaque": "Opaque" -"Opener": "Bouton d'ouverture" -"Default": "Par défaut" -"Default (dark)": "Par défaut (sombre)" -"Hamburger": "Hamburger" -"Hamburger (dark)": "Hamburger (sombre)" -"Hamburger 2": "Hamburger 2" -"Hamburger 2 (dark)": "Hamburger 2 (sombre)" -"Before the logo": "Avant le logo" -"After the logo": "Après le logo" -"Position": "Position" -"Show only the opener (hidden logo)": "Afficher uniquement le bouton d'ouverture (masquer le logo)" -"Do not display the side menu and the opener if there is no application (eg: public pages).": "Ne pas afficher le menu latéral et le bouton d'ouverture s'il n'y a aucune application (exemple : page publiques)." -"Panel": "Panneau" -"Open the menu when the mouse is hover the opener (automatically disabled on touch screens)": "Ouvrir le menu au passage de la souris (automatiquement désactivé sur les écrans tactiles)" -"Display the big menu": "Afficher le menu large" -"Display the logo": "Afficher le logo" -"Icons and texts": "Icônes et textes" -"Loader enabled": "Activation de l'indicateur de chargement" -"Tips": "Astuces" -"Always displayed": "Toujours affiché" -"This is the automatic behavior when the menu is always displayed.": "C'est le comportement automatique lorsque le menu est toujours affiché." -"Not compatible with touch screens.": "Incompatible avec les écrans tactiles." -"Big menu": "Menu large" -"Live preview": "Aperçu en direct" -"Open apps in new tab": "Ouvrir les applications dans un nouvel onglet" -"Use the global setting": "Utiliser la configuration globale" -"Use my selection": "Utiliser ma sélection" -"Show and hide the list of applications": "Afficher et masquer la liste des applications" -"Use the avatar instead of the logo": "Utiliser l'avatar à la place du logo" -"You do not have permission to change the settings.": "Vous n'avez pas la permission de changer les paramètres." -"Force this configuration to users": "Forcer cette configuration aux utilisateurs" -"Export the configuration": "Exporter la configuration" -"Purge the cache": "Purger le cache" -"Show the link to settings": "Afficher le lien vers les paramètres" -"The menu is enabled by default for users": "Le menu est activé par défaut pour les utilisateurs" -"Except when the configuration is forced.": "Sauf lorsque la configuration est forcée." -"Apps that should not be displayed in the menu": "Applications qui ne doivent pas être affichées dans le menu" -"This feature is only compatible with the big menu display.": "Compatible avec l'affichage Menu large." -"The logo is a link to the default app": "Le logo est un lien vers l'application par défaut" -"Others": "Autres" -"Categories": "Catégories" -"Customize sorting": "Personnaliser le tri" -"Order by": "Trier par" -"Name": "Nom" -"Customed": "Personnalisé" -"Show and hide the list of categories": "Afficher et masquer la liste des catégories" -"This parameters are used when Dark theme or Breeze Dark Theme are enabled.": "Ces paramètres sont utilisés lorsque le thème sombre ou le thème Breeze Dark sont activés." -"Dark mode colors": "Couleurs du mode sombre" -"With categories": "Avec les catégories" -"Custom categories": "Catégories personnalisées" -"Customize application categories": "Personnaliser les catégories des applications" -"Reset to default": "Restaurer les valeurs par défaut" -"Applications": "Applications" -"Applications kept in the top menu": "Applications conservées dans le menu supérieur" -"Applications kept in the top menu but also shown in side menu": "Applications conservées dans le menu supérieur mais également affichées dans le menu latéral" -"These applications must be selected in the previous option.": "Ces applications doivent également être sélectionnées dans l'option précédente." -"Hide labels on mouse over": "Masquer le libellé des applications au passage de la souris" -"Except the hovered app": "À l'exception de l'application survolée" -"Search": "Rechercher" +'Custom menu': 'Menu personnalisé' +'Enable the custom menu': 'Activer le menu personnalisé' +'No': 'Non' +'Yes': 'Oui' +'Menu': 'Menu' +'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Utiliser + le raccourcis clavier Ctrl+o pour ouvrir et fermer le menu latéral. Utiliser tab + key pour naviguer.' +'Top menu': 'Menu supérieur' +'Apps that not must be moved in the side menu': 'Les applications qui ne doivent pas + être affichées dans le menu latéral' +'If there is no selection then the global configuration is applied.': "Si il n'y a + aucune sélection alors la configuration globale sera appliquée." +'Experimental': 'Expérimental' +'Save': 'Sauvegarder' +'You like this app and you want to support me?': "Vous aimer cette application et + vous souhaitez m'aider ?" +'Buy me a coffee ☕': 'Offrez moi un café ☕' +'Hidden': 'Caché' +'Small': 'Petit' +'Normal': 'Normal' +'Big': 'Gros' +'Hidden icon': 'Icône masqué' +'Small icon': 'Petit icône' +'Normal icon': 'Icône normal' +'Big icon': 'Gros icône' +'Hidden text': 'Text masqué' +'Small text': 'Texte petit' +'Normal text': 'Texte normal' +'Big text': 'Gros texte' +'Colors': 'Couleurs' +'Background color': 'Couleur de fond' +'Background color of current app': "Couleur de fond de l'application en cours" +'Text color': 'Couleur du texte' +'Loader': 'Indicateur de chargement' +'Icon': 'Icône' +'Same color': 'Même couleur' +'Opposite color': 'Couleur opposée' +'Transparent': 'Transparent' +'Opaque': 'Opaque' +'Opener': "Bouton d'ouverture" +'Default': 'Par défaut' +'Default (dark)': 'Par défaut (sombre)' +'Hamburger': 'Hamburger' +'Hamburger (dark)': 'Hamburger (sombre)' +'Hamburger 2': 'Hamburger 2' +'Hamburger 2 (dark)': 'Hamburger 2 (sombre)' +'Before the logo': 'Avant le logo' +'After the logo': 'Après le logo' +'Position': 'Position' +'Show only the opener (hidden logo)': "Afficher uniquement le bouton d'ouverture (masquer + le logo)" +'Do not display the side menu and the opener if there is no application (eg: public pages).': "Ne + pas afficher le menu latéral et le bouton d'ouverture s'il n'y a aucune application + (exemple : page publiques)." +'Panel': 'Panneau' +'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Ouvrir + le menu au passage de la souris (automatiquement désactivé sur les écrans tactiles)' +'Display the big menu': 'Afficher le menu large' +'Display the logo': 'Afficher le logo' +'Icons and texts': 'Icônes et textes' +'Loader enabled': "Activation de l'indicateur de chargement" +'Tips': 'Astuces' +'Always displayed': 'Toujours affiché' +'This is the automatic behavior when the menu is always displayed.': "C'est le comportement + automatique lorsque le menu est toujours affiché." +'Not compatible with touch screens.': 'Incompatible avec les écrans tactiles.' +'Big menu': 'Menu large' +'Live preview': 'Aperçu en direct' +'Open apps in new tab': 'Ouvrir les applications dans un nouvel onglet' +'Use the global setting': 'Utiliser la configuration globale' +'Use my selection': 'Utiliser ma sélection' +'Show and hide the list of applications': 'Afficher et masquer la liste des applications' +'Use the avatar instead of the logo': "Utiliser l'avatar à la place du logo" +'You do not have permission to change the settings.': "Vous n'avez pas la permission + de changer les paramètres." +'Force this configuration to users': 'Forcer cette configuration aux utilisateurs' +'Export the configuration': 'Exporter la configuration' +'Purge the cache': 'Purger le cache' +'Show the link to settings': 'Afficher le lien vers les paramètres' +'The menu is enabled by default for users': 'Le menu est activé par défaut pour les + utilisateurs' +'Except when the configuration is forced.': 'Sauf lorsque la configuration est forcée.' +'Apps that should not be displayed in the menu': 'Applications qui ne doivent pas + être affichées dans le menu' +'This feature is only compatible with the big menu display.': "Compatible + avec l'affichage Menu large." +'The logo is a link to the default app': "Le logo est un lien vers l'application par + défaut" +'Others': 'Autres' +'Categories': 'Catégories' +'Customize sorting': 'Personnaliser le tri' +'Order by': 'Trier par' +'Name': 'Nom' +'Customed': 'Personnalisé' +'Show and hide the list of categories': 'Afficher et masquer la liste des catégories' +'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Ces + paramètres sont utilisés lorsque le thème sombre ou le thème Breeze Dark sont activés.' +'Dark mode colors': 'Couleurs du mode sombre' +'With categories': 'Avec les catégories' +'Custom categories': 'Catégories personnalisées' +'Customize application categories': 'Personnaliser les catégories des applications' +'Reset to default': 'Restaurer les valeurs par défaut' +'Applications': 'Applications' +'Applications kept in the top menu': 'Applications conservées dans le menu supérieur' +'Applications kept in the top menu but also shown in side menu': 'Applications conservées + dans le menu supérieur mais également affichées dans le menu latéral' +'These applications must be selected in the previous option.': "Ces applications doivent + également être sélectionnées dans l'option précédente." +'Hide labels on mouse over': 'Masquer le libellé des applications au passage de la + souris' +'Except the hovered app': "À l'exception de l'application survolée" +'Search': 'Rechercher' +'Toggle the menu': 'Basculer le menu' +'Open the documentation': 'Afficher la documentation' +'Ask the developer': 'Demander au(x) développeurs⋅euses' +'New request': 'Nouvelle requête' +'Report a bug': 'Rapporter un bug' +'Show the configuration': 'Afficher la configuration' +'Configuration:': 'Configuration :' +'Done!': 'Fait !' +'Copy': 'Copié' +'Need help': "Besoin d'aide" +'I would like a new feature': 'Je souhaiterais une fonctionnalité' +'Something went wrong': "Quelque chose s'est mal passé" +'Select apps': 'Selection des apps' +'Sort': 'Ordonner' +'Customize': 'Personnaliser' +'Custom': 'Personnalisé' +'Close': 'Fermer' diff --git a/src/l10n/fixtures/gl.yaml b/src/l10n/fixtures/gl.yaml new file mode 100644 index 0000000..59176d5 --- /dev/null +++ b/src/l10n/fixtures/gl.yaml @@ -0,0 +1,111 @@ +'Custom menu': 'Menú personalizado' +'Enable the custom menu': 'Activar o menú personalizado' +'No': 'Non' +'Yes': 'Si' +'Menu': 'Menú' +'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Use o atallo Ctrl+o para abrir e agochar o menú lateral. Use a tecla Tab para navegar.' +'Top menu': 'Top menu' +'Apps that not must be moved in the side menu': 'As aplicacións que non deben moverse no menú lateral' +'If there is no selection then the global configuration is applied.': 'Se non hai selección, aplícase a configuración global.' +'Experimental': 'Experimental' +'Save': 'Gardar' +'You like this app and you want to support me?': 'Gústalle esta aplicación e quere axudarme?' +'Buy me a coffee ☕': 'Convídeme a un café ☕' +'Hidden': 'Agochado' +'Small': 'Pequeno' +'Normal': 'Normal' +'Big': 'Grande' +'Hidden icon': 'Icona agochada' +'Small icon': 'Icona pequena' +'Normal icon': 'Icona normal' +'Big icon': 'Icona grande' +'Hidden text': 'Texto agochado' +'Small text': 'Texto pequeno' +'Normal text': 'Texto normal' +'Big text': 'Texto grande' +'Colors': 'Cores' +'Background color': 'Cor do fondo' +'Background color of current app': 'Cor do fondo da aplicación actual' +'Text color': 'Cor do texto' +'Loader': 'Cargador' +'Icon': 'Icona' +'Same color': 'A mesma cor' +'Opposite color': 'A cor oposta' +'Transparent': 'Transparente' +'Opaque': 'Opaco' +'Opener': 'Abrir' +'Default': 'Predeterminado' +'Default (dark)': 'Predeterminado (escuro)' +'Hamburger': 'Hamburguesa' +'Hamburger (dark)': 'Hamburguesa (escuro)' +'Hamburger 2': 'Hamburguesa 2' +'Hamburger 2 (dark)': 'Hamburguesa 2 (escuro)' +'Before the logo': 'Antes do logotipo' +'After the logo': 'Após o logotipo' +'Position': 'Posición' +'Show only the opener (hidden logo)': 'Amosar só a icona de abrir (agochar o logotipo)' +'Do not display the side menu and the opener if there is no application (eg: public pages).': 'Non amosar o menú lateral e a icona de abrir se non hai ningunha aplicación (por exemplo: páxinas públicas).' +'Panel': 'Panel' +'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Abre o menú cando o rato está sobre a icona de abrir (desactivado automaticamente nas pantallas táctiles)' +'Display the big menu': 'Amosar o menú en grande' +'Display the logo': 'Amosar o logotipo' +'Icons and texts': 'Iconas e textos' +'Loader enabled': 'Cargador activado' +'Tips': 'Consellos' +'Always displayed': 'Amosado sempre' +'This is the automatic behavior when the menu is always displayed.': 'Este é o comportamento automático cando se amosa sempre o menú.' +'Not compatible with touch screens.': 'Non é compatíbel coas pantallas táctiles.' +'Big menu': 'Menú grande' +'Live preview': 'Vista previa en directo' +'Open apps in new tab': 'Abrir as aplicacións nunha nova lapela' +'Use the global setting': 'Usar o axuste global' +'Use my selection': 'Usar a miña selección' +'Show and hide the list of applications': 'Amosar e agochar a lista de aplicacións' +'Use the avatar instead of the logo': 'Usar o avatar no canto do logotipo' +'You do not have permission to change the settings.': 'Non ten permiso para cambiar os axustes.' +'Force this configuration to users': 'Forzar esta configuración para os usuarios' +'Export the configuration': 'Exportar a configuración' +'Purge the cache': 'Limpar a caché' +'Show the link to settings': 'Amosar a ligazón aos axustes' +'The menu is enabled by default for users': 'De xeito predeterminado o menú está activado para os usuarios' +'Except when the configuration is forced.': 'Agás cando a configuración é forzada.' +'Apps that should not be displayed in the menu': 'Aplicacións que non deben amosarse no menú' +'This feature is only compatible with the big menu display.': 'Esta función só é compatíbel coa presentación do menú grande.' +'The logo is a link to the default app': 'O logotipo é unha ligazón á aplicación predeterminada' +'Others': 'Outros' +'Categories': 'Categorías' +'Customize sorting': 'Personalizar a ordenación' +'Order by': 'Ordenar por' +'Name': 'Nome' +'Customed': 'Personalizado' +'Show and hide the list of categories': 'Amosar e agochar a lista de categorías' +'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Estes parámetros úsanse cando o tema escuro ou o tema escuro de Breeze están activados.' +'Dark mode colors': 'Cores do modo escuro' +'With categories': 'Con categorías' +'Custom categories': 'Categorías personalizadas' +'Customize application categories': 'Personalizar as categorías das aplicacións' +'Reset to default': 'Restabelecer os valores predeterminados' +'Applications': 'Aplicacións' +'Applications kept in the top menu': 'As aplicacións mantéñense no menú superior' +'Applications kept in the top menu but also shown in side menu': 'As aplicacións mantéñense no menú superior mais tamén aparecen no menú lateral' +'These applications must be selected in the previous option.': 'Estas aplicacións deben ser seleccionadas na opción anterior.' +'Hide labels on mouse over': 'Agochar as etiquetas ao pasar o rato' +'Except the hovered app': 'Agás a aplicación que pasa o rato' +'Search': 'Buscar' +'Toggle the menu': 'Alternar o menú' +'Open the documentation': 'Open the documentation' +'Ask the developer': 'Preguntar ao desenvolvedor' +'New request': 'Nova solicitude' +'Report a bug': 'Informar dun fallo' +'Show the configuration': 'Amosar a configuración' +'Configuration:': 'Configuración:' +'Done!': 'Feito!' +'Copy': 'Copiar' +'Need help': 'Necesito axuda' +'I would like a new feature': 'Gustaríame unha nova característica' +'Something went wrong': 'Algo foi mal' +'Select apps': 'Seleccionar as aplicacións' +'Sort': 'Ordenar' +'Customize': 'Personalizar' +'Custom': 'Personalizado' +'Close': 'Pechar' diff --git a/src/l10n/fixtures/nl.yaml b/src/l10n/fixtures/nl.yaml index f39d188..f1b3e55 100644 --- a/src/l10n/fixtures/nl.yaml +++ b/src/l10n/fixtures/nl.yaml @@ -1,95 +1,111 @@ -"Custom menu": "Aangepast menu" -"Enable the custom menu": "Het aangepaste menu inschakelen" -"No": "Nee" -"Yes": "Ja" -"Menu": "Menu" -? 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.' -: 'Gebruik de snelkoppeling Ctrl+o om het zijmenu te openen en te verbergen. Gebruik tab om te navigeren.' -"Top menu": "Bovenste menu" -"Apps that not must be moved in the side menu": "Apps die niet moeten worden verplaatst in het zijmenu" -"If there is no selection then the global configuration is applied.": "Als er geen keuze is, wordt de globale configuratie toegepast." -"Experimental": "Experimenteel" -"Save": "Opslaan" -"You like this app and you want to support me?": "Vind je deze app leuk en wil je me steunen?" -"Buy me a coffee ☕": "Koop een koffie voor me ☕" -"Hidden": "Verborgen" -"Small": "Klein" -"Normal": "Normaal" -"Big": "Groot" -"Hidden icon": "Verborgen icoon" -"Small icon": "Klein icoon" -"Normal icon": "Normaal icoon" -"Big icon": "Groot icoon" -"Hidden text": "Verborgen tekst" -"Small text": "Kleine tekst" -"Normal text": "Normale tekst" -"Big text": "Grote tekst" -"Colors": "Kleuren" -"Background color": "Achtergrond kleur" -"Background color of current app": "Achtergrondkleur van huidige app" -"Text color": "Tekst kleur" -"Loader": "Lader" -"Icon": "Icoon" -"Same color": "Zelfde kleur" -"Opposite color": "Tegenovergestelde kleur" -"Transparent": "Transparant" -"Opaque": "Ondoorzichtig" -"Opener": "Opener" -"Default": "Standaard" -"Default (dark)": "Standaard (donker)" -"Hamburger": "Hamburger" -"Hamburger (dark)": "Hamburger (donker)" -"Hamburger 2": "Hamburger 2" -"Hamburger 2 (dark)": "Hamburger 2 (donker)" -"Before the logo": "Voor het logo" -"After the logo": "Na het logo" -"Position": "Positie" -"Show only the opener (hidden logo)": "Toon alleen de opener (verborgen logo)" -"Do not display the side menu and the opener if there is no application (eg: public pages).": "Geef het zijmenu en de opener niet weer als er geen toepassing is (bijv. openbare pagina's)." -"Panel": "Paneel" -"Open the menu when the mouse is hover the opener (automatically disabled on touch screens)": "Open het menu wanneer de muis over de opener gaat (automatisch uitgeschakeld op aanraakschermen)" -"Display the big menu": "Toon het grote menu" -"Display the logo": "Toon het logo" -"Icons and texts": "Iconen en teksten" -"Loader enabled": "Lader ingeschakeld" -"Tips": "Tips" -"Always displayed": "Altijd weergegeven" -"This is the automatic behavior when the menu is always displayed.": "Dit is het automatische gedrag wanneer het menu altijd wordt weergegeven." -"Not compatible with touch screens.": "Niet compatibel met aanraakschermen." -"Big menu": "Groot menu" -"Live preview": "Live voorbeeld" -"Open apps in new tab": "Open apps in nieuwe tab" -"Use the global setting": "Gebruik de globale instellingen" -"Use my selection": "Gebruik mijn selectie" -"Show and hide the list of applications": "De lijst met toepassingen tonen en verbergen" -"Use the avatar instead of the logo": "Gebruik avatar in plaats van het logo" -"You do not have permission to change the settings.": "Je hebt geen toestemming om de instellingen te veranderen." -"Force this configuration to users": "Forceer deze configuratie aan gebruikers" -"Export the configuration": "Exporteer de configuratie" -"Purge the cache": "De cache wissen" -"Show the link to settings": "Toon de link naar de instellingen" -"The menu is enabled by default for users": "Het menu is standaard ingeschakeld voor gebruikers" -"Except when the configuration is forced.": "Behalve als de configuratie geforceerd is." -"Apps that should not be displayed in the menu": "Apps die niet in het menu weergegeven mogen worden" -"This feature is only compatible with the big menu display.": "Deze functie is alleen compatibel met het grote menu scherm." -"The logo is a link to the default app": "Het logo is een link naar de standaard app" -"Others": "Overige" -"Categories": "Categorieën" -"Customize sorting": "Sortering aanpassen" -"Order by": "Sorteer op" -"Name": "Naam" -"Customed": "Aangepast" -"Show and hide the list of categories": "De lijst met categorieën tonen en verbergen" -"This parameters are used when Dark theme or Breeze Dark Theme are enabled.": "Deze parameters worden gebruikt wanneer Dark theme of Breeze Dark Theme zijn ingeschakeld." -"Dark mode colors": "Donkere modus kleuren" -"With categories": "Met categorieën" -"Custom categories": "Aangepaste categorieën" -"Customize application categories": "Toepassingscategorieën aanpassen" -"Reset to default": "Terugzetten naar standaard" -"Applications": "Applicaties" -"Applications kept in the top menu": "Applicaties bewaard in het bovenste menu" -"Applications kept in the top menu but also shown in side menu": "Applicaties blijven in het topmenu maar worden ook in het zijmenu getoond" -"These applications must be selected in the previous option.": "Deze toepassingen moeten bij de vorige optie zijn geselecteerd." -"Hide labels on mouse over": "Hide labels on mouse over" -"Except the hovered app": "Except the hovered app" -"Search": "Search" +'Custom menu': 'Aangepast menu' +'Enable the custom menu': 'Het aangepaste menu inschakelen' +'No': 'Nee' +'Yes': 'Ja' +'Menu': 'Menu' +'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Gebruik de snelkoppeling Ctrl+o om het zijmenu te openen en te verbergen. Gebruik tab key om te navigeren.' +'Top menu': 'Bovenste menu' +'Apps that not must be moved in the side menu': 'Apps die niet moeten worden verplaatst in het zijmenu' +'If there is no selection then the global configuration is applied.': 'Als er geen keuze is, wordt de globale configuratie toegepast.' +'Experimental': 'Experimenteel' +'Save': 'Opslaan' +'You like this app and you want to support me?': 'Vind je deze app leuk en wil je me steunen?' +'Buy me a coffee ☕': 'Koop een koffie voor me ☕' +'Hidden': 'Verborgen' +'Small': 'Klein' +'Normal': 'Normaal' +'Big': 'Groot' +'Hidden icon': 'Verborgen icoon' +'Small icon': 'Klein icoon' +'Normal icon': 'Normaal icoon' +'Big icon': 'Groot icoon' +'Hidden text': 'Verborgen tekst' +'Small text': 'Kleine tekst' +'Normal text': 'Normale tekst' +'Big text': 'Grote tekst' +'Colors': 'Kleuren' +'Background color': 'Achtergrond kleur' +'Background color of current app': 'Achtergrondkleur van huidige app' +'Text color': 'Tekst kleur' +'Loader': 'Lader' +'Icon': 'Icoon' +'Same color': 'Zelfde kleur' +'Opposite color': 'Tegenovergestelde kleur' +'Transparent': 'Transparant' +'Opaque': 'Ondoorzichtig' +'Opener': 'Opener' +'Default': 'Standaard' +'Default (dark)': 'Standaard (donker)' +'Hamburger': 'Hamburger' +'Hamburger (dark)': 'Hamburger (donker)' +'Hamburger 2': 'Hamburger 2' +'Hamburger 2 (dark)': 'Hamburger 2 (donker)' +'Before the logo': 'Voor het logo' +'After the logo': 'Na het logo' +'Position': 'Positie' +'Show only the opener (hidden logo)': 'Toon alleen de opener (verborgen logo)' +'Do not display the side menu and the opener if there is no application (eg: public pages).': 'Geef het zijmenu en de opener niet weer als er geen toepassing is (bijv. openbare pagina''s).' +'Panel': 'Paneel' +'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Open het menu wanneer de muis over de opener gaat (automatisch uitgeschakeld op aanraakschermen)' +'Display the big menu': 'Toon het grote menu' +'Display the logo': 'Toon het logo' +'Icons and texts': 'Iconen en teksten' +'Loader enabled': 'Lader ingeschakeld' +'Tips': 'Tips' +'Always displayed': 'Altijd weergegeven' +'This is the automatic behavior when the menu is always displayed.': 'Dit is het automatische gedrag wanneer het menu altijd wordt weergegeven.' +'Not compatible with touch screens.': 'Niet compatibel met aanraakschermen.' +'Big menu': 'Groot menu' +'Live preview': 'Live voorbeeld' +'Open apps in new tab': 'Open apps in nieuwe tab' +'Use the global setting': 'Gebruik de globale instellingen' +'Use my selection': 'Gebruik mijn selectie' +'Show and hide the list of applications': 'De lijst met toepassingen tonen en verbergen' +'Use the avatar instead of the logo': 'Gebruik avatar in plaats van het logo' +'You do not have permission to change the settings.': 'Je hebt geen toestemming om de instellingen te veranderen.' +'Force this configuration to users': 'Forceer deze configuratie aan gebruikers' +'Export the configuration': 'Exporteer de configuratie' +'Purge the cache': 'De cache wissen' +'Show the link to settings': 'Toon de link naar de instellingen' +'The menu is enabled by default for users': 'Het menu is standaard ingeschakeld voor gebruikers' +'Except when the configuration is forced.': 'Behalve als de configuratie geforceerd is.' +'Apps that should not be displayed in the menu': 'Apps die niet in het menu weergegeven mogen worden' +'This feature is only compatible with the big menu display.': 'Deze functie is alleen compatibel met het grote menu scherm.' +'The logo is a link to the default app': 'Het logo is een link naar de standaard app' +'Others': 'Overige' +'Categories': 'Categorieën' +'Customize sorting': 'Sortering aanpassen' +'Order by': 'Sorteer op' +'Name': 'Naam' +'Customed': 'Aangepast' +'Show and hide the list of categories': 'De lijst met categorieën tonen en verbergen' +'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Deze parameters worden gebruikt wanneer Dark theme of Breeze Dark Theme zijn ingeschakeld.' +'Dark mode colors': 'Donkere modus kleuren' +'With categories': 'Met categorieën' +'Custom categories': 'Aangepaste categorieën' +'Customize application categories': 'Toepassingscategorieën aanpassen' +'Reset to default': 'Terugzetten naar standaard' +'Applications': 'Applicaties' +'Applications kept in the top menu': 'Applicaties bewaard in het bovenste menu' +'Applications kept in the top menu but also shown in side menu': 'Applicaties blijven in het topmenu maar worden ook in het zijmenu getoond' +'These applications must be selected in the previous option.': 'Deze toepassingen moeten bij de vorige optie zijn geselecteerd.' +'Hide labels on mouse over': 'Hide labels on mouse over' +'Except the hovered app': 'Except the hovered app' +'Search': 'Search' +'Toggle the menu': 'Toggle the menu' +'Open the documentation': 'Open the documentation' +'Ask the developer': 'Ask the developer' +'New request': 'New request' +'Report a bug': 'Report a bug' +'Show the configuration': 'Show the configuration' +'Configuration:': 'Configuration:' +'Done!': 'Done!' +'Copy': 'Copy' +'Need help': 'Need help' +'I would like a new feature': 'I would like a new feature' +'Something went wrong': 'Something went wrong' +'Select apps': 'Select apps' +'Sort': 'Sort' +'Customize': 'Customize' +'Custom': 'Custom' +'Close': 'Close' diff --git a/src/l10n/fixtures/pt_BR.yaml b/src/l10n/fixtures/pt_BR.yaml index 3089439..9e314a5 100644 --- a/src/l10n/fixtures/pt_BR.yaml +++ b/src/l10n/fixtures/pt_BR.yaml @@ -1,93 +1,109 @@ -"Custom menu": "Menu personalizado" -"Enable the custom menu": "Habilitar o menu personalizado" -"No": "Não" -"Yes": "Sim" -"Menu": "Menu" -? 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.' -: 'Use o atalho Ctrl+o para exibir e para esconder o menu lateral. Use tab para navegar.' -"Top menu": "Menu superior" -"Apps that not must be moved in the side menu": "Apps que não devem ser movidos para o menu lateral" -"If there is no selection then the global configuration is applied.": "Se não houver seleção, a configuração global será aplicada." -"Experimental": "Experimental" -"Save": "Salvar" -"You like this app and you want to support me?": "Você gosta deste aplicativo e quer me apoiar?" -"Buy me a coffee ☕": "Me pague um café ☕" -"Hidden": "Oculto" -"Small": "Pequeno" -"Normal": "Normal" -"Big": "Grande" -"Hidden icon": "Ícone oculto" -"Small icon": "Ícone pequeno" -"Normal icon": "Ícone normal" -"Big icon": "Ícone grance" -"Hidden text": "Texto oculto" -"Small text": "Texto pequeno" -"Normal text": "Texto normal" -"Big text": "Texto grande" -"Colors": "Cores" -"Background color": "Cor de fundo" -"Background color of current app": "Cor de fundo do app atual" -"Text color": "Cor do texto" -"Loader": "Progresso" -"Icon": "Ícone" -"Same color": "Mesma cor" -"Opposite color": "Cor oposta" -"Transparent": "Transparente" -"Opaque": "Opaco" -"Opener": "Abrir" -"Default": "Padrão" -"Default (dark)": "Padrão (escuro)" -"Hamburger": "Hamburger" -"Hamburger (dark)": "Hamburger (escuro)" -"Hamburger 2": "Hamburger 2" -"Hamburger 2 (dark)": "Hamburger 2 (escuro)" -"Before the logo": "Antes da logo" -"After the logo": "Depois da logo" -"Position": "Posição" -"Show only the opener (hidden logo)": "Mostrar apenas o Abrir (ocultar logo)" -"Do not display the side menu and the opener if there is no application (eg: public pages).": "Não mostrar o menu lateral e o Abrir se não houver aplicação (p.ex. páginas públicas)." -"Panel": "Painel" -"Open the menu when the mouse is hover the opener (automatically disabled on touch screens)": "Abrir o menu quando o mouse passar sobre o Abrir (desativado automaticamente em telas de toque)" -"Display the big menu": "Mostrar o menu grande" -"Display the logo": "Mostrar a logo" -"Icons and texts": "Ícones e textos" -"Loader enabled": "Progresso ativado" -"Tips": "Dicas" -"Always displayed": "Sempre visível" -"This is the automatic behavior when the menu is always displayed.": "Este é o comportamento automático quando o menu está sempre visível." -"Not compatible with touch screens.": "Não compatível com telas de toque." -"Big menu": "Menu grande" -"Live preview": "Visualização ao vivo" -"Open apps in new tab": "Abrir apps em nova aba" -"Use the global setting": "Usar configurações globais" -"Use my selection": "Usar minha seleção" -"Show and hide the list of applications": "Mostrar e ocultar a lista de aplicativos" -"Use the avatar instead of the logo": "Use o avatar ao invés da logo" -"You do not have permission to change the settings.": "Você não tem permissão para alterar as configurações." -"Force this configuration to users": "Forçar esta configuração para os usuários" -"Export the configuration": "Exportar a configuração" -"Purge the cache": "Limpar o cache" -"Show the link to settings": "Mostrar o link para configurações" -"The menu is enabled by default for users": "O menu é habilitado por padrão para os usuários" -"Except when the configuration is forced.": "Exceto quando a configuração é forçada." -"Apps that should not be displayed in the menu": "Apps que não devem ser mostrados no menu" -"This feature is only compatible with the big menu display.": "Este recurso só é compatível com a exibição do menu grande." -"The logo is a link to the default app": "A logo é um link para o app padrão" -"Others": "Outros" -"Categories": "Categorias" -"Customize sorting": "Personalizar classificação" -"Order by": "Ordenar por" -"Name": "Nome" -"Customed": "Personalizado" -"Show and hide the list of categories": "Mostrar e esconder a lista de categorias" -"This parameters are used when Dark theme or Breeze Dark Theme are enabled.": "Estes parâmetros são usados quando o tema escuro ou o tema Dark Breeze está ativo." -"Dark mode colors": "Cores do modo escuro" -"With categories": "Com categorias" -"Custom categories": "Categorias personalizadas" -"Customize application categories": "Personalizar categorias de apps" -"Reset to default": "Restaurar padrão" -"Applications": "Aplicativos" -"Applications kept in the top menu": "Aplicativos mantidos no menu superior" -"Applications kept in the top menu but also shown in side menu": "Aplicativos mantidos no menu superior, mas também mostrados no menu lateral" -"These applications must be selected in the previous option.": "Estes aplicativos devem ser selecionados na opção anterior." -"Hide labels on mouse over": "Ocultar descrição ao passar o mouse" +'Custom menu': 'Menú personalizado' +'Enable the custom menu': 'Activar o menu personalizado' +'No': 'Não' +'Yes': 'Sim' +'Menu': 'Menu' +'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Use o atalho Ctrl+o para exibir e para esconder o menu lateral. Use tab key para navegar.' +'Top menu': 'Menu superior' +'Apps that not must be moved in the side menu': 'Apps que não devem ser movidos para o menu lateral' +'If there is no selection then the global configuration is applied.': 'Se não houver seleção, a configuração global será aplicada.' +'Experimental': 'Experimental' +'Save': 'Salvar' +'You like this app and you want to support me?': 'Você gosta deste aplicativo e quer me apoiar?' +'Buy me a coffee ☕': 'Me pague um café ☕' +'Hidden': 'Oculto' +'Small': 'Pequeno' +'Normal': 'Normal' +'Big': 'Grande' +'Hidden icon': 'Ícone oculto' +'Small icon': 'Ícone pequeno' +'Normal icon': 'Ícone normal' +'Big icon': 'Ícone grance' +'Hidden text': 'Texto oculto' +'Small text': 'Texto pequeno' +'Normal text': 'Texto normal' +'Big text': 'Texto grande' +'Colors': 'Cores' +'Background color': 'Cor de fundo' +'Background color of current app': 'Cor de fundo do app atual' +'Text color': 'Cor do texto' +'Loader': 'Progresso' +'Icon': 'Ícone' +'Same color': 'Mesma cor' +'Opposite color': 'Cor oposta' +'Transparent': 'Transparente' +'Opaque': 'Opaco' +'Opener': 'Abrir' +'Default': 'Padrão' +'Default (dark)': 'Padrão (escuro)' +'Hamburger': 'Hamburger' +'Hamburger (dark)': 'Hamburger (escuro)' +'Hamburger 2': 'Hamburger 2' +'Hamburger 2 (dark)': 'Hamburger 2 (escuro)' +'Before the logo': 'Antes da logo' +'After the logo': 'Depois da logo' +'Position': 'Posição' +'Show only the opener (hidden logo)': 'Mostrar apenas o Abrir (ocultar logo)' +'Do not display the side menu and the opener if there is no application (eg: public pages).': 'Não mostrar o menu lateral e o Abrir se não houver aplicação (p.ex. páginas públicas).' +'Panel': 'Painel' +'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Abrir o menu quando o mouse passar sobre o Abrir (desativado automaticamente em telas de toque)' +'Display the big menu': 'Mostrar o menu grande' +'Display the logo': 'Mostrar a logo' +'Icons and texts': 'Ícones e textos' +'Loader enabled': 'Progresso ativado' +'Tips': 'Dicas' +'Always displayed': 'Sempre visível' +'This is the automatic behavior when the menu is always displayed.': 'Este é o comportamento automático quando o menu está sempre visível.' +'Not compatible with touch screens.': 'Não compatível com telas de toque.' +'Big menu': 'Menu grande' +'Live preview': 'Visualização ao vivo' +'Open apps in new tab': 'Abrir apps em nova aba' +'Use the global setting': 'Usar configurações globais' +'Use my selection': 'Usar minha seleção' +'Show and hide the list of applications': 'Mostrar e ocultar a lista de aplicativos' +'Use the avatar instead of the logo': 'Use o avatar ao invés da logo' +'You do not have permission to change the settings.': 'Você não tem permissão para alterar as configurações.' +'Force this configuration to users': 'Forçar esta configuração para os usuários' +'Export the configuration': 'Exportar a configuração' +'Purge the cache': 'Limpar o cache' +'Show the link to settings': 'Mostrar o link para configurações' +'The menu is enabled by default for users': 'O menu é habilitado por padrão para os usuários' +'Except when the configuration is forced.': 'Exceto quando a configuração é forçada.' +'Apps that should not be displayed in the menu': 'Apps que não devem ser mostrados no menu' +'This feature is only compatible with the big menu display.': 'Este recurso só é compatível com a exibição do menu grande.' +'The logo is a link to the default app': 'A logo é um link para o app padrão' +'Others': 'Outros' +'Categories': 'Categorias' +'Customize sorting': 'Personalizar classificação' +'Order by': 'Ordenar por' +'Name': 'Nome' +'Customed': 'Personalizado' +'Show and hide the list of categories': 'Mostrar e esconder a lista de categorias' +'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Estes parâmetros são usados quando o tema escuro ou o tema Dark Breeze está ativo.' +'Dark mode colors': 'Cores do modo escuro' +'With categories': 'Com categorias' +'Custom categories': 'Categorias personalizadas' +'Customize application categories': 'Personalizar categorias de apps' +'Reset to default': 'Restaurar padrão' +'Applications': 'Aplicativos' +'Applications kept in the top menu': 'Aplicativos mantidos no menu superior' +'Applications kept in the top menu but also shown in side menu': 'Aplicativos mantidos no menu superior, mas também mostrados no menu lateral' +'These applications must be selected in the previous option.': 'Estes aplicativos devem ser selecionados na opção anterior.' +'Hide labels on mouse over': 'Ocultar descrição ao passar o mouse' +'Toggle the menu': 'Toggle the menu' +'Open the documentation': 'Open the documentation' +'Ask the developer': 'Ask the developer' +'New request': 'New request' +'Report a bug': 'Report a bug' +'Show the configuration': 'Show the configuration' +'Configuration:': 'Configuration:' +'Done!': 'Done!' +'Copy': 'Copy' +'Need help': 'Need help' +'I would like a new feature': 'I would like a new feature' +'Something went wrong': 'Something went wrong' +'Select apps': 'Select apps' +'Sort': 'Sort' +'Customize': 'Customize' +'Custom': 'Custom' +'Close': 'Close' diff --git a/src/l10n/fixtures/ru.yaml b/src/l10n/fixtures/ru.yaml index bb17dad..15943ad 100644 --- a/src/l10n/fixtures/ru.yaml +++ b/src/l10n/fixtures/ru.yaml @@ -1,95 +1,111 @@ -"Custom menu": "Custom menu" -"Enable the custom menu": "Включить пользовательское меню" -"No": "Нет" -"Yes": "Да" -"Menu": "Меню" -? 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.' -: 'Используйте сочетание клавиш Ctrl+o, чтобы открыть или скрыть боковое меню. Используйте Tab для навигации.' -"Top menu": "Верхнее меню" -"Apps that not must be moved in the side menu": "Приложения не перемещаемые в боковое меню" -"If there is no selection then the global configuration is applied.": "Если тут ничего не отмечено, применяются глобальные настройки." -"Experimental": "Экспериментальный" -"Save": "Сохранить" -"You like this app and you want to support me?": "Вам нравится приложение или вы хотите поддержать меня?" -"Buy me a coffee ☕": "Купить мне чашку кофе ☕" -"Hidden": "Скрыто" -"Small": "Маленький" -"Normal": "Средний" -"Big": "Большой" -"Hidden icon": "Без иконки" -"Small icon": "Маленькая иконка" -"Normal icon": "Средняя иконка" -"Big icon": "Большая иконка" -"Hidden text": "Без текста" -"Small text": "Маленький текст" -"Normal text": "Средний текст" -"Big text": "Большой текст" -"Colors": "Цвета" -"Background color": "Цвет фона" -"Background color of current app": "Цвет фона выбранного приложения" -"Text color": "Цвет текста" -"Loader": "Загрузчик" -"Icon": "Иконка" -"Same color": "Такой же цвет" -"Opposite color": "Противоположный цвет" -"Transparent": "Прозрачный" -"Opaque": "Непрозрачный" -"Opener": "Открывалка" -"Default": "По умолчанию" -"Default (dark)": "По умолчанию (тёмный)" -"Hamburger": "Гамбургер" -"Hamburger (dark)": "Гамбургер (тёмный)" -"Hamburger 2": "Гамбургер 2" -"Hamburger 2 (dark)": "Гамбургер 2 (тёмный)" -"Before the logo": "Перед логотипом" -"After the logo": "После логотипа" -"Position": "Положение" -"Show only the opener (hidden logo)": "Показать только открывающую часть (скрытый логотип)" -"Do not display the side menu and the opener if there is no application (eg: public pages).": "Не отображать боковое меню и открывалку, если нет приложения (например, публичные страницы)." -"Panel": "Панель" -"Open the menu when the mouse is hover the opener (automatically disabled on touch screens)": "Открывать меню при наведении мыши на экран (автоматически отключается на сенсорных экранах)" -"Display the big menu": "Отобразить большое меню" -"Display the logo": "Показать логотип" -"Icons and texts": "Иконки и текст" -"Loader enabled": "Загрузчик включен" -"Tips": "Советы" -"Always displayed": "Всегда отображается" -"This is the automatic behavior when the menu is always displayed.": "This is the automatic behavior when the menu is always displayed." -"Not compatible with touch screens.": "Не совместимо с сенсорными экранами." -"Big menu": "Большое меню" -"Live preview": "Live preview" -"Open apps in new tab": "Открывать приложения в новой вкладке" -"Use the global setting": "Использовать глобальные настройки" -"Use my selection": "Использовать мои настройки" -"Show and hide the list of applications": "Показать или скрыть список приложений" -"Use the avatar instead of the logo": "Использовать аватар вместо логотипа" -"You do not have permission to change the settings.": "У вас нет разрешения изменять настройки." -"Force this configuration to users": "Force this configuration to users" -"Export the configuration": "Экспортировать конфигурацию" -"Purge the cache": "Очистить кэш" -"Show the link to settings": "Показать ссылку на настройки" -"The menu is enabled by default for users": "Это меню включено по умолчанию для пользователей" -"Except when the configuration is forced.": "Except when the configuration is forced." -"Apps that should not be displayed in the menu": "Ппрограммы, скрытые из меню" -"This feature is only compatible with the big menu display.": "This feature is only compatible with the big menu display." -"The logo is a link to the default app": "Логотип открывает приложение по умолчанию" -"Others": "Прочие" -"Categories": "Категории" -"Customize sorting": "Настроить сортировку" -"Order by": "В порядке" -"Name": "Название" -"Customed": "Customed" -"Show and hide the list of categories": "Показать или скрыть список категорий" -"This parameters are used when Dark theme or Breeze Dark Theme are enabled.": "Эти настройки используются темами Тёмная и Тёмная Breeze." -"Dark mode colors": "Цвета тёмной темы" -"With categories": "С категориями" -"Custom categories": "Пользовательские категории" -"Customize application categories": "Изменить категории приложений" -"Reset to default": "Сбросить к значениям по умолчанию" -"Applications": "Приложения" -"Applications kept in the top menu": "Applications kept in the top menu" -"Applications kept in the top menu but also shown in side menu": "Applications kept in the top menu but also shown in side menu" -"These applications must be selected in the previous option.": "These applications must be selected in the previous option." -"Hide labels on mouse over": "Скрыть название при наведении мыши" -"Except the hovered app": "Except the hovered app" -"Search": "Search" +'Custom menu': 'Пользовательское меню' +'Enable the custom menu': 'Включить пользовательское меню' +'No': 'Нет' +'Yes': 'Да' +'Menu': 'Меню' +'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Используйте сочетание клавиш Ctrl+o, чтобы открыть или скрыть боковое меню. Используйте tab key для навигации.' +'Top menu': 'Верхнее меню' +'Apps that not must be moved in the side menu': 'Приложения не перемещаемые в боковое меню' +'If there is no selection then the global configuration is applied.': 'Если тут ничего не отмечено, применяются глобальные настройки.' +'Experimental': 'Экспериментальный' +'Save': 'Сохранить' +'You like this app and you want to support me?': 'Вам нравится приложение или вы хотите поддержать меня?' +'Buy me a coffee ☕': 'Купить мне чашку кофе ☕' +'Hidden': 'Скрыто' +'Small': 'Маленький' +'Normal': 'Средний' +'Big': 'Большой' +'Hidden icon': 'Без иконки' +'Small icon': 'Маленькая иконка' +'Normal icon': 'Средняя иконка' +'Big icon': 'Большая иконка' +'Hidden text': 'Без текста' +'Small text': 'Маленький текст' +'Normal text': 'Средний текст' +'Big text': 'Большой текст' +'Colors': 'Цвета' +'Background color': 'Цвет фона' +'Background color of current app': 'Цвет фона выбранного приложения' +'Text color': 'Цвет текста' +'Loader': 'Загрузчик' +'Icon': 'Иконка' +'Same color': 'Такой же цвет' +'Opposite color': 'Противоположный цвет' +'Transparent': 'Прозрачный' +'Opaque': 'Непрозрачный' +'Opener': 'Открывалка' +'Default': 'По умолчанию' +'Default (dark)': 'По умолчанию (тёмный)' +'Hamburger': 'Гамбургер' +'Hamburger (dark)': 'Гамбургер (тёмный)' +'Hamburger 2': 'Гамбургер 2' +'Hamburger 2 (dark)': 'Гамбургер 2 (тёмный)' +'Before the logo': 'Перед логотипом' +'After the logo': 'После логотипа' +'Position': 'Положение' +'Show only the opener (hidden logo)': 'Показать только открывающую кнопку (скрытый логотип)' +'Do not display the side menu and the opener if there is no application (eg: public pages).': 'Не отображать боковое меню и открывалку, если нет доступного приложения (н.п. публичные страницы).' +'Panel': 'Панель' +'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Открывать меню при наведении мыши на открывалку (автоматически отключается на сенсорных экранах)' +'Display the big menu': 'Отобразить большое меню' +'Display the logo': 'Показать логотип' +'Icons and texts': 'Иконки и текст' +'Loader enabled': 'Загрузчик включен' +'Tips': 'Советы' +'Always displayed': 'Всегда отображается' +'This is the automatic behavior when the menu is always displayed.': 'Это автоматическое поведение, когда меню отображается всегда.' +'Not compatible with touch screens.': 'Не совместимо с сенсорными экранами.' +'Big menu': 'Большое меню' +'Live preview': 'Предпросмотр в реальном времени' +'Open apps in new tab': 'Открывать приложения в новой вкладке' +'Use the global setting': 'Использовать глобальные настройки' +'Use my selection': 'Использовать мои настройки' +'Show and hide the list of applications': 'Показать или скрыть список приложений' +'Use the avatar instead of the logo': 'Использовать аватар вместо логотипа' +'You do not have permission to change the settings.': 'У вас нет разрешения изменять настройки.' +'Force this configuration to users': 'Для обеспечения соблюдения этих настроек пользователями' +'Export the configuration': 'Экспортировать конфигурацию' +'Purge the cache': 'Очистить кэш' +'Show the link to settings': 'Показать ссылку на настройки' +'The menu is enabled by default for users': 'Это меню включено по умолчанию для пользователей' +'Except when the configuration is forced.': 'За исключением случаев, когда настройка принудительная.' +'Apps that should not be displayed in the menu': 'Ппрограммы, скрытые из меню' +'This feature is only compatible with the big menu display.': 'Эта возможность совместима только с отображением большого меню.' +'The logo is a link to the default app': 'Логотип открывает приложение по умолчанию' +'Others': 'Прочие' +'Categories': 'Категории' +'Customize sorting': 'Настроить сортировку' +'Order by': 'В порядке' +'Name': 'Название' +'Customed': 'Пользовательское' +'Show and hide the list of categories': 'Показать или скрыть список категорий' +'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Эти настройки используются темами Тёмная и Тёмная Breeze.' +'Dark mode colors': 'Цвета тёмной темы' +'With categories': 'С категориями' +'Custom categories': 'Пользовательские категории' +'Customize application categories': 'Изменить категории приложений' +'Reset to default': 'Сбросить к значениям по умолчанию' +'Applications': 'Приложения' +'Applications kept in the top menu': 'Приложения, хранящиеся в верхнем меню' +'Applications kept in the top menu but also shown in side menu': 'Приложения хранящиеся в верхнем меню, но также отображающиеся в боковом меню' +'These applications must be selected in the previous option.': 'Эти приложения необходимо выбрать в предыдущем выборе.' +'Hide labels on mouse over': 'Скрыть название при наведении мыши' +'Except the hovered app': 'Кроме приложения на котором сейчас' +'Search': 'Поиск' +'Toggle the menu': 'Переключить меню' +'Open the documentation': 'Open the documentation' +'Ask the developer': 'Спросить разработчика' +'New request': 'Новый запрос' +'Report a bug': 'Пожаловаться на ошибку' +'Show the configuration': 'Показать конфигурацию' +'Configuration:': 'Configuration:' +'Done!': 'Готово!' +'Copy': 'Копировать' +'Need help': 'Нужна помощь' +'I would like a new feature': 'Я хочу новую возможность' +'Something went wrong': 'Что-то пошло не так' +'Select apps': 'Выберете приложения' +'Sort': 'Сортировать' +'Customize': 'Приспособить' +'Custom': 'Custom' +'Close': 'Закрыть' diff --git a/src/l10n/fixtures/sk.yaml b/src/l10n/fixtures/sk.yaml index 6f8012e..2849008 100644 --- a/src/l10n/fixtures/sk.yaml +++ b/src/l10n/fixtures/sk.yaml @@ -1,93 +1,109 @@ -"Custom menu": "Custom menu" -"Enable the custom menu": "Enable the custom menu" -"No": "No" -"Yes": "Yes" -"Menu": "Menu" -? 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.' -: 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.' -"Top menu": "Top menu" -"Apps that not must be moved in the side menu": "Apps that not must be moved in the side menu" -"If there is no selection then the global configuration is applied.": "If there is no selection then the global configuration is applied." -"Experimental": "Experimental" -"Save": "Save" -"You like this app and you want to support me?": "You like this app and you want to support me?" -"Buy me a coffee ☕": "Buy me a coffee ☕" -"Hidden": "Hidden" -"Small": "Small" -"Normal": "Normal" -"Big": "Big" -"Hidden icon": "Hidden icon" -"Small icon": "Small icon" -"Normal icon": "Normal icon" -"Big icon": "Big icon" -"Hidden text": "Hidden text" -"Small text": "Small text" -"Normal text": "Normal text" -"Big text": "Big text" -"Colors": "Colors" -"Background color": "Background color" -"Background color of current app": "Background color of current app" -"Text color": "Text color" -"Loader": "Loader" -"Icon": "Icon" -"Same color": "Same color" -"Opposite color": "Opposite color" -"Transparent": "Transparent" -"Opaque": "Opaque" -"Opener": "Opener" -"Default": "Default" -"Default (dark)": "Default (dark)" -"Hamburger": "Hamburger" -"Hamburger (dark)": "Hamburger (dark)" -"Hamburger 2": "Hamburger 2" -"Hamburger 2 (dark)": "Hamburger 2 (dark)" -"Before the logo": "Before the logo" -"After the logo": "After the logo" -"Position": "Position" -"Show only the opener (hidden logo)": "Show only the opener (hidden logo)" -"Do not display the side menu and the opener if there is no application (eg: public pages).": "Do not display the side menu and the opener if there is no application (eg: public pages)." -"Panel": "Panel" -"Open the menu when the mouse is hover the opener (automatically disabled on touch screens)": "Open the menu when the mouse is hover the opener (automatically disabled on touch screens)" -"Display the big menu": "Display the big menu" -"Display the logo": "Display the logo" -"Icons and texts": "Icons and texts" -"Loader enabled": "Loader enabled" -"Tips": "Tips" -"Always displayed": "Always displayed" -"This is the automatic behavior when the menu is always displayed.": "This is the automatic behavior when the menu is always displayed." -"Not compatible with touch screens.": "Not compatible with touch screens." -"Big menu": "Big menu" -"Live preview": "Live preview" -"Open apps in new tab": "Open apps in new tab" -"Use the global setting": "Use the global setting" -"Use my selection": "Use my selection" -"Show and hide the list of applications": "Show and hide the list of applications" -"Use the avatar instead of the logo": "Use the avatar instead of the logo" -"You do not have permission to change the settings.": "You do not have permission to change the settings." -"Force this configuration to users": "Force this configuration to users" -"Export the configuration": "Export the configuration" -"Purge the cache": "Purge the cache" -"Show the link to settings": "Show the link to settings" -"The menu is enabled by default for users": "The menu is enabled by default for users" -"Except when the configuration is forced.": "Except when the configuration is forced." -"Apps that should not be displayed in the menu": "Apps that should not be displayed in the menu" -"This feature is only compatible with the big menu display.": "This feature is only compatible with the big menu display." -"The logo is a link to the default app": "The logo is a link to the default app" -"Others": "Others" -"Categories": "Categories" -"Customize sorting": "Customize sorting" -"Order by": "Order by" -"Name": "Name" -"Customed": "Customed" -"Show and hide the list of categories": "Show and hide the list of categories" -"This parameters are used when Dark theme or Breeze Dark Theme are enabled.": "This parameters are used when Dark theme or Breeze Dark Theme are enabled." -"Dark mode colors": "Dark mode colors" -"With categories": "With categories" -"Custom categories": "Custom categories" -"Customize application categories": "Customize application categories" -"Reset to default": "Reset to default" -"Applications": "Applications" -"Applications kept in the top menu": "Applications kept in the top menu" -"Applications kept in the top menu but also shown in side menu": "Applications kept in the top menu but also shown in side menu" -"These applications must be selected in the previous option.": "These applications must be selected in the previous option." -"Hide labels on mouse over": "Hide labels on mouse over" +'Custom menu': 'Custom menu' +'Enable the custom menu': 'Enable the custom menu' +'No': 'No' +'Yes': 'Yes' +'Menu': 'Menu' +'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.' +'Top menu': 'Top menu' +'Apps that not must be moved in the side menu': 'Apps that not must be moved in the side menu' +'If there is no selection then the global configuration is applied.': 'If there is no selection then the global configuration is applied.' +'Experimental': 'Experimental' +'Save': 'Save' +'You like this app and you want to support me?': 'You like this app and you want to support me?' +'Buy me a coffee ☕': 'Buy me a coffee ☕' +'Hidden': 'Hidden' +'Small': 'Small' +'Normal': 'Normal' +'Big': 'Big' +'Hidden icon': 'Hidden icon' +'Small icon': 'Small icon' +'Normal icon': 'Normal icon' +'Big icon': 'Big icon' +'Hidden text': 'Hidden text' +'Small text': 'Small text' +'Normal text': 'Normal text' +'Big text': 'Big text' +'Colors': 'Colors' +'Background color': 'Background color' +'Background color of current app': 'Background color of current app' +'Text color': 'Text color' +'Loader': 'Loader' +'Icon': 'Icon' +'Same color': 'Same color' +'Opposite color': 'Opposite color' +'Transparent': 'Transparent' +'Opaque': 'Opaque' +'Opener': 'Opener' +'Default': 'Default' +'Default (dark)': 'Default (dark)' +'Hamburger': 'Hamburger' +'Hamburger (dark)': 'Hamburger (dark)' +'Hamburger 2': 'Hamburger 2' +'Hamburger 2 (dark)': 'Hamburger 2 (dark)' +'Before the logo': 'Before the logo' +'After the logo': 'After the logo' +'Position': 'Position' +'Show only the opener (hidden logo)': 'Show only the opener (hidden logo)' +'Do not display the side menu and the opener if there is no application (eg: public pages).': 'Do not display the side menu and the opener if there is no application (eg: public pages).' +'Panel': 'Panel' +'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)' +'Display the big menu': 'Display the big menu' +'Display the logo': 'Display the logo' +'Icons and texts': 'Icons and texts' +'Loader enabled': 'Loader enabled' +'Tips': 'Tips' +'Always displayed': 'Always displayed' +'This is the automatic behavior when the menu is always displayed.': 'This is the automatic behavior when the menu is always displayed.' +'Not compatible with touch screens.': 'Not compatible with touch screens.' +'Big menu': 'Big menu' +'Live preview': 'Live preview' +'Open apps in new tab': 'Open apps in new tab' +'Use the global setting': 'Use the global setting' +'Use my selection': 'Use my selection' +'Show and hide the list of applications': 'Show and hide the list of applications' +'Use the avatar instead of the logo': 'Use the avatar instead of the logo' +'You do not have permission to change the settings.': 'You do not have permission to change the settings.' +'Force this configuration to users': 'Force this configuration to users' +'Export the configuration': 'Export the configuration' +'Purge the cache': 'Purge the cache' +'Show the link to settings': 'Show the link to settings' +'The menu is enabled by default for users': 'The menu is enabled by default for users' +'Except when the configuration is forced.': 'Except when the configuration is forced.' +'Apps that should not be displayed in the menu': 'Apps that should not be displayed in the menu' +'This feature is only compatible with the big menu display.': 'This feature is only compatible with the big menu display.' +'The logo is a link to the default app': 'The logo is a link to the default app' +'Others': 'Others' +'Categories': 'Categories' +'Customize sorting': 'Customize sorting' +'Order by': 'Order by' +'Name': 'Name' +'Customed': 'Customed' +'Show and hide the list of categories': 'Show and hide the list of categories' +'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'This parameters are used when Dark theme or Breeze Dark Theme are enabled.' +'Dark mode colors': 'Dark mode colors' +'With categories': 'With categories' +'Custom categories': 'Custom categories' +'Customize application categories': 'Customize application categories' +'Reset to default': 'Reset to default' +'Applications': 'Applications' +'Applications kept in the top menu': 'Applications kept in the top menu' +'Applications kept in the top menu but also shown in side menu': 'Applications kept in the top menu but also shown in side menu' +'These applications must be selected in the previous option.': 'These applications must be selected in the previous option.' +'Hide labels on mouse over': 'Hide labels on mouse over' +'Toggle the menu': 'Prepnite ponuku' +'Open the documentation': 'Open the documentation' +'Ask the developer': 'Ask the developer' +'New request': 'New request' +'Report a bug': 'Report a bug' +'Show the configuration': 'Show the configuration' +'Configuration:': 'Configuration:' +'Done!': 'Done!' +'Copy': 'Copy' +'Need help': 'Need help' +'I would like a new feature': 'I would like a new feature' +'Something went wrong': 'Something went wrong' +'Select apps': 'Select apps' +'Sort': 'Sort' +'Customize': 'Customize' +'Custom': 'Custom' +'Close': 'Close' diff --git a/src/l10n/fixtures/sv.yaml b/src/l10n/fixtures/sv.yaml new file mode 100644 index 0000000..d14314c --- /dev/null +++ b/src/l10n/fixtures/sv.yaml @@ -0,0 +1,111 @@ +'Custom menu': 'Anpassad meny' +'Enable the custom menu': 'Aktivera den anpassade menyn' +'No': 'Nej' +'Yes': 'Ja' +'Menu': 'Meny' +'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Använd genvägen Ctrl+o för att visa eller dölja sidomenyn. Använd tabb-tangenten för att navigera.' +'Top menu': 'Toppmeny' +'Apps that not must be moved in the side menu': 'Appar som inte får flyttas i sidomenyn' +'If there is no selection then the global configuration is applied.': 'Om inget val har gjorts tillämpas den globala konfigurationen.' +'Experimental': 'Experimentell' +'Save': 'Spara' +'You like this app and you want to support me?': 'Gillar du den här appen och vill stödja mig?' +'Buy me a coffee ☕': 'Bjud mig på en kaffe ☕' +'Hidden': 'Dold' +'Small': 'Liten' +'Normal': 'Normal' +'Big': 'Stor' +'Hidden icon': 'Dold ikon' +'Small icon': 'Liten ikon' +'Normal icon': 'Normal ikon' +'Big icon': 'Stor ikon' +'Hidden text': 'Dold text' +'Small text': 'Liten text' +'Normal text': 'Normal text' +'Big text': 'Stor text' +'Colors': 'Färger' +'Background color': 'Bakgrundsfärg' +'Background color of current app': 'Bakgrundsfärg för aktuell app' +'Text color': 'Textfärg' +'Loader': 'Laddare' +'Icon': 'Ikon' +'Same color': 'Samma färg' +'Opposite color': 'Motsatt färg' +'Transparent': 'Transparent' +'Opaque': 'Ogenomskinlig' +'Opener': 'Öppnare' +'Default': 'Standard' +'Default (dark)': 'Standard(mörk)' +'Hamburger': 'Hamburgermeny' +'Hamburger (dark)': 'Hamburgermeny(mörk)' +'Hamburger 2': 'Hamburgermeny 2' +'Hamburger 2 (dark)': 'Hamburgermeny 2 (mörk)' +'Before the logo': 'Före logotypen' +'After the logo': 'Efter logotypen' +'Position': 'Position' +'Show only the opener (hidden logo)': 'Visa endast öppnaren (gömd logotyp)' +'Do not display the side menu and the opener if there is no application (eg: public pages).': 'Visa inte sidomenyn eller öppnaren om det inte finns någon applikation (t.ex. publika sidor).' +'Panel': 'Panel' +'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Öppna menyn när muspekaren hovrar över öppnaren (automatiskt avaktiverat på pekskärmar)' +'Display the big menu': 'Visa den stora menyn' +'Display the logo': 'Visa logotypen' +'Icons and texts': 'Ikoner och texter' +'Loader enabled': 'Laddare aktiverad' +'Tips': 'Tips' +'Always displayed': 'Alltid visad' +'This is the automatic behavior when the menu is always displayed.': 'Detta är det automatiska beteendet när menyn alltid är visad.' +'Not compatible with touch screens.': 'Inte kompatibel med pekskärmar.' +'Big menu': 'Stor meny' +'Live preview': 'Förhandsgranskning i realtid' +'Open apps in new tab': 'Öppna appar i ny flik' +'Use the global setting': 'Använd den globala inställningen' +'Use my selection': 'Använd mitt val' +'Show and hide the list of applications': 'Visa och dölj listan över applikationer' +'Use the avatar instead of the logo': 'Använd avataren istället för logotypen' +'You do not have permission to change the settings.': 'Du har inte behörighet att ändra inställningarna.' +'Force this configuration to users': 'Tvinga denna konfiguration för användare' +'Export the configuration': 'Exportera konfigurationen' +'Purge the cache': 'Rensa cachen' +'Show the link to settings': 'Visa länken till inställningarna' +'The menu is enabled by default for users': 'Menyn är aktiverad som standard för användare' +'Except when the configuration is forced.': 'Förutom när konfigurationen är tvingad.' +'Apps that should not be displayed in the menu': 'Appar som inte ska visas i menyn' +'This feature is only compatible with the big menu display.': 'Denna funktion är endast kompatibel med stor meny.' +'The logo is a link to the default app': 'Logotypen är en länk till standardappen' +'Others': 'Övriga' +'Categories': 'Kategorier' +'Customize sorting': 'Anpassa sortering' +'Order by': 'Sortera efter' +'Name': 'Namn' +'Customed': 'Anpassad' +'Show and hide the list of categories': 'Visa och dölj listan över kategorier' +'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'Dessa parametrar används när mörkt tema eller Breeze Dark Theme är aktiverade.' +'Dark mode colors': 'Färger för mörkt läge' +'With categories': 'Med kategorier' +'Custom categories': 'Anpassade kategorier' +'Customize application categories': 'Anpassa app kategorier' +'Reset to default': 'Återställ till standardvärden' +'Applications': 'Applikationer' +'Applications kept in the top menu': 'Applikationer som hålls i toppmenyn' +'Applications kept in the top menu but also shown in side menu': 'Applikationer som visas både i toppmenyn och i sidomenyn' +'These applications must be selected in the previous option.': 'Dessa applikationer måste väljas i föregående alternativ.' +'Hide labels on mouse over': 'Dölj etiketter när muspekaren är över' +'Except the hovered app': 'Förutom den app som muspekaren är över' +'Search': 'Sök' +'Toggle the menu': 'Växla menyn' +'Open the documentation': 'Öppna dokumentationen' +'Ask the developer': 'Fråga utvecklaren' +'New request': 'Ny förfrågan' +'Report a bug': 'Rapportera ett fel' +'Show the configuration': 'Visa konfigurationen' +'Configuration:': 'Konfiguration:' +'Done!': 'Klar!' +'Copy': 'Kopiera' +'Need help': 'Behöver hjälp' +'I would like a new feature': 'Jag skulle vilja ha en ny funktion' +'Something went wrong': 'Något gick fel' +'Select apps': 'Välj appar' +'Sort': 'Sortera' +'Customize': 'Anpassa' +'Custom': 'Anpassad' +'Close': 'Stäng' diff --git a/src/l10n/fixtures/tpl/base.yaml b/src/l10n/fixtures/tpl/base.yaml index 7756515..eebd8c2 100644 --- a/src/l10n/fixtures/tpl/base.yaml +++ b/src/l10n/fixtures/tpl/base.yaml @@ -1,97 +1,111 @@ -"Custom menu": "" -"Enable the custom menu": "" -"No": "" -"Yes": "" -"Menu": "" -? 'Use the shortcut Ctrl+o - to open and to hide the side menu. Use tab to - navigate.' -: '' -"Top menu": "" -"Apps that not must be moved in the side menu": "" -"If there is no selection then the global configuration is applied.": "" -"Experimental": "" -"Save": "" -"You like this app and you want to support me?": "" -"Buy me a coffee ☕": "" -"Hidden": "" -"Small": "" -"Normal": "" -"Big": "" -"Hidden icon": "" -"Small icon": "" -"Normal icon": "" -"Big icon": "" -"Hidden text": "" -"Small text": "" -"Normal text": "" -"Big text": "" -"Colors": "" -"Background color": "" -"Background color of current app": "" -"Text color": "" -"Loader": "" -"Icon": "" -"Same color": "" -"Opposite color": "" -"Transparent": "" -"Opaque": "" -"Opener": "" -"Default": "" -"Default (dark)": "" -"Hamburger": "" -"Hamburger (dark)": "" -"Hamburger 2": "" -"Hamburger 2 (dark)": "" -"Before the logo": "" -"After the logo": "" -"Position": "" -"Show only the opener (hidden logo)": "" -"Do not display the side menu and the opener if there is no application (eg: public pages).": "" -"Panel": "" -"Open the menu when the mouse is hover the opener (automatically disabled on touch screens)": "" -"Display the big menu": "" -"Display the logo": "" -"Icons and texts": "" -"Loader enabled": "" -"Tips": "" -"Always displayed": "" -"This is the automatic behavior when the menu is always displayed.": "" -"Not compatible with touch screens.": "" -"Big menu": "" -"Live preview": "" -"Open apps in new tab": "" -"Use the global setting": "" -"Use my selection": "" -"Show and hide the list of applications": "" -"Use the avatar instead of the logo": "" -"You do not have permission to change the settings.": "" -"Force this configuration to users": "" -"Export the configuration": "" -"Purge the cache": "" -"Show the link to settings": "" -"The menu is enabled by default for users": "" -"Except when the configuration is forced.": "" -"Apps that should not be displayed in the menu": "" -"This feature is only compatible with the big menu display.": "" -"The logo is a link to the default app": "" -"Others": "" -"Categories": "" -"Customize sorting": "" -"Order by": "" -"Name": "" -"Customed": "" -"Show and hide the list of categories": "" -"This parameters are used when Dark theme or Breeze Dark Theme are enabled.": "" -"Dark mode colors": "" -"With categories": "" -"Custom categories": "" -"Customize application categories": "" -"Reset to default": "" -"Applications": "" -"Applications kept in the top menu": "" -"Applications kept in the top menu but also shown in side menu": "" -"These applications must be selected in the previous option.": "" -"Hide labels on mouse over": "" -"Except the hovered app": "" -"Search": "" +'Custom menu': 'Custom menu' +'Enable the custom menu': 'Enable the custom menu' +'No': 'No' +'Yes': 'Yes' +'Menu': 'Menu' +'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.': 'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab key to navigate.' +'Top menu': 'Top menu' +'Apps that not must be moved in the side menu': 'Apps that not must be moved in the side menu' +'If there is no selection then the global configuration is applied.': 'If there is no selection then the global configuration is applied.' +'Experimental': 'Experimental' +'Save': 'Save' +'You like this app and you want to support me?': 'You like this app and you want to support me?' +'Buy me a coffee ☕': 'Buy me a coffee ☕' +'Hidden': 'Hidden' +'Small': 'Small' +'Normal': 'Normal' +'Big': 'Big' +'Hidden icon': 'Hidden icon' +'Small icon': 'Small icon' +'Normal icon': 'Normal icon' +'Big icon': 'Big icon' +'Hidden text': 'Hidden text' +'Small text': 'Small text' +'Normal text': 'Normal text' +'Big text': 'Big text' +'Colors': 'Colors' +'Background color': 'Background color' +'Background color of current app': 'Background color of current app' +'Text color': 'Text color' +'Loader': 'Loader' +'Icon': 'Icon' +'Same color': 'Same color' +'Opposite color': 'Opposite color' +'Transparent': 'Transparent' +'Opaque': 'Opaque' +'Opener': 'Opener' +'Default': 'Default' +'Default (dark)': 'Default (dark)' +'Hamburger': 'Hamburger' +'Hamburger (dark)': 'Hamburger (dark)' +'Hamburger 2': 'Hamburger 2' +'Hamburger 2 (dark)': 'Hamburger 2 (dark)' +'Before the logo': 'Before the logo' +'After the logo': 'After the logo' +'Position': 'Position' +'Show only the opener (hidden logo)': 'Show only the opener (hidden logo)' +'Do not display the side menu and the opener if there is no application (eg: public pages).': 'Do not display the side menu and the opener if there is no application (eg: public pages).' +'Panel': 'Panel' +'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': 'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)' +'Display the big menu': 'Display the big menu' +'Display the logo': 'Display the logo' +'Icons and texts': 'Icons and texts' +'Loader enabled': 'Loader enabled' +'Tips': 'Tips' +'Always displayed': 'Always displayed' +'This is the automatic behavior when the menu is always displayed.': 'This is the automatic behavior when the menu is always displayed.' +'Not compatible with touch screens.': 'Not compatible with touch screens.' +'Big menu': 'Big menu' +'Live preview': 'Live preview' +'Open apps in new tab': 'Open apps in new tab' +'Use the global setting': 'Use the global setting' +'Use my selection': 'Use my selection' +'Show and hide the list of applications': 'Show and hide the list of applications' +'Use the avatar instead of the logo': 'Use the avatar instead of the logo' +'You do not have permission to change the settings.': 'You do not have permission to change the settings.' +'Force this configuration to users': 'Force this configuration to users' +'Export the configuration': 'Export the configuration' +'Purge the cache': 'Purge the cache' +'Show the link to settings': 'Show the link to settings' +'The menu is enabled by default for users': 'The menu is enabled by default for users' +'Except when the configuration is forced.': 'Except when the configuration is forced.' +'Apps that should not be displayed in the menu': 'Apps that should not be displayed in the menu' +'This feature is only compatible with the big menu display.': 'This feature is only compatible with the big menu display.' +'The logo is a link to the default app': 'The logo is a link to the default app' +'Others': 'Others' +'Categories': 'Categories' +'Customize sorting': 'Customize sorting' +'Order by': 'Order by' +'Name': 'Name' +'Customed': 'Customed' +'Show and hide the list of categories': 'Show and hide the list of categories' +'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': 'This parameters are used when Dark theme or Breeze Dark Theme are enabled.' +'Dark mode colors': 'Dark mode colors' +'With categories': 'With categories' +'Custom categories': 'Custom categories' +'Customize application categories': 'Customize application categories' +'Reset to default': 'Reset to default' +'Applications': 'Applications' +'Applications kept in the top menu': 'Applications kept in the top menu' +'Applications kept in the top menu but also shown in side menu': 'Applications kept in the top menu but also shown in side menu' +'These applications must be selected in the previous option.': 'These applications must be selected in the previous option.' +'Hide labels on mouse over': 'Hide labels on mouse over' +'Except the hovered app': 'Except the hovered app' +'Search': 'Search' +'Toggle the menu': 'Toggle the menu' +'Open the documentation': 'Open the documentation' +'Ask the developer': 'Ask the developer' +'New request': 'New request' +'Report a bug': 'Report a bug' +'Show the configuration': 'Show the configuration' +'Configuration:': 'Configuration:' +'Done!': 'Done!' +'Copy': 'Copy' +'Need help': 'Need help' +'I would like a new feature': 'I would like a new feature' +'Something went wrong': 'Something went wrong' +'Select apps': 'Select apps' +'Sort': 'Sort' +'Customize': 'Customize' +'Custom': 'Custom' +'Close': 'Close' diff --git a/src/l10n/fixtures/zh_CN.yaml b/src/l10n/fixtures/zh_CN.yaml index 8414cb6..bc77571 100644 --- a/src/l10n/fixtures/zh_CN.yaml +++ b/src/l10n/fixtures/zh_CN.yaml @@ -1,95 +1,111 @@ -"Custom menu": "自定义菜单" -"Enable the custom menu": "激活自定义菜单" -"No": "取消" -"Yes": "确定" -"Menu": "菜单" -? "Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate." -: "使用快捷键 Ctrl+o 打开或隐藏侧边栏菜单。使用tab 来导航。" -"Top menu": "顶部菜单" -"Apps that not must be moved in the side menu": "禁止在侧边栏菜单移动的应用" -"If there is no selection then the global configuration is applied.": "如不选择,将应用全局设定。" -"Experimental": "实验性" -"Save": "保存" -"You like this app and you want to support me?": "喜欢本应用并支持我一下?" -"Buy me a coffee ☕": "赏一杯咖啡 ☕ 给我" -"Hidden": "隐藏" -"Small": "小型" -"Normal": "标准" -"Big": "大型" -"Colors": "颜色" -"Background color": "背景颜色" -"Background color of current app": "当前应用的背景色" -"Text color": "文字颜色" -"Loader": "菜单指示器" -"Icon": "图标" -"Same color": "相同颜色" -"Opposite color": "相反颜色" -"Transparent": "透明" -"Opaque": "不透明" -"Opener": "容器" -"Default": "默认" -"Default (dark)": "默认(深色)" -"Hamburger": "Hamburger" -"Hamburger (dark)": "Hamburger (深色)" -"Hamburger 2": "Hamburger 2" -"Hamburger 2 (dark)": "Hamburger 2 (深色)" -"Before the logo": "在logo前" -"After the logo": "在logo后" -"Position": "位置" -"Show only the opener (hidden logo)": "只显示容器 (隐藏logo)" -"Do not display the side menu and the opener if there is no application (eg: public pages).": "N如果没有应用,不显示侧边栏菜单和容器 (例如 : 公共页面)。" -"Panel": "面板" -"Open the menu when the mouse is hover the opener (automatically disabled on touch screens)": "鼠标悬停时打开菜单 (触摸屏时将自动禁用)" -"Display the big menu": "显示大型菜单" -"Display the logo": "显示logo" -"Icons and texts": "图标与文字" -"Loader enabled": "菜单指示器已激活" -"Tips": "技巧" -"Always displayed": "一直显示" -"This is the automatic behavior when the menu is always displayed.": "一直显示菜单时的自动动作。" -"Not compatible with touch screens.": "与触屏不兼容。" -"Big menu": "大型菜单" -"Live preview": "实时预览" -"Open apps in new tab": "在新标签中打开应用" -"Use the global setting": "使用全局设定" -"Use my selection": "使用自定义设定" -"Show and hide the list of applications": "显示或隐藏应用列表" -"Use the avatar instead of the logo": "使用头像代替logo" -"You do not have permission to change the settings.": "没有更改设置的权限。" -"Force this configuration to users": "强制用户使用此设置" -"Export the configuration": "导出设置" -"Purge the cache": "清除缓存" -"Show the link to settings": "显示设置链接" -"The menu is enabled by default for users": "用户的默认菜单已激活" -"Except when the configuration is forced.": "除非设置被强制使用。" -"Apps that should not be displayed in the menu": "禁止在菜单中显示的应用" -"This feature is only compatible with the big menu display.": "此功能只和大型菜单兼容。" -"The logo is a link to the default app": "logo链接到默认应用" -"Others": "其他" -"Categories": "类别" -"Customize sorting": "自定义顺序" -"Order by": "排序规则" -"Name": "名称" -"Customed": "自定义" -"Show and hide the list of categories": "显示或隐藏类别列表" -"This parameters are used when Dark theme or Breeze Dark Theme are enabled.": "此参数将应用于暗黑主题激活时。" -"Dark mode colors": "暗黑模式颜色" -"With categories": "有类别" -"Custom categories": "自定义类别" -"Customize application categories": "自定义应用程序类别" -"Reset to default": "重置为默认设置" -"Hidden icon": "隐藏图标" -"Small icon": "小图标" -"Normal icon": "正常图标" -"Big icon": "大图标" -"Hidden text": "隐藏文字" -"Small text": "小文本" -"Normal text": "普通文本" -"Big text": "大文本" -"Applications": "Applications" -"Applications kept in the top menu": "Applications kept in the top menu" -"Applications kept in the top menu but also shown in side menu": "Applications kept in the top menu but also shown in side menu" -"These applications must be selected in the previous option.": "These applications must be selected in the previous option." -"Hide labels on mouse over": "Hide labels on mouse over" -"Except the hovered app": "Except the hovered app" -"Search": "Search" +'Custom menu': '自定义菜单' +'Enable the custom menu': '启用自定义菜单' +'No': '否' +'Yes': '是' +'Menu': '菜单' +'Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.': '使用快捷键 Ctrl+o 打开或隐藏侧边栏菜单。使用 Tab 键来导航。' +'Top menu': '顶部菜单' +'Apps that not must be moved in the side menu': '禁止在侧边栏菜单移动的应用' +'If there is no selection then the global configuration is applied.': '如果没有选择,则应用全局配置。' +'Experimental': '实验性' +'Save': '保存' +'You like this app and you want to support me?': '喜欢本应用并支持我一下?' +'Buy me a coffee ☕': '赏一杯咖啡 ☕ 给我' +'Hidden': '隐藏' +'Small': '小型' +'Normal': '标准' +'Big': '大型' +'Colors': '颜色' +'Background color': '背景颜色' +'Background color of current app': '当前应用的背景色' +'Text color': '文本颜色' +'Loader': '菜单指示器' +'Icon': '图标' +'Same color': '相同颜色' +'Opposite color': '相反颜色' +'Transparent': '透明' +'Opaque': '不透明' +'Opener': '触发器' +'Default': '默认' +'Default (dark)': '默认(深色)' +'Hamburger': 'Hamburger' +'Hamburger (dark)': 'Hamburger (深色)' +'Hamburger 2': 'Hamburger 2' +'Hamburger 2 (dark)': 'Hamburger 2 (深色)' +'Before the logo': '在徽标之前' +'After the logo': '在徽标之后' +'Position': '位置' +'Show only the opener (hidden logo)': '仅显示触发器(隐藏徽标)' +'Do not display the side menu and the opener if there is no application (eg: public pages).': '如果没有应用程序(例如:公共页面),则不要显示侧边栏菜单和触发器。' +'Panel': '面板' +'Open the menu when the mouse is hover the opener (automatically disabled on touch screens)': '当鼠标悬停在触发器上时打开菜单(在触摸屏上自动禁用)' +'Display the big menu': '显示大型菜单' +'Display the logo': '显示徽标' +'Icons and texts': '图标和文本' +'Loader enabled': '菜单指示器已启用' +'Tips': '技巧' +'Always displayed': '始终显示' +'This is the automatic behavior when the menu is always displayed.': '这是菜单始终显示时的自动行为。' +'Not compatible with touch screens.': '与触摸屏不兼容。' +'Big menu': '大型菜单' +'Live preview': '实时预览' +'Open apps in new tab': '在新标签页中打开应用' +'Use the global setting': '使用全局设置' +'Use my selection': '使用自定义设置' +'Show and hide the list of applications': '显示和隐藏应用程序列表' +'Use the avatar instead of the logo': '使用头像代替徽标' +'You do not have permission to change the settings.': '您没有更改设置的权限。' +'Force this configuration to users': '强制用户使用此配置' +'Export the configuration': '导出配置' +'Purge the cache': '清除缓存' +'Show the link to settings': '显示设置链接' +'The menu is enabled by default for users': '默认情况下为用户启用菜单' +'Except when the configuration is forced.': '除非强制配置。' +'Apps that should not be displayed in the menu': '禁止在菜单中显示的应用' +'This feature is only compatible with the big menu display.': '此功能只和大型菜单兼容。' +'The logo is a link to the default app': '徽标链接到默认应用' +'Others': '其他' +'Categories': '类别' +'Customize sorting': '自定义排序' +'Order by': '排序方式' +'Name': '名称' +'Customed': '自定义' +'Show and hide the list of categories': '显示或隐藏类别列表' +'This parameters are used when Dark theme or Breeze Dark Theme are enabled.': '启用深色主题时使用此参数。' +'Dark mode colors': '深色模式颜色' +'With categories': '按类别' +'Custom categories': '自定义类别' +'Customize application categories': '自定义应用程序类别' +'Reset to default': '重置为默认设置' +'Hidden icon': '隐藏图标' +'Small icon': '小图标' +'Normal icon': '正常图标' +'Big icon': '大图标' +'Hidden text': '隐藏文本' +'Small text': '小文本' +'Normal text': '普通文本' +'Big text': '大文本' +'Applications': '应用程序' +'Applications kept in the top menu': '应用程序保留在顶部菜单中' +'Applications kept in the top menu but also shown in side menu': '应用程序保留在顶部菜单中,但也显示在侧边栏菜单中' +'These applications must be selected in the previous option.': '必须在上一个选项中选择这些应用程序。' +'Hide labels on mouse over': '鼠标悬停时隐藏标签' +'Except the hovered app': '除了悬停的应用' +'Search': '搜索' +'Toggle menu': '切换菜单' +'Open the documentation': '打开文档' +'Ask the developer': '询问开发者' +'New request': '新请求' +'Report a bug': '报告错误' +'Show the configuration': '显示配置' +'Configuration:': '配置:' +'Done!': '完成!' +'Copy': '复制' +'Need help': '需要帮助' +'I would like a new feature': '我想要一个新功能' +'Something went wrong': '出了点问题' +'Select apps': '选择应用' +'Sort': '排序' +'Customize': '自定义' +'Custom': '自定义' +'Close': '关闭' diff --git a/appinfo/routes.php b/src/lib/app.js similarity index 50% rename from appinfo/routes.php rename to src/lib/app.js index bdc3fba..bf012e0 100644 --- a/appinfo/routes.php +++ b/src/lib/app.js @@ -1,5 +1,3 @@ -. */ -return [ - 'routes' => [ - ['name' => 'App#index', 'url' => '/', 'verb' => 'GET'], - ['name' => 'Css#stylesheet', 'url' => '/css/stylesheet', 'verb' => 'GET'], - ['name' => 'Js#script', 'url' => '/js/script', 'verb' => 'GET'], - ['name' => 'Js#config', 'url' => '/js/config', 'verb' => 'GET'], - ['name' => 'Nav#items', 'url' => '/nav/items', 'verb' => 'GET'], - ['name' => 'PersonalSetting#valueSet', 'url' => '/personalSetting/valueSet', 'verb' => 'POST'], - ['name' => 'AdminSetting#removeCache', 'url' => '/admin/cache/remove', 'verb' => 'GET'], - ['name' => 'AdminSetting#exportConfiguration', 'url' => '/admin/config/export', 'verb' => 'GET'], - ], -]; +import { loadState } from '@nextcloud/initial-state' + +const getActiveAppId = () => { + const apps = loadState('core', 'apps', {}) + + for (let id in apps) { + if (apps[id].active) { + return apps[id].id + } + } + + return null +} + +export { getActiveAppId } diff --git a/src/lib/createElement.js b/src/lib/createElement.js deleted file mode 100644 index 19c8207..0000000 --- a/src/lib/createElement.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = (tagName, attributes) => { - const element = document.createElement(tagName) - - if (typeof attributes === 'object') { - for (let i in attributes) { - element.setAttribute(i, attributes[i]) - } - } - - return element -} diff --git a/src/lib/dom.js b/src/lib/dom.js new file mode 100644 index 0000000..b03ce5e --- /dev/null +++ b/src/lib/dom.js @@ -0,0 +1,54 @@ +/** + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +const waitContainer = async (selector) => { + return new Promise((resolve) => { + const execute = () => { + const container = document.querySelector(selector) + + if (container) { + resolve(container) + } else { + setTimeout(() => { + execute(selector) + }, 50) + } + } + + execute(selector) + }) +} + +const createElement = (tagName, attributes) => { + const element = document.createElement(tagName) + + if (typeof attributes === 'object') { + for (let i in attributes) { + if (i === 'text') { + element.textContent = attributes[i] + } else if (i === 'html') { + element.innerHTML = attributes[i] + } else { + element.setAttribute(i, attributes[i]) + } + } + } + + return element +} + +export { waitContainer, createElement } diff --git a/src/lib/menu.js b/src/lib/menu.js new file mode 100644 index 0000000..6153682 --- /dev/null +++ b/src/lib/menu.js @@ -0,0 +1,28 @@ +/** + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +const focusActiveApp = (menu) => { + window.setTimeout(() => { + const a = menu.querySelector('.side-menu-app.active a') || menu.querySelector('.side-menu-app a') + + if (a) { + a.focus() + } + }, 500) +} + +export { focusActiveApp } diff --git a/src/lib/search.js b/src/lib/search.js new file mode 100644 index 0000000..033dfd6 --- /dev/null +++ b/src/lib/search.js @@ -0,0 +1,40 @@ +/** + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +const containsAppsMatchingSearch = (values, search) => { + if (search.trim() === '') { + return true + } + + for (let key in values) { + if (isAppMatchingSearch(values[key], search)) { + return true + } + } + + return false +} + +const isAppMatchingSearch = (item, search) => { + if (search.trim() === '') { + return true + } + + return item.name.toLowerCase().includes(search.trim().toLowerCase()) +} + +export { containsAppsMatchingSearch, isAppMatchingSearch } diff --git a/src/lib/setting.js b/src/lib/setting.js new file mode 100644 index 0000000..f69ee60 --- /dev/null +++ b/src/lib/setting.js @@ -0,0 +1,26 @@ +const waitPasswordConfirmation = async () => { + let tries = 0 + + return new Promise((resolve, reject) => { + const execute = () => { + if (!OC.PasswordConfirmation.requiresPasswordConfirmation()) { + resolve() + return + } + + OC.PasswordConfirmation.requirePasswordConfirmation(() => {}) + + if (++tries !== 10) { + setTimeout(() => { + execute() + }, 2000) + } else { + reject() + } + } + + execute() + }) +} + +export { waitPasswordConfirmation } diff --git a/src/menu.js b/src/menu.js new file mode 100644 index 0000000..9f41a0f --- /dev/null +++ b/src/menu.js @@ -0,0 +1,54 @@ +/** + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import './scss/menu.scss' + +import '@formatjs/intl-segmenter/polyfill.js' + +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import { createElement, waitContainer } from './lib/dom.js' + +import StandardMenu from './menus/StandardMenu' +import MenuContainer from './menus/MenuContainer' + +const pinia = createPinia() +const body = document.querySelector('body') +const container = createElement('div', { + id: 'side-menu-container', +}) + +body.appendChild(container) + +const app = createApp(MenuContainer) +app.use(pinia) +app.mixin({ methods: { t, n } }) +app.mount(container) + +waitContainer('#header .app-menu').then((container) => { + const menu = createElement('div', { + id: 'app-menu-container', + }) + + container.parentNode.insertBefore(menu, container.nextSibling) + container.remove() + + const app = createApp(StandardMenu) + app.use(pinia) + app.mixin({ methods: { t, n } }) + app.mount(menu) +}) diff --git a/src/menus/MenuContainer.vue b/src/menus/MenuContainer.vue new file mode 100644 index 0000000..ba44f97 --- /dev/null +++ b/src/menus/MenuContainer.vue @@ -0,0 +1,139 @@ + + + + diff --git a/src/menus/SideMenuWithCategories.vue b/src/menus/SideMenuWithCategories.vue new file mode 100644 index 0000000..eb8ae1f --- /dev/null +++ b/src/menus/SideMenuWithCategories.vue @@ -0,0 +1,132 @@ + + + + diff --git a/src/menus/SimpleSideMenu.vue b/src/menus/SimpleSideMenu.vue new file mode 100644 index 0000000..65d0fa4 --- /dev/null +++ b/src/menus/SimpleSideMenu.vue @@ -0,0 +1,176 @@ + + + + diff --git a/src/menus/StandardMenu.vue b/src/menus/StandardMenu.vue new file mode 100644 index 0000000..81b9ff9 --- /dev/null +++ b/src/menus/StandardMenu.vue @@ -0,0 +1,190 @@ + + + + + + diff --git a/src/menus/TopWideMenu.vue b/src/menus/TopWideMenu.vue new file mode 100644 index 0000000..596b1ea --- /dev/null +++ b/src/menus/TopWideMenu.vue @@ -0,0 +1,137 @@ + + + + diff --git a/src/pages/AdminSettings.vue b/src/pages/AdminSettings.vue new file mode 100644 index 0000000..d3c7c84 --- /dev/null +++ b/src/pages/AdminSettings.vue @@ -0,0 +1,627 @@ + + + + diff --git a/src/pages/UserSettings.vue b/src/pages/UserSettings.vue new file mode 100644 index 0000000..d3a7dfb --- /dev/null +++ b/src/pages/UserSettings.vue @@ -0,0 +1,170 @@ + + + + + + diff --git a/src/scss/admin.scss b/src/scss/admin.scss new file mode 100644 index 0000000..0cd332c --- /dev/null +++ b/src/scss/admin.scss @@ -0,0 +1,262 @@ +/** + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +.cm-settings { + &--nav { + padding-top: 30px; + } + + &-nav { + .app-navigation__content { + padding: 20px; + } + + .app-navigation-entry-icon { + display: none !important; + } + + .app-navigation-entry__name { + padding-left: 10px !important; + } + } + + &-tips { + margin-bottom: 15px; + } + + &-section { + width: 100%; + padding: 20px; + + &--hidden { + display: none; + } + } + + &-item { + display: flex; + justify-content: start; + margin-bottom: 10px; + + &--disabled { + opacity: 0.5; + } + + &-label { + max-width: 350px; + width: 100%; + padding-right: 20px; + + &--short { + max-width: 300px; + } + + &--top { + vertical-align: top; + } + + &--middle { + display: flex; + flex-direction: column; + text-align: left; + } + } + + &-form { + } + } + + &-form { + &-arrow { + color: var(--color-text-maxcontrast); + display: inline-block; + margin-right: 3px; + } + + &-draggable { + cursor: pointer; + padding: 8px 12px; + border-bottom: 1px solid var(--color-border); + } + + &-displaypicker { + img { + padding: 10px 10px 10px 0; + border: 2px solid transparent; + max-width: 100%; + cursor: pointer; + } + } + + &-colorpicker { + display: inline-block; + margin-right: 12px; + width: 60px; + height: 30px; + + &-value { + cursor: pointer; + width: 60px; + height: 30px; + border-radius: 6px; + border: 1px solid var(--color-border); + } + } + + &-range { + input { + min-height: auto; + } + + div * { + vertical-align: middle; + } + + em + input, + input + em { + margin-left: 10px; + } + } + + &-catsort-modal { + .modal__footer { + padding: 20px; + text-align: right; + } + + .modal__footer button { + display: inline-block; + } + } + + &-appsort-modal { + .modal__footer { + text-align: right; + padding: 20px; + } + + .modal__footer button { + display: inline-block; + } + } + + &-apppicker-modal { + .modal__content { + padding: 20px; + } + + .modal__footer { + margin-top: 20px; + text-align: right; + } + + .modal__footer button { + display: inline-block; + } + + img { + width: 15px; + height: 15px; + } + } + + &-appcategory-modal { + .modal__content { + padding: 20px; + } + + .menu button { + display: inline-block; + margin-right: 5px; + } + + .modal__footer { + margin-top: 20px; + text-align: right; + } + + .modal__footer button { + display: inline-block; + } + + td { + padding: 5px 0; + } + + tr:hover, + td:hover { + background: none !important; + } + + .form { + padding: 10px 0; + } + + img { + width: 15px; + height: 15px; + } + + .btn-close { + margin-left: 20px; + } + } + } + + &-btn { + &--save { + margin-top: 30px; + } + } + + &-config-modal { + textarea { + width: 100%; + height: 30vh; + } + + .modal__content { + padding: 20px; + } + + .modal__footer { + margin-top: 20px; + text-align: right; + } + + .modal__footer button { + display: inline-block; + margin-right: 5px; + } + } + + &-children-inline { + > * { + display: inline-block !important; + margin-right: 5px; + margin-bottom: 5px; + } + } + + &-button-inline { + .button-vue { + display: inline-block !important; + margin-right: 5px; + margin-bottom: 5px; + } + } +} diff --git a/src/scss/menu.scss b/src/scss/menu.scss new file mode 100644 index 0000000..097c002 --- /dev/null +++ b/src/scss/menu.scss @@ -0,0 +1,601 @@ +/** + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#header { + .cm-opener { + margin-left: 0px; + margin-top: 0px; + } +} + +.app-menu { + visibility: hidden; +} + +.cm { + position: fixed; + top: 0; + left: 0; + height: 100vh; + width: 100%; + max-width: 290px; + background: linear-gradient(90deg, var(--side-menu-background-color, #333) 0%, var(--side-menu-background-color-to, #333) 100%); + z-index: 3000; + color: var(--side-menu-text-color, #fff); + box-shadow: + rgba(0, 0, 0, 0.22) 0px 25.6px 57.6px 0px, + rgba(0, 0, 0, 0.18) 0px 4.8px 14.4px 0px; + display: none; + + &-opener { + background: var(--side-menu-opener, url('../../img/side-menu-opener.svg')); + background-color: transparent !important; + height: 40px !important; + width: 40px !important; + border-radius: 0 !important; + border: 0 !important; + padding-right: 12px !important; + padding-left: 12px !important; + margin-top: 1px !important; + margin-left: 5px !important; + margin-left: 3px !important; + overflow: hidden; + + span { + position: relative; + left: 50px; + display: block; + width: 1px; + height: 1px; + overflow: hidden; + } + + &:active, + &:focus { + background-color: var(--side-menu-current-app-background-color, #444) !important; + } + } + + &-closer { + background: url('../../img/side-menu-opener-closer.svg'); + display: none; + } + + a { + transition: 0.2s; + } + + &-categories-wrapper { + padding-bottom: 70px; + } + + &-search { + float: right; + + input { + background: none; + border: 0; + border-radius: 0; + color: var(--side-menu-text-color); + + &::placeholder { + color: var(--side-menu-text-color); + } + } + } + + &-categories { + max-height: calc(100vh - 55px); + overflow: auto; + position: relative; + display: flex; + flex-wrap: wrap; + justify-content: center; + padding: 0 10% 0 10%; + } + + &-category { + padding: 10px 20px; + flex: 1 1 auto; + + &-title { + padding-left: 10px; + color: var(--side-menu-text-color, #fff); + font-weight: bold; + font-size: 20px; + margin-bottom: 12px; + line-height: 30px; + margin-top: 0; + } + } + + &-header { + width: 100%; + z-index: 2300; + max-width: 290px; + padding-top: 2px; + top: 0; + + &::after { + content: ' '; + display: block; + clear: both; + } + } + + &-loader { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 3001; + + &-bar { + height: 4px; + background: var(--side-menu-loader-color, #0e75ac); + width: 0; + transition-property: width; + } + } + + &-apps { + height: calc(100vh - 49px); + top: 49px; + z-index: 2200; + position: fixed; + width: 100%; + max-width: 290px; + overflow: auto; + + &.side-menu-apps-list--with-logo { + height: calc(100vh - 160px); + top: 160px; + } + } + + &-app { + a { + line-height: 30px; + color: var(--side-menu-text-color, #fff); + display: block; + padding: 7px 0 5px 13px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + a:hover, + a:focus, + &:active, + &.active { + background: var(--side-menu-current-app-background-color, #444); + } + + &-icon { + width: 20px; + vertical-align: middle; + margin-top: -4px; + margin-right: 10px; + filter: invert(var(--side-menu-icon-invert-filter, 0%)); + opacity: var(--side-menu-icon-opacity, 1); + } + } + + &-setting { + margin-right: 9px; + margin-top: 2px; + float: right; + line-height: 34px; + height: 42px; + display: none; + + a { + color: var(--side-menu-text-color, #fff); + display: block; + padding: 4px 7px; + } + + &:hover a, + a:active, + a:focus { + background: var(--side-menu-current-app-background-color, #444); + } + + img { + vertical-align: bottom; + margin-left: 3px; + width: 32px; + height: 32px; + } + } + + &.open { + display: block; + + .cm-setting { + display: block; + } + } + + &-logo { + text-align: center; + clear: both; + + img { + max-width: 60%; + max-height: 100px; + } + } + + &--topwidemenu { + max-width: 100%; + height: auto; + } + + &--sidemenuwithcategories { + max-width: 290px; + height: 100vh; + + .cm-categories { + display: block; + padding: 0; + width: 100%; + } + + .cm-category { + padding: 10px 0; + } + + .cm-header { + max-width: 295px; + } + } + + &.cm--topwidemenu, + &.cm--sidemenuwithcategories { + .cm-apps { + height: auto !important; + position: static !important; + max-width: 100vw !important; + overflow: auto !important; + } + + .cm-app { + a { + padding: 7px 0 7px 7px; + } + + &-icon { + vertical-align: middle; + margin-top: -2px; + } + } + } +} + +.cm-standardmenu { + visibility: hidden; + + &.show { + visibility: visible; + } +} + +.cm-always-displayed { + body { + width: calc(100% - 50px) !important; + position: absolute; + left: 50px; + } + + #header { + position: absolute !important; + + .cm-opener { + display: none; + } + } + + .cm { + display: block; + width: 50px; + + &-apps { + height: calc(100vh - 49px); + width: 50px; + top: 49px; + + &:hover { + overflow: auto; + } + } + + &-header { + height: 49px; + width: 50px; + } + + &-logo { + display: none; + } + + &-app { + &-text { + display: none; + } + } + + &.open { + width: 100%; + max-width: 290px; + + .cm-apps { + width: 100%; + } + + .cm-app { + &-text { + display: inline; + } + } + + .cm-header { + width: 100%; + } + } + } + + .app-navigation-toggle-wrapper { + right: 0 !important; + margin-left: 0 !important; + } +} + +@media screen and (max-width: 1024px) { + .cm { + &--topwidemenu { + max-width: 290px; + height: 100vh; + + .cm-header { + max-width: 100%; + } + } + + &-categories { + display: block; + padding: 0; + } + + &-category { + padding: 10px 0; + } + } +} + +@media screen and (min-width: 1024px) { + .cm { + &--topwidemenu { + .cm-header { + max-width: 100%; + } + } + + &-closer { + display: block; + float: right; + margin-right: 9px; + } + } +} + +$header-icon-size: 20px; + +.cm-standardmenu { + width: 100%; + display: flex; + flex-shrink: 1; + flex-wrap: wrap; + + .app-menu-main { + display: flex; + flex-wrap: nowrap; + + .app-menu-entry { + width: 50px; + height: 50px; + position: relative; + display: flex; + + &.app-menu-entry__active { + opacity: 1; + + &::before { + content: ' '; + position: absolute; + pointer-events: none; + border-bottom-color: var(--color-main-background); + transform: translateX(-50%); + width: 12px; + height: 5px; + border-radius: 3px; + background-color: var(--color-primary-text); + left: 50%; + bottom: 6px; + display: block; + transition: all 0.1s ease-in-out; + opacity: 1; + } + + .app-menu-entry--label { + font-weight: bold; + } + } + + a { + width: calc(100% - 4px); + height: calc(100% - 4px); + margin: 2px; + color: var(--color-primary-text); + position: relative; + } + + img { + transition: margin 0.1s ease-in-out; + width: $header-icon-size; + height: $header-icon-size; + padding: calc((100% - $header-icon-size) / 2); + box-sizing: content-box; + filter: var(--background-image-invert-if-bright, var(--primary-invert-if-bright)); + } + + .app-menu-entry--label { + opacity: 0; + position: absolute; + font-size: 12px; + color: var(--color-primary-text); + text-align: center; + left: 50%; + top: 45%; + display: block; + min-width: 100%; + transform: translateX(-50%); + transition: all 0.1s ease-in-out; + width: 100%; + text-overflow: ellipsis; + overflow: hidden; + letter-spacing: -0.5px; + } + + &:not(.app-menu-entry__hidden-label):not(.app-menu-entry__show-hovered):hover, + &:not(.app-menu-entry__hidden-label):not(.app-menu-entry__show-hovered):focus-within { + opacity: 1; + .app-menu-entry--label { + opacity: 1; + font-weight: bolder; + bottom: 0; + width: 100%; + text-overflow: ellipsis; + overflow: hidden; + } + } + } + + // Show labels + &:hover, + &:focus-within, + .app-menu-entry:hover, + .app-menu-entry:focus { + opacity: 1; + } + + &:not(.app-menu-main__hidden-label):not(.app-menu-main__show-hovered):hover, + &:not(.app-menu-main__hidden-label):not(.app-menu-main__show-hovered):focus-within, + .app-menu-entry:not(.app-menu-entry__hidden-label):hover, + .app-menu-entry:not(.app-menu-entry__hidden-label):focus { + opacity: 1; + + img { + margin-top: -8px; + } + + .app-menu-entry--label { + opacity: 1; + bottom: 0; + } + + &::before, + .app-menu-entry::before { + opacity: 0; + } + } + + &.app-menu-main__show-hovered .app-menu-entry:hover, + &.app-menu-main__show-hovered .app-menu-entry:focus { + img { + margin-top: -8px; + } + + .app-menu-entry--label { + opacity: 1; + bottom: 0; + } + + &::before, + .app-menu-entry::before { + opacity: 0; + } + } + } + + .app-menu-more .button-vue--vue-tertiary { + opacity: 0.7; + margin: 8px 3px 3px 3px; + filter: var(--background-image-invert-if-bright, var(--primary-invert-if-bright)); + + &:not([aria-expanded='true']) { + color: var(--color-main-text); + + &:hover { + opacity: 1; + background-color: transparent !important; + } + } + + &:focus-visible { + opacity: 1; + outline: none !important; + } + } + + &-app-menu-popover-entry { + .app-icon { + position: relative; + height: 35px; + width: 40px; + display: flex; + align-items: center; + justify-content: center; + filter: var(--background-invert-if-bright, var(--primary-invert-if-bright)); + + &.has-unread::after { + background-color: var(--color-main-text); + } + + img { + width: $header-icon-size; + height: $header-icon-size; + } + } + } + + .has-unread::after { + content: ''; + width: 8px; + height: 8px; + background-color: var(--color-primary-element-text); + border-radius: 50%; + position: absolute; + display: block; + top: 10px; + right: 10px; + } + + .unread-counter { + display: none; + } +} diff --git a/src/store/config.js b/src/store/config.js new file mode 100644 index 0000000..65540be --- /dev/null +++ b/src/store/config.js @@ -0,0 +1,56 @@ +/** + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { defineStore } from 'pinia' +import axios from '@nextcloud/axios' +import { generateUrl } from '@nextcloud/router' + +export const useConfigStore = defineStore('config', () => { + let config = null + let appConfig = null + let userConfig = null + + async function getConfig() { + if (config === null) { + config = await axios.get(generateUrl('/apps/side_menu/js/config')).then((response) => response.data) + } + + return config + } + + async function getAppConfig() { + if (appConfig === null) { + appConfig = await axios.get(generateUrl('/apps/side_menu/admin/config')).then((response) => response.data) + } + + return appConfig + } + + async function getUserConfig() { + if (userConfig === null) { + userConfig = await axios.get(generateUrl('/apps/side_menu/user/config')).then((response) => response.data) + } + + return userConfig + } + + return { + getConfig, + getAppConfig, + getUserConfig, + } +}) diff --git a/src/store/nav.js b/src/store/nav.js new file mode 100644 index 0000000..98abe0d --- /dev/null +++ b/src/store/nav.js @@ -0,0 +1,63 @@ +/** + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { defineStore } from 'pinia' +import axios from '@nextcloud/axios' +import { generateUrl, generateOcsUrl } from '@nextcloud/router' + +export const useNavStore = defineStore('nav', () => { + let categories = null + let apps = null + let coreApps = null + + async function getApps() { + if (apps === null) { + apps = [] + const cats = await getCategories() + + cats.forEach((category) => { + Object.values(category.apps).forEach((app) => { + apps.push(app) + }) + }) + } + + return apps + } + + async function getCoreApps() { + if (coreApps == null) { + coreApps = await await axios.get(generateUrl('/apps/side_menu/core/apps')).then((response) => response.data.items) + } + + return coreApps + } + + async function getCategories() { + if (categories === null) { + categories = await axios.get(generateUrl('/apps/side_menu/nav/items')).then((response) => response.data.items) + } + + return categories + } + + return { + getApps, + getCoreApps, + getCategories, + } +}) diff --git a/src/user.js b/src/user.js new file mode 100644 index 0000000..0147a7c --- /dev/null +++ b/src/user.js @@ -0,0 +1,34 @@ +/** + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import './scss/admin.scss' + +import '@formatjs/intl-segmenter/polyfill.js' + +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import { waitContainer } from './lib/dom.js' + +import UserSettings from './pages/UserSettings' + +waitContainer('#side-menu-user-settings').then((selector) => { + const pinia = createPinia() + const app = createApp(UserSettings) + app.use(pinia) + app.mixin({ methods: { t, n } }) + app.mount(selector) +}) diff --git a/templates/css/stylesheet.php b/templates/css/stylesheet.php index c7eb453..5bdc08b 100644 --- a/templates/css/stylesheet.php +++ b/templates/css/stylesheet.php @@ -1,127 +1,124 @@ + $value) { + echo sprintf( + "--side-menu-%s: %s;\n", + $key, + 'opener' === $key + ? sprintf('url("%s")', image_path('side_menu', $value.'.svg')) + : $value + ); + } +} +?> + :root { - $value): ?> - - --side-menu-: url(''); - - --side-menu-: ; - - + } - - #appmenu { - display: none; +@media (prefers-color-scheme: light) { + :root { + } +} - #appmenu + nav { - display: none; - } - - .app-hidden { - opacity: 0; - } - +@media (prefers-color-scheme: dark) { + +} - +body[data-theme-dark], body[data-theme-dark-highcontrast] { + +} + +body[data-theme-light], body[data-theme-light-highcontrast] { + +} + + #nextcloud { + display: none !important; + } + + + + .cm-apps { + + width: 55px; + + width: 52px; + + } + + .cm .cm-opener { + + margin-left: 1px; + + margin-left: 0px; + + } + + + + .cm-app-icon { display: none; } - - - - .side-menu-logo { - display: none; - } - - .side-menu-header { - height: 50px; - } - - .side-menu-apps-list { - height: calc(100vh - 49px); - top: 49px; - } - - #side-menu.hide-opener .side-menu-header .side-menu-opener.side-menu-closer - { - visibility: hidden; - } - - #side-menu.hide-opener.side-menu-with-categories .side-menu-search - { - float: none; - } - - - #side-menu, .side-menu-apps-list { - - width: 55px; - - width: 52px; - - } - - #side-menu .side-menu-opener { - - margin-left: 1px; - - margin-left: 0px; - - } - - - - - .side-menu-app-icon { - display: none; - } - - .side-menu-app-icon svg { + + .cm-app-icon svg { width: 15px; height: 15px; } - img.side-menu-app-icon { + img.cm-app-icon { width: 15px; height: 15px; } - - .side-menu-app-icon svg { + + .cm-app a { + padding-left: 16px !important; + } + + .cm-app-icon svg { width: 20px; height: 20px; } - img.side-menu-app-icon { + img.cm-app-icon { width: 20px; height: 20px; } - - .side-menu-app-icon svg { + + .cm-app-icon svg { width: 23px; height: 23px; } - img.side-menu-app-icon { + img.cm-app-icon { width: 23px; height: 23px; } - - - .side-menu-app-text { + .cm-app a { + padding-left: 11px !important; + } + + + + .cm-app-text { display: none; } - - .side-menu-app-text { + + .cm-app-text { font-size: 12px; } - - .side-menu-app-text { + + .cm-app-text { font-size: 16px; } - + - + #content { left: 53px; width: calc(100% - (var(--body-container-margin) * 2) - 62px); @@ -131,4 +128,4 @@ width: calc(100% - (var(--body-container-margin) * 2) - 60px); margin-left: 11px; } - + diff --git a/templates/js/script.php b/templates/js/script.php deleted file mode 100644 index 27e1273..0000000 --- a/templates/js/script.php +++ /dev/null @@ -1,188 +0,0 @@ - - -(function() { - const sideMenuContainer = SMcreateElement('div', {id: 'side-menu-container'}) - const sideMenuOpener = SMcreateElement('button', {'class': 'side-menu-opener'}) - const sideMenu = SMcreateElement('div', {id: 'side-menu'}) - - const body = document.querySelector('body') - const html = document.querySelector('html') - const nextcloud = document.querySelector('#nextcloud') - - const isTouchDevice = window.matchMedia("(pointer: coarse)").matches - - window.targetBlankApps = - window.topMenuApps = - window.topSideMenuApps = - window.menuAppsOrder = - window.topMenuAppsMouseOverHiddenLabel = - - - sideMenu.setAttribute('data-bigmenu', '1') - - sideMenu.setAttribute('data-sidewithcategories', '1') - - - document.querySelector('body').addEventListener('side-menu.apps', (e) => { - const apps = e.detail.apps; - - - const sideMenu = document.querySelector('#side-menu') - - if (apps.length === 0) { - sideMenu.classList.remove('open') - sideMenu.classList.add('hide') - sideMenuOpener.classList.add('hide') - } else { - sideMenu.classList.remove('hide') - sideMenuOpener.classList.remove('hide') - } - - - if (apps.length === 0) { - html.classList.remove('side-menu-always-displayed') - } else { - html.classList.add('side-menu-always-displayed') - } - - - - if (apps.length === 0) { - html.classList.remove('side-menu-always-displayed') - } else { - html.classList.add('side-menu-always-displayed') - } - - - }) - - body.addEventListener('side-menu.ready', () => { - const sideMenu = document.querySelector('#side-menu') - const headerMenuOpener = document.querySelector('#header .side-menu-opener') - const sideMenuOpener = document.querySelectorAll('#side-menu .side-menu-opener') - - if (!headerMenuOpener) { - return - } - - sideMenuFocus = () => { - let a = document.querySelector('.side-menu-app.active a', sideMenu) - - if (!a) { - return - } - - if (a.length === 0) { - a = sideMenu.querySelector('.side-menu-app:first-child a') - } - - if (a.length > 0) { - a.focus() - } - } - - - const sideMenuMouseLeave = () => { - sideMenu.classList.remove('open') - sideMenu.removeEventListener('mouseleave', sideMenuMouseLeave) - } - - const sideMenuMouseEnter = () => { - sideMenu.addEventListener('mouseleave', sideMenuMouseLeave) - } - - const sideMenuOpenerMouseEnter = () => { - sideMenu.classList.add('open') - sideMenu.addEventListener('mouseenter', sideMenuMouseEnter) - - sideMenuFocus() - } - - if (!isTouchDevice) { - - headerMenuOpener.addEventListener('mouseenter', sideMenuOpenerMouseEnter) - - sideMenu.classList.add('hide-opener') - - - sideMenu.addEventListener('mouseleave', sideMenuMouseLeave) - sideMenu.addEventListener('mouseenter', sideMenuOpenerMouseEnter) - } - - - headerMenuOpener.addEventListener('click', () => { - sideMenu.classList.add('open') - - const a = sideMenu.querySelector('.side-menu-app.active a') - - if (a !== null) { - a.focus() - } - - headerMenuOpener.blur() - }) - - for (let opener of sideMenuOpener) { - opener.addEventListener('click', () => { - - sideMenu.classList.toggle('open') - - sideMenu.classList.remove('open') - - }) - } - - document.addEventListener('keydown', (e) => { - var key = e.key || e.keyCode - - if ((key === 'o' || key === 79) && e.ctrlKey === true) { - e.preventDefault() - - sideMenu.classList.toggle('open') - sideMenuFocus() - } - }) - - const sideMenuObserver = new MutationObserver((e) => { - if (body.getAttribute('id') !== 'body-settings') { - return - } - - body.classList.toggle('body-settings-side-menu', sideMenu.classList.contains('open')) - }) - - sideMenuObserver.observe(sideMenu, { - attributes: true, - attributeFilter: ['class'], - childList: false, - characterData: false - }) - }) - - body.appendChild(sideMenuContainer) - sideMenuContainer.appendChild(sideMenu) - - - PageLoader() - - - if (nextcloud) { - - nextcloud.parentNode.insertBefore(sideMenuOpener, nextcloud) - - nextcloud.parentNode.insertBefore(sideMenuOpener, nextcloud.nextSibling) - - } -})(); diff --git a/templates/settings/admin-form.php b/templates/settings/admin-form.php index c547405..9666f08 100644 --- a/templates/settings/admin-form.php +++ b/templates/settings/admin-form.php @@ -20,1130 +20,7 @@ use OCP\IURLGenerator; use OCP\IConfig; use OCA\SideMenu\AppInfo\Application; -vendor_script('side_menu', 'html5sortable.min'); -script('side_menu', 'admin'); -style('side_menu', 'admin'); - -$urlGenerator = \OC::$server[IURLGenerator::class]; -$cacheSize = floor(mb_strlen(\OC::$server[IConfig::class]->getAppValue(Application::APP_ID, 'cache-categories', ''), '8bit') / 1024); - -$choicesYesNo = [ - 'No' => '0', - 'Yes' => '1', -]; - -$choicesSizes = [ - 'Hidden' => 'hidden', - 'Small' => 'small', - 'Normal' => 'normal', - 'Big' => 'big', -]; - -$labelShowHideApps = 'Show and hide the list of applications'; -$labelReset = 'Reset to default'; -$labelDefault = 'Default'; -$labelWithCategories = 'With categories'; -$labelBigMenu = 'Big menu'; -$labelAlwaysDisplayed = 'Always displayed'; - +script('side_menu', 'side_menu-admin'); ?> -
-
-

- t('Panel')); ?> -

- - !$_['always-displayed'] && !$_['big-menu'] && !$_['side-with-categories'], - 'always-displayed' => $_['always-displayed'] && !$_['big-menu'] && !$_['side-with-categories'], - 'side-with-categories' => $_['side-with-categories'] && !$_['always-displayed'] && !$_['big-menu'], - 'big-menu' => $_['big-menu'] && !$_['always-displayed'] && !$_['side-with-categories'], - ]; - ?> - -
- -
-

- <?php p($l->t($labelDefault)); ?> -

- -
- -
-

- <?php p($l->t($labelWithCategories)); ?> -

- -
- -
-

- <?php p($l->t($labelBigMenu)); ?> -

- -
- -
-

t('Not compatible with touch screens.')); ?>

-

- <?php p($l->t($labelAlwaysDisplayed)); ?> -

- - - - -
- -
-

- t('Colors')); ?> - - t('Live preview')); ?> -

- -
- t($labelDefault)); ?> - t($labelWithCategories)); ?> - t($labelBigMenu)); ?> - t($labelAlwaysDisplayed)); ?> -
- -
-
-
- t('Background color')); ?> -
-
- - - -
-
- - t('Transparent')); ?> - - - - - - t('Opaque')); ?> - -
-
- -
-
- -
-
-
- t('Background color of current app')); ?> -
-
- - -
-
-
-
- -
-
-
- t('Text color')); ?> -
-
- - -
-
-
-
- -
-
-
- t('Loader')); ?> -
-
- - -
-
-
-
- -
-
-
- t('Icon')); ?> -
-
-
- - t('Same color')); ?> - - - - - - t('Opposite color')); ?> - -
- -
- - t('Transparent')); ?> - - - - - - t('Opaque')); ?> - -
-
-
-
- -
- 'side-menu-opener', - 'Default (dark)' => 'side-menu-opener-dark', - 'Hamburger' => 'side-menu-opener-hamburger', - 'Hamburger (dark)' => 'side-menu-opener-hamburger-dark', - 'Hamburger 2' => 'side-menu-opener-hamburger-2', - 'Hamburger 2 (dark)' => 'side-menu-opener-hamburger-2-dark', - ]; - ?> -
-
- t('Icon')); ?> -
-
- -
-
-
- -

- t('Dark mode colors')); ?> -

- -
- t($labelDefault)); ?> - t($labelWithCategories)); ?> - t($labelBigMenu)); ?> - t($labelAlwaysDisplayed)); ?> -
- -

- t('This parameters are used when Dark theme or Breeze Dark Theme are enabled.'); ?> -

- -
-
-
- t('Background color')); ?> -
-
- - - -
- -
- - t('Transparent')); ?> - - - - - - t('Opaque')); ?> - -
-
-
-
- -
-
-
- t('Background color of current app')); ?> -
-
- - -
-
-
-
- -
-
-
- t('Text color')); ?> -
-
- - -
-
-
-
- -
-
-
- t('Loader')); ?> -
-
- - -
-
-
-
- -
-
-
- t('Icon')); ?> -
-
-
- - t('Same color')); ?> - - - - - - t('Opposite color')); ?> - -
- -
- - t('Transparent')); ?> - - - - - - t('Opaque')); ?> - -
-
-
-
- -
- 'side-menu-opener', - 'Default (dark)' => 'side-menu-opener-dark', - 'Hamburger' => 'side-menu-opener-hamburger', - 'Hamburger (dark)' => 'side-menu-opener-hamburger-dark', - 'Hamburger 2' => 'side-menu-opener-hamburger-2', - 'Hamburger 2 (dark)' => 'side-menu-opener-hamburger-2-dark', - ]; - ?> -
-
- t('Icon')); ?> -
-
- -
-
-
-
- -
-

- t('Opener')); ?> -

- -
- t($labelDefault)); ?> - t($labelWithCategories)); ?> - t($labelBigMenu)); ?> - t($labelAlwaysDisplayed)); ?> -
- -
-
- 'before', - 'After the logo' => 'after', - ]; - ?> -
- t('Position')); ?> -
-
- -
-
- -
-
- t('Show only the opener (hidden logo)')); ?> -
-
- -
-
- -
-
- t('Do not display the side menu and the opener if there is no application (eg: public pages).')); ?> -
-
- -
-
- -
-
- t('Open the menu when the mouse is hover the opener (automatically disabled on touch screens)')); ?> - -
- t('This is the automatic behavior when the menu is always displayed.')); ?> -
-
- -
-
-
-
- -
-
-
-
- t('Display the logo')); ?> - -
- t($labelDefault)); ?> -
-
-
- -
-
- -
-
- t('Use the avatar instead of the logo')); ?> - -
- t($labelDefault)); ?> -
-
-
- -
-
- -
-
- t('The logo is a link to the default app')); ?> - -
- t($labelDefault)); ?> -
-
-
- -
-
- -
-
- t('Apps that should not be displayed in the menu')); ?> - -
- t($labelDefault)); ?> - t($labelWithCategories)); ?> - t($labelBigMenu)); ?> - t($labelAlwaysDisplayed)); ?> -
-
-
- - 🖱️ t($labelShowHideApps)); ?> - - - -
-
- -
-
- t('Show the link to settings')); ?> -
-
- -
-
- -
-
- t('Icons and texts')); ?> -
-
- - - -
-
- -
-
- t('Open apps in new tab')); ?> -
-
- - 🖱️ t($labelShowHideApps)); ?> - - - -
-
- -
-
- t('Loader enabled')); ?> -
-
- -
-
-
-
- -
-

- t('Top menu')); ?> -

- -
- t($labelDefault)); ?> - t($labelWithCategories)); ?> - t($labelBigMenu)); ?> - t($labelAlwaysDisplayed)); ?> -
- -
-
-
- t('Applications kept in the top menu')); ?> -
-
- - 🖱️ t($labelShowHideApps)); ?> - - - -
-
- -
-
- t('Applications kept in the top menu but also shown in side menu')); ?> -
- t('These applications must be selected in the previous option.')); ?> -
-
- - 🖱️ t($labelShowHideApps)); ?> - - - -
-
-
-
- t('Hide labels on mouse over')); ?> -
- '2'] - ); - ?> -
- -
-
-
-
- -
-

- t('Applications')); ?> -

- -
- t($labelDefault)); ?> - t($labelWithCategories)); ?> - t($labelBigMenu)); ?> - t($labelAlwaysDisplayed)); ?> -
- -
-
-
- t('Customize sorting')); ?> -
-
- - 🖱️ t($labelShowHideApps)); ?> - - -
- - - - ' name="apps-order" class="side-menu-setting" id="side-menu-apps-order"> -
-
-
-
- - -
-

- t('Categories')); ?> -

- -
- t($labelWithCategories)); ?> - t($labelBigMenu)); ?> -
- -
-
- 'default', - 'Customed' => 'custom', - ]; - ?> -
- t('Order by')); ?> -
-
- -
-
- -
-
- t('Custom categories')); ?> -
-
- - -
-
-
-
- -
-
- t('Customize application categories')); ?> -
-
- - 🖱️ t($labelShowHideApps)); ?> - - - - - -
-
- -
-
- t('Customize sorting')); ?> -
-
- - 🖱️ t('Show and hide the list of categories')); ?> - - - - - ' name="categories-order" class="side-menu-setting"> -
-
-
-
- -
-

- t('Tips')); ?> -

- -
- t($labelDefault)); ?> - t($labelWithCategories)); ?> - t($labelBigMenu)); ?> - t($labelAlwaysDisplayed)); ?> -
- -

- t('Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.'); ?> -

-
- -
-
-
-
- t('The menu is enabled by default for users')); ?> -
- t('Except when the configuration is forced.')); ?> -
-
- -
-
- -
-
- t('Force this configuration to users')); ?> -
-
- -
-
-
- - -
- -
- - - - - - - - - - -
- -
- - t('You like this app and you want to support me?')); ?> - - - - - -
-
-
+
diff --git a/templates/settings/personal-form.php b/templates/settings/personal-form.php index e49f8a7..e2ff8e4 100644 --- a/templates/settings/personal-form.php +++ b/templates/settings/personal-form.php @@ -16,250 +16,11 @@ * along with this program. If not, see . */ -vendor_script('side_menu', 'html5sortable.min'); -script('side_menu', 'admin'); -style('side_menu', 'admin'); +use OCP\IURLGenerator; +use OCP\IConfig; +use OCA\SideMenu\AppInfo\Application; -$choicesYesNo = [ - 'No' => '0', - 'Yes' => '1', -]; - - -$labelShowHideApps = 'Show and hide the list of applications'; -$labelReset = 'Reset to default'; +script('side_menu', 'side_menu-user'); ?> -
- -
-

- t('Menu')); ?> -

-

- t('You do not have permission to change the settings.'); ?> -

-
- -
-

- t('Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.'); ?> -

- -
-
-
- t('Enable the custom menu')); ?> -
-
- -
-
-
- -
-
-
- t('Open apps in new tab')); ?> -
-
- '1', - 'Use my selection' => '2', - ]; ?> - - - -

- - 🖱️ t($labelShowHideApps)); ?> - -

- - -
-
-
-
- -
-

- t('Top menu')); ?> -

- -
-
-
- t('Applications kept in the top menu')); ?> -

- - t('If there is no selection then the global configuration is applied.')); ?> - -

-
-
-

- - 🖱️ t($labelShowHideApps)); ?> - -

- - -
-
-
- -
-
-
- t('Applications kept in the top menu but also shown in side menu')); ?> -

- - t('These applications must be selected in the previous option.')); ?>
- t('If there is no selection then the global configuration is applied.')); ?> -
-

-
-
-

- - 🖱️ t($labelShowHideApps)); ?> - -

- - -
-
-
-
-
-

- t('Applications')); ?> -

- -
-
-
- t('Customize sorting')); ?> -
-
- - 🖱️ t($labelShowHideApps)); ?> - - -
- - - - ' name="apps-order" class="side-menu-setting" id="side-menu-apps-order" data-personal> -
-
-
-
- - -
- - - - - -
- - -
- - t('You like this app and you want to support me?')); ?> - - - - - -
-
-
+
diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..0c16d61 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,97 @@ +const path = require('path') +const webpack = require('webpack') +const { VueLoaderPlugin } = require('vue-loader') + +const rules = require('./webpack.rules.js') +const NodePolyfillPlugin = require('node-polyfill-webpack-plugin') +const TerserPlugin = require('terser-webpack-plugin') + +const appName = 'side_menu' +const buildMode = process.env.NODE_ENV +const isDev = buildMode === 'development' + +module.exports = { + target: 'web', + mode: buildMode, + devtool: false, + entry: { + menu: path.resolve(path.join('src', 'menu.js')), + admin: path.resolve(path.join('src', 'admin.js')), + user: path.resolve(path.join('src', 'user.js')), + }, + output: { + path: path.resolve('./js'), + publicPath: path.join('/apps/', appName, '/js/'), + + // Output file names + filename: `${appName}-[name].js?v=[contenthash]`, + chunkFilename: `${appName}-[name].js?v=[contenthash]`, + + // Clean output before each build + clean: true, + }, + + optimization: { + chunkIds: 'named', + splitChunks: { + automaticNameDelimiter: '-', + minSize: 10000, + maxSize: 250000, + }, + minimize: !isDev, + minimizer: [ + new TerserPlugin({ + terserOptions: { + output: { + comments: false, + } + }, + extractComments: true, + }), + ], + }, + + module: { + rules: Object.values(rules), + }, + + plugins: [ + new VueLoaderPlugin(), + + // Make sure we auto-inject node polyfills on demand + // https://webpack.js.org/blog/2020-10-10-webpack-5-release/#automatic-nodejs-polyfills-removed + new NodePolyfillPlugin({ + // Console is available in the web-browser + excludeAliases: ['console'], + }), + + // @nextcloud/moment since v1.3.0 uses `moment/min/moment-with-locales.js` + // Which works only in Node.js and is not compatible with Webpack bundling + // It has an unused function `localLocale` that requires locales by invalid relative path `./locale` + // Though it is not used, Webpack tries to resolve it with `require.context` and fails + new webpack.IgnorePlugin({ + resourceRegExp: /^\.[/\\]locale$/, + contextRegExp: /moment[/\\]min$/, + }), + + new webpack.ProvidePlugin({ + Buffer: ['buffer', 'Buffer'], + }), + + new webpack.DefinePlugin({ + appName: JSON.stringify(appName), + }), + ], + + resolve: { + extensions: ['.*', '.mjs', '.js', '.vue'], + symlinks: false, + // Ensure npm does not duplicate vue dependency, and that npm link works for vue 3 + // See https://github.com/vuejs/core/issues/1503 + // See https://github.com/nextcloud/nextcloud-vue/issues/3281 + alias: { + 'vue$': path.resolve('./node_modules/vue') + }, + }, +} + diff --git a/webpack.js b/webpack.js deleted file mode 100644 index 6e3eac8..0000000 --- a/webpack.js +++ /dev/null @@ -1,54 +0,0 @@ -const path = require('path') -const { VueLoaderPlugin } = require('vue-loader') -const StyleLintPlugin = require('stylelint-webpack-plugin') - -module.exports = { - devtool: "source-map", - entry: { - 'admin': path.join(__dirname, 'src', 'admin.js'), - 'sideMenu': path.join(__dirname, 'src', 'SideMenu.js'), - }, - output: { - path: path.resolve(__dirname, './js'), - publicPath: '/js', - filename: '[name].js?v=[hash]', - chunkFilename: 'chunks/[name]-[hash].js', - }, - module: { - rules: [ - { - test: /\.css$/, - use: ['vue-style-loader', 'css-loader'], - }, - { - test: /\.scss$/, - use: ['vue-style-loader', 'css-loader', 'sass-loader'], - }, - { - test: /\.vue$/, - loader: 'vue-loader', - }, - { - test: /\.js$/, - loader: 'babel-loader', - exclude: /node_modules/, - }, - { - test: /\.(png|jpg|gif|svg)$/, - loader: 'url-loader', - options: { - name: '[name].[ext]?[hash]', - limit: 8192, - }, - }, - ], - }, - plugins: [ - new VueLoaderPlugin(), - new StyleLintPlugin(), - ], - resolve: { - extensions: ['*', '.js', '.vue'], - symlinks: false, - }, -} diff --git a/webpack.rules.js b/webpack.rules.js new file mode 100644 index 0000000..4314a8f --- /dev/null +++ b/webpack.rules.js @@ -0,0 +1,23 @@ +module.exports = { + scss: { + test: /\.scss$/, + use: ['style-loader', 'css-loader', 'sass-loader'], + }, + css: { + test: /\.css$/, + use: ['style-loader', 'css-loader'], + }, + vue: { + test: /\.vue$/, + loader: 'vue-loader', + }, + js: { + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/, + }, + assets: { + test: /\.(png|jpe?g|gif|svg|woff2?|eot|ttf)$/, + type: 'asset/inline', + }, +}