From 84ab6446ea483c09a995eaef842a94ba9aa8f4ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Tue, 26 Nov 2024 13:31:29 +0100 Subject: [PATCH] wip: continue implementation --- .ddev/config.yaml | 2 +- .gitignore | 11 +- assets/app.js | 15 +- assets/bootstrap.js | 17 +- .../controllers/availabilities_controller.js | 5 + .../controllers/select_toggle_controller.js | 21 + assets/controllers/toggle_controller.js | 39 + assets/fonts/lato-v24-latin-700.woff2 | Bin 0 -> 23040 bytes assets/fonts/lato-v24-latin-900.woff2 | Bin 0 -> 22504 bytes assets/fonts/lato-v24-latin-italic.woff2 | Bin 0 -> 24408 bytes assets/fonts/lato-v24-latin-regular.woff2 | Bin 0 -> 23580 bytes assets/images/.gitignore | 0 assets/images/icons.svg | 236 + assets/images/logo.svg | 1 + assets/styles/_base.css | 42 + assets/styles/_components.css | 5 + assets/styles/app.css | 24 +- assets/styles/components/button.css | 16 + assets/styles/components/forms.css | 4 + assets/styles/components/menu.css | 12 + assets/styles/components/toast.css | 20 + assets/styles/components/tooltip.css | 18 + composer.json | 15 +- composer.lock | 536 +- config/bundles.php | 2 + config/packages/asset_mapper.yaml | 11 - config/packages/webpack_encore.yaml | 45 + config/services.yaml | 14 +- importmap.php | 35 - package-lock.json | 6966 +++++++++++++++++ package.json | 31 + postcss.config.js | 7 + public/.htaccess | 70 + public/apple-touch-icon.png | Bin 0 -> 6204 bytes public/favicon.ico | Bin 0 -> 15406 bytes public/icon-192.png | Bin 0 -> 6454 bytes public/icon-512.png | Bin 0 -> 15636 bytes public/icon.svg | 1 + public/site.webmanifest | 6 + src/BusProNet/ApiClient.php | 23 +- .../AvailabilitiesResponseParser.php | 3 +- .../BookingResponseParser.php | 11 +- .../BookingUpdateResponseParser.php | 3 +- .../BookingsResponseParser.php | 4 +- .../CrmAttributesResponseParser.php | 5 +- .../MutableDataResponseParser.php | 3 +- .../PersonalDataResponseParser.php | 34 +- .../ApiResponseParser/ResponseParser.php | 1 + .../DataLoader/AbstractDataLoader.php | 4 +- src/BusProNet/DataLoader/TravelDataLoader.php | 89 +- src/BusProNet/Model/Booking.php | 1 + src/BusProNet/Model/Communication.php | 2 + src/BusProNet/Model/PersonalData.php | 5 + src/BusProNet/Model/Service.php | 4 + ...arserTrait.php => TypeConversionTrait.php} | 21 +- src/Controller/Booking/EditController.php | 22 +- src/Controller/Booking/IndexController.php | 16 +- src/Controller/IndexController.php | 18 + src/Controller/PersonalDataController.php | 29 +- src/Controller/SecurityController.php | 2 +- src/EventListener/LogoutListener.php | 21 + src/Form/BookingType.php | 34 +- src/Form/ParticipantType.php | 298 +- src/Form/PersonalDataType.php | 6 +- src/Menu/MenuBuilder.php | 49 + src/Twig/AppExtension.php | 26 + src/Twig/AppRuntime.php | 50 + symfony.lock | 36 +- tailwind.config.js | 33 + templates/_partials/_alert.html.twig | 12 + templates/_partials/_flashes.html.twig | 9 + templates/_partials/_spinner.html.twig | 37 + templates/base.html.twig | 14 +- templates/booking/edit.html.twig | 291 +- templates/booking/index.html.twig | 126 +- templates/forms.html.twig | 175 +- templates/index/index.html.twig | 7 + templates/layout.html.twig | 73 +- templates/personal_data/index.html.twig | 74 +- templates/security/login.html.twig | 97 +- webpack.config.js | 30 + 81 files changed, 9127 insertions(+), 898 deletions(-) create mode 100644 assets/controllers/availabilities_controller.js create mode 100644 assets/controllers/select_toggle_controller.js create mode 100644 assets/controllers/toggle_controller.js create mode 100644 assets/fonts/lato-v24-latin-700.woff2 create mode 100644 assets/fonts/lato-v24-latin-900.woff2 create mode 100644 assets/fonts/lato-v24-latin-italic.woff2 create mode 100644 assets/fonts/lato-v24-latin-regular.woff2 create mode 100644 assets/images/.gitignore create mode 100644 assets/images/icons.svg create mode 100644 assets/images/logo.svg create mode 100644 assets/styles/_base.css create mode 100644 assets/styles/_components.css create mode 100644 assets/styles/components/button.css create mode 100644 assets/styles/components/forms.css create mode 100644 assets/styles/components/menu.css create mode 100644 assets/styles/components/toast.css create mode 100644 assets/styles/components/tooltip.css delete mode 100644 config/packages/asset_mapper.yaml create mode 100644 config/packages/webpack_encore.yaml delete mode 100644 importmap.php create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/.htaccess create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon.ico create mode 100644 public/icon-192.png create mode 100644 public/icon-512.png create mode 100644 public/icon.svg create mode 100644 public/site.webmanifest rename src/BusProNet/{ApiResponseParser/ResponseParserTrait.php => TypeConversionTrait.php} (80%) create mode 100644 src/Controller/IndexController.php create mode 100644 src/EventListener/LogoutListener.php create mode 100644 src/Menu/MenuBuilder.php create mode 100644 src/Twig/AppExtension.php create mode 100644 src/Twig/AppRuntime.php create mode 100644 tailwind.config.js create mode 100644 templates/_partials/_alert.html.twig create mode 100644 templates/_partials/_flashes.html.twig create mode 100644 templates/_partials/_spinner.html.twig create mode 100644 templates/index/index.html.twig create mode 100644 webpack.config.js diff --git a/.ddev/config.yaml b/.ddev/config.yaml index d43a783..9b428cf 100644 --- a/.ddev/config.yaml +++ b/.ddev/config.yaml @@ -2,7 +2,7 @@ name: myep-next type: php docroot: public php_version: "8.2" -webserver_type: nginx-fpm +webserver_type: apache-fpm xdebug_enabled: false additional_hostnames: [] additional_fqdns: [] diff --git a/.gitignore b/.gitignore index 4daae38..0f4cf97 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ - ###> symfony/framework-bundle ### /.env.local /.env.local.php @@ -19,7 +18,9 @@ /phpunit.xml ###< symfony/phpunit-bridge ### -###> symfony/asset-mapper ### -/public/assets/ -/assets/vendor/ -###< symfony/asset-mapper ### +###> symfony/webpack-encore-bundle ### +/node_modules/ +/public/build/ +npm-debug.log +yarn-error.log +###< symfony/webpack-encore-bundle ### diff --git a/assets/app.js b/assets/app.js index abdfea1..64dd602 100644 --- a/assets/app.js +++ b/assets/app.js @@ -1,9 +1,10 @@ import './bootstrap.js'; -/* - * Welcome to your app's main JavaScript file! - * - * This file will be included onto the page via the importmap() Twig function, - * which should already be in your base.html.twig. - */ -import '@picocss/pico'; import './styles/app.css'; + +import htmx from 'htmx.org' +window.htmx = htmx +htmx.config.includeIndicatorStyles = false +htmx.config.historyEnabled = false +htmx.config.historyCacheSize = 0 +htmx.config.allowScriptTags = false +htmx.config.withCredentials = true \ No newline at end of file diff --git a/assets/bootstrap.js b/assets/bootstrap.js index c3689da..8d4da7d 100644 --- a/assets/bootstrap.js +++ b/assets/bootstrap.js @@ -1,12 +1,7 @@ -import { startStimulusApp } from '@symfony/stimulus-bundle'; +import { startStimulusApp } from '@symfony/stimulus-bridge'; -const app = startStimulusApp(); -// register any custom, 3rd party controllers here -// app.register('some_controller_name', SomeImportedController); - -import htmx from 'htmx.org' -window.htmx = htmx -htmx.config.includeIndicatorStyles = false -htmx.config.historyEnabled = false -htmx.config.historyCacheSize = 0 -htmx.config.allowScriptTags = false +export const app = startStimulusApp(require.context( + '@symfony/stimulus-bridge/lazy-controller-loader!./controllers', + true, + /\.[jt]sx?$/ +)); diff --git a/assets/controllers/availabilities_controller.js b/assets/controllers/availabilities_controller.js new file mode 100644 index 0000000..e1ec9ed --- /dev/null +++ b/assets/controllers/availabilities_controller.js @@ -0,0 +1,5 @@ +import { Controller} from '@hotwired/stimulus' + +export default class extends Controller { + static targets = ['field'] +} \ No newline at end of file diff --git a/assets/controllers/select_toggle_controller.js b/assets/controllers/select_toggle_controller.js new file mode 100644 index 0000000..5ef3814 --- /dev/null +++ b/assets/controllers/select_toggle_controller.js @@ -0,0 +1,21 @@ +import { Controller } from '@hotwired/stimulus' + +export default class extends Controller { + + static classes = [ 'hidden' ] + static targets = [ 'container' ] + static values = { show: Array } + + toggle(event) { + let fieldType = event.target.type + let formValue = event.target.value + let showContainer + if ('checkbox' !== fieldType && 'radio' !== fieldType) { + showContainer = this.showValue.indexOf(formValue) !== -1 + } else { + let toggleValue = event.target.dataset.selectToggleValue + showContainer = true === event.target.checked && this.showValue.includes(toggleValue) + } + this.containerTarget.classList.toggle(this.hiddenClass, false === showContainer) + } +} diff --git a/assets/controllers/toggle_controller.js b/assets/controllers/toggle_controller.js new file mode 100644 index 0000000..3b6ed2a --- /dev/null +++ b/assets/controllers/toggle_controller.js @@ -0,0 +1,39 @@ +import { Controller } from '@hotwired/stimulus' + +export default class extends Controller { + + static classes = [ 'closed' ] + static targets = [ 'toggle', 'icon' ] + static values = { + open: { + type: Boolean, + default: true, + }, + } + + initialize() { + this.target = this.hasToggleTarget ? this.toggleTarget : this.element + } + + toggle() { + this.openValue = !this.openValue + } + + close() { + this.openValue = false + } + + open() { + this.openValue = true + } + + openValueChanged(open) { + this.target.classList.toggle(this.closedClass, false === open) + + if (false === this.hasIconTarget) { + return + } + + this.iconTarget.classList.toggle('rotate-90', true === open) + } +} diff --git a/assets/fonts/lato-v24-latin-700.woff2 b/assets/fonts/lato-v24-latin-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..11de83feaf0fb872c91fce89534fd4e2d8bbda28 GIT binary patch literal 23040 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/lato-v24-latin-900.woff2 b/assets/fonts/lato-v24-latin-900.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..72a9bc3041b39faf6e4765020dc940cb38a111ff GIT binary patch literal 22504 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/lato-v24-latin-italic.woff2 b/assets/fonts/lato-v24-latin-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..851630ff85699de633f37170f29cbadce3d322ab GIT binary patch literal 24408 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 QOFh<%JiLFgmWQ+r07g396aWAK literal 0 HcmV?d00001 diff --git a/assets/images/.gitignore b/assets/images/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/assets/images/icons.svg b/assets/images/icons.svg new file mode 100644 index 0000000..e43afb4 --- /dev/null +++ b/assets/images/icons.svg @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/images/logo.svg b/assets/images/logo.svg new file mode 100644 index 0000000..28f2394 --- /dev/null +++ b/assets/images/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/styles/_base.css b/assets/styles/_base.css new file mode 100644 index 0000000..878768c --- /dev/null +++ b/assets/styles/_base.css @@ -0,0 +1,42 @@ +/* lato-regular - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: 'Lato'; + font-style: normal; + font-weight: 400; + src: url('../fonts/lato-v24-latin-regular.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} +/* lato-italic - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: 'Lato'; + font-style: italic; + font-weight: 400; + src: url('../fonts/lato-v24-latin-italic.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} +/* lato-700 - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: 'Lato'; + font-style: normal; + font-weight: 700; + src: url('../fonts/lato-v24-latin-700.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} +/* lato-900 - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: 'Lato'; + font-style: normal; + font-weight: 900; + src: url('../fonts/lato-v24-latin-900.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} + +.htmx-indicator{ + @apply invisible; +} +.htmx-request .htmx-indicator{ + @apply visible; +} +.htmx-request.htmx-indicator{ + @apply visible; +} diff --git a/assets/styles/_components.css b/assets/styles/_components.css new file mode 100644 index 0000000..6daa433 --- /dev/null +++ b/assets/styles/_components.css @@ -0,0 +1,5 @@ +@import "components/forms.css"; +@import "components/button.css"; +@import "components/menu.css"; +/*@import "components/toast.css";*/ +/*@import "components/tooltip.css";*/ \ No newline at end of file diff --git a/assets/styles/app.css b/assets/styles/app.css index a8fd427..aff375a 100644 --- a/assets/styles/app.css +++ b/assets/styles/app.css @@ -1,21 +1,7 @@ -#content { - position: relative; -} +@import "tailwindcss/base"; +@import "_base.css"; -#loading-indicator { - display: none; -} +@import "tailwindcss/components"; +@import "_components.css"; -#loading-indicator.htmx-request { - display: block; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: white; -} - -[disabled] { - cursor: not-allowed; -} \ No newline at end of file +@import "tailwindcss/utilities"; \ No newline at end of file diff --git a/assets/styles/components/button.css b/assets/styles/components/button.css new file mode 100644 index 0000000..426332a --- /dev/null +++ b/assets/styles/components/button.css @@ -0,0 +1,16 @@ +.btn { + @apply inline-flex space-x-1 justify-center rounded-lg text-sm uppercase font-semibold py-2.5 px-4; + @apply bg-primary text-white hover:bg-primary/80 shadow-md; +} + +.btn--small { + @apply text-xs py-1 px-2 rounded-md; +} + +.btn--secondary { + @apply bg-secondary text-gray-800 hover:bg-secondary/80; +} + +.btn--active { + @apply shadow-none; +} diff --git a/assets/styles/components/forms.css b/assets/styles/components/forms.css new file mode 100644 index 0000000..a9c95c5 --- /dev/null +++ b/assets/styles/components/forms.css @@ -0,0 +1,4 @@ +label.required:after { + @apply inline-block text-sm; + content: '*'; +} diff --git a/assets/styles/components/menu.css b/assets/styles/components/menu.css new file mode 100644 index 0000000..e6c9c53 --- /dev/null +++ b/assets/styles/components/menu.css @@ -0,0 +1,12 @@ +.menu--main { + @apply flex items-center space-x-2; +} + +.menu--main a { + @apply uppercase text-lg font-semibold pb-1 px-2 border-b-2 border-white; + @apply hover:border-primary; +} + +.menu--main .current a { + @apply border-primary; +} \ No newline at end of file diff --git a/assets/styles/components/toast.css b/assets/styles/components/toast.css new file mode 100644 index 0000000..b2ce158 --- /dev/null +++ b/assets/styles/components/toast.css @@ -0,0 +1,20 @@ +@import "toastify-js/src/toastify.css"; + +.toastify { + @apply shadow-lg rounded; +} + +.toastify--success { + @apply text-gray-100; + background: theme('colors.emerald.600'); +} + +.toastify--warning { + @apply text-gray-100; + background: theme('colors.red.600'); +} + +.toastify--info { + @apply text-gray-100; + background: theme('colors.blue.600'); +} diff --git a/assets/styles/components/tooltip.css b/assets/styles/components/tooltip.css new file mode 100644 index 0000000..4cd1f4c --- /dev/null +++ b/assets/styles/components/tooltip.css @@ -0,0 +1,18 @@ +@import "tippy.js/dist/tippy.css"; + +.tippy-box { + background-color: theme('colors.primary'); +} + +.tippy-box[data-placement^='top'] > .tippy-arrow::before { + border-top-color: theme('colors.primary'); +} +.tippy-box[data-placement^='bottom'] > .tippy-arrow::before { + border-bottom-color: theme('colors.primary'); +} +.tippy-box[data-placement^='left'] > .tippy-arrow::before { + border-left-color: theme('colors.primary'); +} +.tippy-box[data-placement^='right'] > .tippy-arrow::before { + border-right-color: theme('colors.primary'); +} diff --git a/composer.json b/composer.json index 16f8e93..6393085 100644 --- a/composer.json +++ b/composer.json @@ -12,12 +12,13 @@ "doctrine/doctrine-bundle": "^2.13", "doctrine/doctrine-migrations-bundle": "^3.3", "doctrine/orm": "^3.3", + "knplabs/knp-menu-bundle": "^3.4", "nelexa/zip": "^4.0", "nesbot/carbon": "^3.8", "phpdocumentor/reflection-docblock": "^5.6", "phpstan/phpdoc-parser": "^2.0", + "symfony/apache-pack": "^1.0", "symfony/asset": "6.4.*", - "symfony/asset-mapper": "6.4.*", "symfony/console": "6.4.*", "symfony/doctrine-messenger": "6.4.*", "symfony/dotenv": "6.4.*", @@ -44,9 +45,11 @@ "symfony/uid": "6.4.*", "symfony/validator": "6.4.*", "symfony/web-link": "6.4.*", + "symfony/webpack-encore-bundle": "^2.2", "symfony/yaml": "6.4.*", "twig/extra-bundle": "^2.12|^3.0", - "twig/intl-extra": "^3.13", + "twig/html-extra": "^3.15", + "twig/intl-extra": "*", "twig/twig": "^2.12|^3.0" }, "config": { @@ -79,8 +82,7 @@ "scripts": { "auto-scripts": { "cache:clear": "symfony-cmd", - "assets:install %PUBLIC_DIR%": "symfony-cmd", - "importmap:install": "symfony-cmd" + "assets:install %PUBLIC_DIR%": "symfony-cmd" }, "post-install-cmd": [ "@auto-scripts" @@ -94,8 +96,9 @@ }, "extra": { "symfony": { - "allow-contrib": false, - "require": "6.4.*" + "allow-contrib": true, + "require": "6.4.*", + "docker": true } }, "require-dev": { diff --git a/composer.lock b/composer.lock index e0c2599..bce3f82 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d79e5d8a80d5e98bfd3dadadc9b6182c", + "content-hash": "6960d43262b323bf7a4a4f757087bd3d", "packages": [ { "name": "carbonphp/carbon-doctrine-types", @@ -75,87 +75,6 @@ ], "time": "2023-12-11T17:09:12+00:00" }, - { - "name": "composer/semver", - "version": "3.4.3", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-09-19T14:15:21+00:00" - }, { "name": "doctrine/cache", "version": "2.2.0", @@ -497,16 +416,16 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.13.0", + "version": "2.13.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563" + "reference": "2740ad8b8739b39ab37d409c972b092f632b025a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/ca59d84b8e63143ce1aed90cdb333ba329d71563", - "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/2740ad8b8739b39ab37d409c972b092f632b025a", + "reference": "2740ad8b8739b39ab37d409c972b092f632b025a", "shasum": "" }, "require": { @@ -520,7 +439,7 @@ "symfony/console": "^5.4 || ^6.0 || ^7.0", "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7 || ^7.0", + "symfony/doctrine-bridge": "^5.4.46 || ^6.4.3 || ^7.0.3", "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", "symfony/polyfill-php80": "^1.15", "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" @@ -597,7 +516,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.0" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.1" }, "funding": [ { @@ -613,7 +532,7 @@ "type": "tidelift" } ], - "time": "2024-09-01T09:46:40+00:00" + "time": "2024-11-08T23:27:54+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", @@ -1449,6 +1368,144 @@ ], "time": "2023-10-06T06:47:41+00:00" }, + { + "name": "knplabs/knp-menu", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/KnpMenu.git", + "reference": "c39403f7c427d1b72cc56f38df0a075b4b9191fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/KnpMenu/zipball/c39403f7c427d1b72cc56f38df0a075b4b9191fe", + "reference": "c39403f7c427d1b72cc56f38df0a075b4b9191fe", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "twig/twig": "<1.42.3 || >=2,<2.9" + }, + "require-dev": { + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.6", + "psr/container": "^1.0 || ^2.0", + "symfony/http-foundation": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^7.0", + "symfony/routing": "^5.4 || ^6.0 || ^7.0", + "twig/twig": "^2.16 || ^3.0" + }, + "suggest": { + "twig/twig": "for the TwigRenderer and the integration with your templates" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Menu\\": "src/Knp/Menu" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KnpLabs", + "homepage": "https://knplabs.com" + }, + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + }, + { + "name": "The Community", + "homepage": "https://github.com/KnpLabs/KnpMenu/contributors" + } + ], + "description": "An object oriented menu library", + "homepage": "https://knplabs.com", + "keywords": [ + "menu", + "tree" + ], + "support": { + "issues": "https://github.com/KnpLabs/KnpMenu/issues", + "source": "https://github.com/KnpLabs/KnpMenu/tree/v3.5.0" + }, + "time": "2024-03-23T15:35:09+00:00" + }, + { + "name": "knplabs/knp-menu-bundle", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/KnpLabs/KnpMenuBundle.git", + "reference": "6a1e3e1f4131f9a5a967e36717a1fe680c183637" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/KnpLabs/KnpMenuBundle/zipball/6a1e3e1f4131f9a5a967e36717a1fe680c183637", + "reference": "6a1e3e1f4131f9a5a967e36717a1fe680c183637", + "shasum": "" + }, + "require": { + "knplabs/knp-menu": "^3.3", + "php": "^8.1", + "symfony/deprecation-contracts": "^2.5 | ^3.3", + "symfony/framework-bundle": "^5.4 | ^6.0 | ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.5 | ^11.0.3", + "symfony/expression-language": "^5.4 | ^6.0 | ^7.0", + "symfony/phpunit-bridge": "^6.0 | ^7.0", + "symfony/templating": "^5.4 | ^6.0 | ^7.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Knp\\Bundle\\MenuBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Knplabs", + "homepage": "http://knplabs.com" + }, + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/KnpLabs/KnpMenuBundle/contributors" + } + ], + "description": "This bundle provides an integration of the KnpMenu library", + "keywords": [ + "menu" + ], + "support": { + "issues": "https://github.com/KnpLabs/KnpMenuBundle/issues", + "source": "https://github.com/KnpLabs/KnpMenuBundle/tree/v3.4.2" + }, + "time": "2024-06-03T08:48:36+00:00" + }, { "name": "monolog/monolog", "version": "3.8.0", @@ -2312,6 +2369,32 @@ }, "time": "2024-09-11T13:17:53+00:00" }, + { + "name": "symfony/apache-pack", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/apache-pack.git", + "reference": "3aa5818d73ad2551281fc58a75afd9ca82622e6c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/apache-pack/zipball/3aa5818d73ad2551281fc58a75afd9ca82622e6c", + "reference": "3aa5818d73ad2551281fc58a75afd9ca82622e6c", + "shasum": "" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for Apache support in Symfony", + "support": { + "issues": "https://github.com/symfony/apache-pack/issues", + "source": "https://github.com/symfony/apache-pack/tree/master" + }, + "time": "2017-12-12T01:46:35+00:00" + }, { "name": "symfony/asset", "version": "v6.4.13", @@ -2381,85 +2464,6 @@ ], "time": "2024-10-25T15:07:50+00:00" }, - { - "name": "symfony/asset-mapper", - "version": "v6.4.15", - "source": { - "type": "git", - "url": "https://github.com/symfony/asset-mapper.git", - "reference": "21fe29b637ddaada739d3d6cd55694a7b95d2343" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/21fe29b637ddaada739d3d6cd55694a7b95d2343", - "reference": "21fe29b637ddaada739d3d6cd55694a7b95d2343", - "shasum": "" - }, - "require": { - "composer/semver": "^3.0", - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/http-client": "^6.3|^7.0" - }, - "conflict": { - "symfony/framework-bundle": "<6.4" - }, - "require-dev": { - "symfony/asset": "^5.4|^6.0|^7.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher-contracts": "^3.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\AssetMapper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Maps directories of assets & makes them available in a public directory with versioned filenames.", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/asset-mapper/tree/v6.4.15" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-11-09T07:17:14+00:00" - }, { "name": "symfony/cache", "version": "v6.4.14", @@ -7568,6 +7572,78 @@ ], "time": "2024-09-25T14:18:03+00:00" }, + { + "name": "symfony/webpack-encore-bundle", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/webpack-encore-bundle.git", + "reference": "e335394b68a775a9b2bd173a8ba4fd2001f3870c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/e335394b68a775a9b2bd173a8ba4fd2001f3870c", + "reference": "e335394b68a775a9b2bd173a8ba4fd2001f3870c", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/asset": "^5.4 || ^6.2 || ^7.0", + "symfony/config": "^5.4 || ^6.2 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.2 || ^7.0", + "symfony/http-kernel": "^5.4 || ^6.2 || ^7.0", + "symfony/service-contracts": "^1.1.9 || ^2.1.3 || ^3.0" + }, + "require-dev": { + "symfony/framework-bundle": "^5.4 || ^6.2 || ^7.0", + "symfony/http-client": "^5.4 || ^6.2 || ^7.0", + "symfony/phpunit-bridge": "^5.4 || ^6.2 || ^7.0", + "symfony/twig-bundle": "^5.4 || ^6.2 || ^7.0", + "symfony/web-link": "^5.4 || ^6.2 || ^7.0" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "name": "symfony/webpack-encore", + "url": "https://github.com/symfony/webpack-encore" + } + }, + "autoload": { + "psr-4": { + "Symfony\\WebpackEncoreBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Integration of your Symfony app with Webpack Encore", + "support": { + "issues": "https://github.com/symfony/webpack-encore-bundle/issues", + "source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-02T07:27:19+00:00" + }, { "name": "symfony/yaml", "version": "v6.4.13", @@ -7642,23 +7718,23 @@ }, { "name": "twig/extra-bundle", - "version": "v3.13.0", + "version": "v3.15.0", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5" + "reference": "9746573ca4bc1cd03a767a183faadaf84e0c31fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/21a9a7aa9f79d4493bb6fed4eb2794339f9551f5", - "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/9746573ca4bc1cd03a767a183faadaf84e0c31fa", + "reference": "9746573ca4bc1cd03a767a183faadaf84e0c31fa", "shasum": "" }, "require": { "php": ">=8.0.2", "symfony/framework-bundle": "^5.4|^6.4|^7.0", "symfony/twig-bundle": "^5.4|^6.4|^7.0", - "twig/twig": "^3.0|^4.0" + "twig/twig": "^3.2|^4.0" }, "require-dev": { "league/commonmark": "^1.0|^2.0", @@ -7700,7 +7776,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.13.0" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.15.0" }, "funding": [ { @@ -7712,20 +7788,88 @@ "type": "tidelift" } ], - "time": "2024-09-01T20:39:12+00:00" + "time": "2024-09-26T19:22:23+00:00" }, { - "name": "twig/intl-extra", - "version": "v3.13.0", + "name": "twig/html-extra", + "version": "v3.15.0", "source": { "type": "git", - "url": "https://github.com/twigphp/intl-extra.git", - "reference": "1b8d78c5db08bdc61015fd55009d2e84b3aa7e38" + "url": "https://github.com/twigphp/html-extra.git", + "reference": "2086023d3ffc4bae2b1115f715d17f97fd013665" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/1b8d78c5db08bdc61015fd55009d2e84b3aa7e38", - "reference": "1b8d78c5db08bdc61015fd55009d2e84b3aa7e38", + "url": "https://api.github.com/repos/twigphp/html-extra/zipball/2086023d3ffc4bae2b1115f715d17f97fd013665", + "reference": "2086023d3ffc4bae2b1115f715d17f97fd013665", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/mime": "^5.4|^6.4|^7.0", + "twig/twig": "^3.13|^4.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Twig\\Extra\\Html\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Twig extension for HTML", + "homepage": "https://twig.symfony.com", + "keywords": [ + "html", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/html-extra/tree/v3.15.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2024-09-30T06:41:48+00:00" + }, + { + "name": "twig/intl-extra", + "version": "v3.15.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/intl-extra.git", + "reference": "92a127a58857597acc6eca2e34d5ef90057dcc59" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/92a127a58857597acc6eca2e34d5ef90057dcc59", + "reference": "92a127a58857597acc6eca2e34d5ef90057dcc59", "shasum": "" }, "require": { @@ -7764,7 +7908,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/intl-extra/tree/v3.13.0" + "source": "https://github.com/twigphp/intl-extra/tree/v3.15.0" }, "funding": [ { @@ -7776,20 +7920,20 @@ "type": "tidelift" } ], - "time": "2024-09-03T13:08:40+00:00" + "time": "2024-09-16T10:21:35+00:00" }, { "name": "twig/twig", - "version": "v3.14.2", + "version": "v3.15.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a" + "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a", - "reference": "0b6f9d8370bb3b7f1ce5313ed8feb0fafd6e399a", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/2d5b3964cc21d0188633d7ddce732dc8e874db02", + "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02", "shasum": "" }, "require": { @@ -7843,7 +7987,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.14.2" + "source": "https://github.com/twigphp/Twig/tree/v3.15.0" }, "funding": [ { @@ -7855,7 +7999,7 @@ "type": "tidelift" } ], - "time": "2024-11-07T12:36:22+00:00" + "time": "2024-11-17T15:59:19+00:00" }, { "name": "webmozart/assert", @@ -7919,16 +8063,16 @@ "packages-dev": [ { "name": "deployer/deployer", - "version": "v7.5.5", + "version": "v7.5.6", "source": { "type": "git", "url": "https://github.com/deployphp/deployer.git", - "reference": "1b37d639e0ffad980f6cc3873859b16de29ecad7" + "reference": "4f43595502870cd499a839c4ec676f58e70143c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/deployphp/deployer/zipball/1b37d639e0ffad980f6cc3873859b16de29ecad7", - "reference": "1b37d639e0ffad980f6cc3873859b16de29ecad7", + "url": "https://api.github.com/repos/deployphp/deployer/zipball/4f43595502870cd499a839c4ec676f58e70143c4", + "reference": "4f43595502870cd499a839c4ec676f58e70143c4", "shasum": "" }, "require": { @@ -7969,7 +8113,7 @@ "type": "github" } ], - "time": "2024-11-08T13:18:44+00:00" + "time": "2024-11-26T15:31:46+00:00" }, { "name": "masterminds/html5", @@ -10242,7 +10386,7 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, "platform": { @@ -10251,6 +10395,6 @@ "ext-iconv": "*", "ext-simplexml": "*" }, - "platform-dev": [], + "platform-dev": {}, "plugin-api-version": "2.6.0" } diff --git a/config/bundles.php b/config/bundles.php index 4f01efc..9bed32b 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -12,4 +12,6 @@ return [ Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], Symfony\UX\StimulusBundle\StimulusBundle::class => ['all' => true], + Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], + Knp\Bundle\MenuBundle\KnpMenuBundle::class => ['all' => true], ]; diff --git a/config/packages/asset_mapper.yaml b/config/packages/asset_mapper.yaml deleted file mode 100644 index f7653e9..0000000 --- a/config/packages/asset_mapper.yaml +++ /dev/null @@ -1,11 +0,0 @@ -framework: - asset_mapper: - # The paths to make available to the asset mapper. - paths: - - assets/ - missing_import_mode: strict - -when@prod: - framework: - asset_mapper: - missing_import_mode: warn diff --git a/config/packages/webpack_encore.yaml b/config/packages/webpack_encore.yaml new file mode 100644 index 0000000..4c009ee --- /dev/null +++ b/config/packages/webpack_encore.yaml @@ -0,0 +1,45 @@ +webpack_encore: + # The path where Encore is building the assets - i.e. Encore.setOutputPath() + output_path: '%kernel.project_dir%/public/build' + # If multiple builds are defined (as shown below), you can disable the default build: + # output_path: false + + # Set attributes that will be rendered on all script and link tags + script_attributes: + defer: true + # Uncomment (also under link_attributes) if using Turbo Drive + # https://turbo.hotwired.dev/handbook/drive#reloading-when-assets-change + # 'data-turbo-track': reload + # link_attributes: + # Uncomment if using Turbo Drive + # 'data-turbo-track': reload + + # If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials') + # crossorigin: 'anonymous' + + # Preload all rendered script and link tags automatically via the HTTP/2 Link header + # preload: true + + # Throw an exception if the entrypoints.json file is missing or an entry is missing from the data + # strict_mode: false + + # If you have multiple builds: + # builds: + # frontend: '%kernel.project_dir%/public/frontend/build' + + # pass the build name as the 3rd argument to the Twig functions + # {{ encore_entry_script_tags('entry1', null, 'frontend') }} + +framework: + assets: + json_manifest_path: '%kernel.project_dir%/public/build/manifest.json' + +#when@prod: +# webpack_encore: +# # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes) +# # Available in version 1.2 +# cache: true + +#when@test: +# webpack_encore: +# strict_mode: false diff --git a/config/services.yaml b/config/services.yaml index 3b5f248..5e3cc88 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -10,6 +10,8 @@ services: _defaults: autowire: true # Automatically injects dependencies in your services. autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. + bind: + $xmlPath: '%kernel.project_dir%/var/xmlexport' # makes classes in src/ available to be used as services # this creates a service per class whose id is the fully-qualified class name @@ -29,10 +31,14 @@ services: bpn_url: '%env(APP_BPN_ENDPOINT)%' debug: '%env(bool:APP_BPN_DEBUG)%' - App\BusProNet\DataLoader\TravelDataLoader: + App\Twig\AppRuntime: arguments: - $xmlPath: '%kernel.project_dir%/var/xmlexport' + $intlExtension: '@twig.extension.intl' - App\BusProNet\DataLoader\PickupDataLoader: + App\Menu\MenuBuilder: arguments: - $xmlPath: '%kernel.project_dir%/var/xmlexport' \ No newline at end of file + $factory: '@knp_menu.factory' + tags: + - name: knp_menu.menu_builder + method: createMainMenu + alias: main diff --git a/importmap.php b/importmap.php deleted file mode 100644 index 70ad2f6..0000000 --- a/importmap.php +++ /dev/null @@ -1,35 +0,0 @@ - [ - 'path' => './assets/app.js', - 'entrypoint' => true, - ], - '@hotwired/stimulus' => [ - 'version' => '3.2.2', - ], - '@symfony/stimulus-bundle' => [ - 'path' => './vendor/symfony/stimulus-bundle/assets/dist/loader.js', - ], - 'htmx.org' => [ - 'version' => '2.0.3', - ], - '@picocss/pico' => [ - 'version' => '2.0.6', - ], - '@picocss/pico/css/pico.min.css' => [ - 'version' => '2.0.6', - 'type' => 'css', - ], -]; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3170dea --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6966 @@ +{ + "name": "myep-next", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "myep-next", + "license": "WTFPL", + "devDependencies": { + "@babel/core": "^7.17.0", + "@babel/preset-env": "^7.16.0", + "@hotwired/stimulus": "^3.0.0", + "@symfony/stimulus-bridge": "^3.2.0", + "@symfony/webpack-encore": "^5.0.0", + "@tailwindcss/forms": "^0.5.9", + "@tailwindcss/typography": "^0.5.15", + "autoprefixer": "^10.4.20", + "core-js": "^3.38.0", + "file-loader": "^6.2.0", + "htmx.org": "^1.9.12", + "postcss": "^8.4.49", + "postcss-loader": "^8.1.1", + "regenerator-runtime": "^0.13.9", + "tailwindcss": "^3.4.15", + "webpack": "^5.74.0", + "webpack-cli": "^5.1.0", + "webpack-notifier": "^1.15.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "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==", + "dev": true, + "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.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "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.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.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-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", + "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@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-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", + "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", + "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", + "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", + "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", + "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", + "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", + "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-simple-access": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^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-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", + "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", + "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", + "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", + "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.38.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime/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==", + "dev": true + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@hotwired/stimulus": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@hotwired/stimulus/-/stimulus-3.2.2.tgz", + "integrity": "sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A==", + "dev": true + }, + "node_modules/@hotwired/stimulus-webpack-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@hotwired/stimulus-webpack-helpers/-/stimulus-webpack-helpers-1.0.1.tgz", + "integrity": "sha512-wa/zupVG0eWxRYJjC1IiPBdt3Lruv0RqGN+/DTMmUWUyMAEB27KXmVY6a8YpUVTM7QwVuaLNGW4EqDgrS2upXQ==", + "dev": true, + "peerDependencies": { + "@hotwired/stimulus": ">= 3.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/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==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/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, + "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/@jest/types/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/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 + }, + "node_modules/@jest/types/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxt/friendly-errors-webpack-plugin": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@nuxt/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.6.0.tgz", + "integrity": "sha512-3IZj6MXbzlvUxDncAxgBMLQwGPY/JlNhy2i+AGyOHCAReR5HcBxYjVRBvyaKM9R3s5k4OODYKeHAbrToZH/47w==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "consola": "^3.2.3", + "error-stack-parser": "^2.1.4", + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=5.0.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@symfony/stimulus-bridge": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@symfony/stimulus-bridge/-/stimulus-bridge-3.2.2.tgz", + "integrity": "sha512-kIaUEGPXW7g14zsHkIvQWw8cmfCdXSqsEQx18fuHPBb+R0h8nYPyY+e9uVtTuHlE2wHwAjrJoc6YBBK4a7CpKA==", + "dev": true, + "dependencies": { + "@hotwired/stimulus-webpack-helpers": "^1.0.1", + "@types/webpack-env": "^1.16.4", + "acorn": "^8.0.5", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || >=12.0.0" + }, + "peerDependencies": { + "@hotwired/stimulus": "^3.0" + } + }, + "node_modules/@symfony/webpack-encore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@symfony/webpack-encore/-/webpack-encore-5.0.1.tgz", + "integrity": "sha512-2l9ssZCJDMKOXi1iggjn7HEaErdYvITvuheLvtXHAgR2mauV2FiE/pNFS+Bqz2sbj1g4pPcqJIl5AwFE9etOgg==", + "dev": true, + "dependencies": { + "@nuxt/friendly-errors-webpack-plugin": "^2.5.1", + "babel-loader": "^9.1.3", + "css-loader": "^7.1.0", + "css-minimizer-webpack-plugin": "^7.0.0", + "fastest-levenshtein": "^1.0.16", + "mini-css-extract-plugin": "^2.6.0", + "picocolors": "^1.1.0", + "pretty-error": "^4.0.0", + "resolve-url-loader": "^5.0.0", + "semver": "^7.3.2", + "style-loader": "^3.3.0", + "tapable": "^2.2.1", + "terser-webpack-plugin": "^5.3.0", + "tmp": "^0.2.1", + "yargs-parser": "^21.0.0" + }, + "bin": { + "encore": "bin/encore.js" + }, + "engines": { + "node": "^18.12.0 || ^20.0.0 || >=22.0" + }, + "peerDependencies": { + "@babel/core": "^7.17.0", + "@babel/plugin-transform-react-jsx": "^7.12.11", + "@babel/preset-env": "^7.16.0", + "@babel/preset-react": "^7.9.0", + "@babel/preset-typescript": "^7.0.0", + "@symfony/stimulus-bridge": "^3.0.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "@vue/babel-plugin-jsx": "^1.0.0", + "@vue/babel-preset-jsx": "^1.0.0", + "@vue/compiler-sfc": "^2.6 || ^3.0.2", + "file-loader": "^6.0.0", + "fork-ts-checker-webpack-plugin": "^7.0.0 || ^8.0.0 || ^9.0.0", + "handlebars": "^4.7.7", + "handlebars-loader": "^1.7.0", + "less": "^4.0.0", + "less-loader": "^11.0.0 || ^12.2.0", + "postcss": "^8.3.0", + "postcss-loader": "^7.0.0 || ^8.1.0", + "sass": "^1.17.0", + "sass-loader": "^16.0.1", + "stylus-loader": "^7.0.0 || ^8.1.0", + "ts-loader": "^9.0.0", + "typescript": "^5.0.0", + "vue": "^3.2.14", + "vue-loader": "^17.0.0", + "webpack": "^5.72", + "webpack-cli": "^5.1.4", + "webpack-notifier": "^1.15.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": false + }, + "@babel/plugin-transform-react-jsx": { + "optional": true + }, + "@babel/preset-env": { + "optional": false + }, + "@babel/preset-react": { + "optional": true + }, + "@babel/preset-typescript": { + "optional": true + }, + "@symfony/stimulus-bridge": { + "optional": true + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "optional": true + }, + "@vue/babel-plugin-jsx": { + "optional": true + }, + "@vue/babel-preset-jsx": { + "optional": true + }, + "@vue/compiler-sfc": { + "optional": true + }, + "file-loader": { + "optional": true + }, + "fork-ts-checker-webpack-plugin": { + "optional": true + }, + "handlebars": { + "optional": true + }, + "handlebars-loader": { + "optional": true + }, + "less": { + "optional": true + }, + "less-loader": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-loader": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-loader": { + "optional": true + }, + "stylus-loader": { + "optional": true + }, + "ts-loader": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vue": { + "optional": true + }, + "vue-loader": { + "optional": true + }, + "webpack": { + "optional": false + }, + "webpack-cli": { + "optional": false + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-notifier": { + "optional": true + } + } + }, + "node_modules/@symfony/webpack-encore/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.9.tgz", + "integrity": "sha512-tM4XVr2+UVTxXJzey9Twx48c1gcxFStqn1pQz0tRsX8o3DvxhN5oY5pvyAbUx7VTaZxpej4Zzvc6h+1RJBzpIg==", + "dev": true, + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz", + "integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==", + "dev": true, + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "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==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.10.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.0.tgz", + "integrity": "sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==", + "dev": true, + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/webpack-env": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.5.tgz", + "integrity": "sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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, + "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, + "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, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "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, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true + }, + "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, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "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 + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.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, + "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/babel-loader/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==", + "dev": true, + "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/babel-loader/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==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/babel-loader/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==", + "dev": true + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.3", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "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 + }, + "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, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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 + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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==", + "dev": true + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001684", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", + "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", + "dev": true, + "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" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=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, + "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": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "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 + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "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 + }, + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "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==", + "dev": true + }, + "node_modules/core-js": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", + "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", + "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", + "dev": true, + "dependencies": { + "browserslist": "^4.24.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "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/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "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, + "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.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-7.0.0.tgz", + "integrity": "sha512-niy66jxsQHqO+EYbhPuIhqRQ1mNcNVUHrMnkzzir9kFOERJUaQDDRhh7dKDz33kBpkWMF9M8Vx0QlDbc5AHOsw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "cssnano": "^7.0.1", + "jest-worker": "^29.7.0", + "postcss": "^8.4.38", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/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==", + "dev": true, + "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/css-minimizer-webpack-plugin/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==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/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==", + "dev": true + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "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, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz", + "integrity": "sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^7.0.6", + "lilconfig": "^3.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-default": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz", + "integrity": "sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.3", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.2", + "postcss-colormin": "^7.0.2", + "postcss-convert-values": "^7.0.4", + "postcss-discard-comments": "^7.0.3", + "postcss-discard-duplicates": "^7.0.1", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.4", + "postcss-merge-rules": "^7.0.4", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.2", + "postcss-minify-selectors": "^7.0.4", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.2", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.1", + "postcss-reduce-initial": "^7.0.2", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.1", + "postcss-unique-selectors": "^7.0.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", + "dev": true, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz", + "integrity": "sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "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, + "engines": { + "node": ">= 4" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "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, + "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, + "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, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "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==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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 + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true + }, + "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, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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, + "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/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, + "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, + "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": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "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/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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, + "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==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true + }, + "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 + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/htmx.org": { + "version": "1.9.12", + "resolved": "https://registry.npmjs.org/htmx.org/-/htmx.org-1.9.12.tgz", + "integrity": "sha512-VZAohXyF7xPGS52IM8d1T1283y+X4D+Owf3qY1NZ9RuBypyu9l8cGsxUMAG5fEAb/DhT7rDoJ9Hpu5/HxFD3cw==", + "dev": true + }, + "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, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "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, + "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, + "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, + "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, + "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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/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==", + "dev": true, + "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, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=10.13.0" + } + }, + "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 + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "engines": { + "node": ">=0.12.0" + } + }, + "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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/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, + "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/jest-util/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/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 + }, + "node_modules/jest-util/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "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.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "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==", + "dev": true + }, + "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, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true + }, + "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 + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "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 + }, + "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==", + "dev": true, + "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, + "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": "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, + "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/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "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 + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "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, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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, + "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/mini-css-extract-plugin/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==", + "dev": true, + "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/mini-css-extract-plugin/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==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/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==", + "dev": true + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "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==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "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==", + "dev": 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, + "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.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "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, + "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/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, + "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/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "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, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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, + "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-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, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "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, + "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==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "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, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz", + "integrity": "sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.1.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-calc/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, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-colormin": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", + "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-convert-values": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz", + "integrity": "sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-comments": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz", + "integrity": "sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-comments/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, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", + "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", + "dev": true, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-empty": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", + "dev": true, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", + "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", + "dev": true, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "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, + "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.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz", + "integrity": "sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.4" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-rules": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz", + "integrity": "sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-rules/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, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", + "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", + "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", + "dev": true, + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", + "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz", + "integrity": "sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-selectors/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, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.1.0.tgz", + "integrity": "sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==", + "dev": true, + "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.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dev": true, + "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, + "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.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dev": true, + "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, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/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, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", + "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", + "dev": true, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", + "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", + "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", + "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", + "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", + "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", + "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", + "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", + "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-ordered-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", + "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", + "dev": true, + "dependencies": { + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", + "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", + "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", + "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.3.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz", + "integrity": "sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-unique-selectors/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, + "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 + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "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, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "dev": true + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "dev": true, + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "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, + "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, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "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, + "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/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "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, + "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, + "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, + "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 + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "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, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz", + "integrity": "sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.3", + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/stylehacks/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, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/svgo/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz", + "integrity": "sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/tailwindcss/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, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "dev": true, + "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.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "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/terser-webpack-plugin/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser-webpack-plugin/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==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/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==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "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" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "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, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "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==", + "dev": true + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "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, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.96.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", + "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.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": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "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, + "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, + "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, + "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, + "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-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==", + "dev": true, + "engines": { + "node": ">=10.13.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, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "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 + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/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 + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/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==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..17bfdc3 --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "name": "myep-next", + "devDependencies": { + "@babel/core": "^7.17.0", + "@babel/preset-env": "^7.16.0", + "@hotwired/stimulus": "^3.0.0", + "@symfony/stimulus-bridge": "^3.2.0", + "@symfony/webpack-encore": "^5.0.0", + "@tailwindcss/forms": "^0.5.9", + "@tailwindcss/typography": "^0.5.15", + "autoprefixer": "^10.4.20", + "core-js": "^3.38.0", + "file-loader": "^6.2.0", + "htmx.org": "^1.9.12", + "postcss": "^8.4.49", + "postcss-loader": "^8.1.1", + "regenerator-runtime": "^0.13.9", + "tailwindcss": "^3.4.15", + "webpack": "^5.74.0", + "webpack-cli": "^5.1.0", + "webpack-notifier": "^1.15.0" + }, + "license": "WTFPL", + "private": true, + "scripts": { + "dev-server": "encore dev-server", + "dev": "encore dev", + "watch": "encore dev --watch", + "build": "encore production --progress" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..59ef4cf --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +module.exports = { + plugins: { + 'postcss-import': {}, + tailwindcss: {}, + autoprefixer: {}, + } +} \ No newline at end of file diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..f7345df --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,70 @@ +# Use the front controller as index file. It serves as a fallback solution when +# every other rewrite/redirect fails (e.g. in an aliased environment without +# mod_rewrite). Additionally, this reduces the matching process for the +# start page (path "/") because otherwise Apache will apply the rewriting rules +# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl). +DirectoryIndex index.php + +# By default, Apache does not evaluate symbolic links if you did not enable this +# feature in your server configuration. Uncomment the following line if you +# install assets as symlinks or if you experience problems related to symlinks +# when compiling LESS/Sass/CoffeScript assets. +# Options +SymLinksIfOwnerMatch + +# Disabling MultiViews prevents unwanted negotiation, e.g. "/index" should not resolve +# to the front controller "/index.php" but be rewritten to "/index.php/index". + + Options -MultiViews + + + + # This Option needs to be enabled for RewriteRule, otherwise it will show an error like + # 'Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden' + Options +SymLinksIfOwnerMatch + + RewriteEngine On + + # Determine the RewriteBase automatically and set it as environment variable. + # If you are using Apache aliases to do mass virtual hosting or installed the + # project in a subdirectory, the base path will be prepended to allow proper + # resolution of the index.php file and to redirect to the correct URI. It will + # work in environments without path prefix as well, providing a safe, one-size + # fits all solution. But as you do not need it in this case, you can comment + # the following 2 lines to eliminate the overhead. + RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$ + RewriteRule .* - [E=BASE:%1] + + # Sets the HTTP_AUTHORIZATION header removed by Apache + RewriteCond %{HTTP:Authorization} .+ + RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0] + + # Redirect to URI without front controller to prevent duplicate content + # (with and without `/index.php`). Only do this redirect on the initial + # rewrite by Apache and not on subsequent cycles. Otherwise we would get an + # endless redirect loop (request -> rewrite to front controller -> + # redirect -> request -> ...). + # So in case you get a "too many redirects" error or you always get redirected + # to the start page because your Apache does not expose the REDIRECT_STATUS + # environment variable, you have 2 choices: + # - disable this feature by commenting the following 2 lines or + # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the + # following RewriteCond (best solution) + RewriteCond %{ENV:REDIRECT_STATUS} ="" + RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] + + # If the requested filename exists, simply serve it. + # We only want to let Apache serve files and not directories. + # Rewrite all other queries to the front controller. + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ %{ENV:BASE}/index.php [L] + + + + + # When mod_rewrite is not available, we instruct a temporary redirect of + # the start page to the front controller explicitly so that the website + # and the generated links can still be used. + RedirectMatch 307 ^/$ /index.php/ + # RedirectTemp cannot be used instead + + diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..53104cbe6776eaf1725b275405d3020b0e6bd2f8 GIT binary patch literal 6204 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 literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c2cac31a3747e2004d092f4efbd6a270c9d1ef7c GIT binary patch literal 15406 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 literal 0 HcmV?d00001 diff --git a/public/icon-192.png b/public/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..e559946caefe3cd045dd4d1348157f1cd8503e0e GIT binary patch literal 6454 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 BG=KmA literal 0 HcmV?d00001 diff --git a/public/icon-512.png b/public/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..4742877c795c439622457bce47fbab6132f1847c GIT binary patch literal 15636 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

rey!c=?=TPXy#Dxb3^Dix4S1% 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 \ No newline at end of file diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..945e170 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,6 @@ +{ + "icons": [ + { "src": "/icon-192.png", "type": "image/png", "sizes": "192x192" }, + { "src": "/icon-512.png", "type": "image/png", "sizes": "512x512" } + ] +} \ No newline at end of file diff --git a/src/BusProNet/ApiClient.php b/src/BusProNet/ApiClient.php index 06e25e3..0faabe1 100644 --- a/src/BusProNet/ApiClient.php +++ b/src/BusProNet/ApiClient.php @@ -17,7 +17,6 @@ use Psr\Log\LoggerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Serializer\Encoder\XmlEncoder; use Symfony\Component\Serializer\SerializerInterface; -use Symfony\Component\Uid\Uuid; use Symfony\Contracts\HttpClient\HttpClientInterface; class ApiClient @@ -77,6 +76,28 @@ class ApiClient return $this->sendRequest(static::TYPE_CUSTOMER_DATA, $data); } + /** + * @throws ApiClientException + */ + public function updateNewsletterRegistration(string $email, string $password, PersonalData $personalData): Notification|PersonalData + { + $data = [ + 'user' => $this->config['bpn_username'], + 'key' => $this->createKey($this->config['bpn_username'], $this->config['bpn_password'], static::TYPE_CUSTOMER_DATA), + 'satz' => ['@typ' => static::TYPE_CUSTOMER_DATA], + 'art' => 'Newsletter', + 'email' => $email, + 'passwort' => $password, + 'idadresse' => $personalData->addressId, + 'newsletter' => [ + 'email' => $email, + 'anmeldung' => $personalData->communication->newsletter ? 'True' : 'False', + ], + ]; + + return $this->sendRequest(static::TYPE_CUSTOMER_DATA, $data); + } + /** * @throws ApiClientException */ diff --git a/src/BusProNet/ApiResponseParser/AvailabilitiesResponseParser.php b/src/BusProNet/ApiResponseParser/AvailabilitiesResponseParser.php index 42e08ff..b6d2a9e 100644 --- a/src/BusProNet/ApiResponseParser/AvailabilitiesResponseParser.php +++ b/src/BusProNet/ApiResponseParser/AvailabilitiesResponseParser.php @@ -4,10 +4,11 @@ namespace App\BusProNet\ApiResponseParser; use App\BusProNet\Model\Availability; use App\BusProNet\Model\BaseData; +use App\BusProNet\TypeConversionTrait; class AvailabilitiesResponseParser { - use ResponseParserTrait; + use TypeConversionTrait; public function parse(\SimpleXMLElement $xml): BaseData { diff --git a/src/BusProNet/ApiResponseParser/BookingResponseParser.php b/src/BusProNet/ApiResponseParser/BookingResponseParser.php index a2ef6e5..67a6361 100644 --- a/src/BusProNet/ApiResponseParser/BookingResponseParser.php +++ b/src/BusProNet/ApiResponseParser/BookingResponseParser.php @@ -10,10 +10,11 @@ use App\BusProNet\Model\Pickup; use App\BusProNet\Model\Room; use App\BusProNet\Model\Service; use App\BusProNet\Model\Surcharge; +use App\BusProNet\TypeConversionTrait; class BookingResponseParser { - use ResponseParserTrait; + use TypeConversionTrait; public function parse(\SimpleXMLElement $xml): Booking { @@ -39,7 +40,7 @@ class BookingResponseParser $booking->applicant = $this->parsePersonalData($xml->anmelder); $participantsStatus = $this->stringToArray((string) $xml->status_teilnehmer, '/'); - $booking->participantsStatus = $this->arrayToOneBased($participantsStatus); + $booking->participantsStatus = array_combine(range(1, count($participantsStatus)), $participantsStatus); $booking->participants = $this->parseParticipants($xml); @@ -120,7 +121,7 @@ class BookingResponseParser return $personalData; } - private function parseServices(\SimpleXMLElement $xml, string $type): array + private function parseServices(\SimpleXMLElement $xml, string $category): array { $services = []; @@ -130,6 +131,8 @@ class BookingResponseParser $service = new Service(); $service->id = $id; + $service->category = $category; + $service->source = Service::SOURCE_BOOKING; $service->label = (string) $attributes['leistung']; $service->dateFrom = $attributes['termin'] ? $this->stringToDate((string) $attributes['termin']) : null; $service->dateTo = $attributes['terminbis'] ? $this->stringToDate((string) $attributes['terminbis']) : null; @@ -144,7 +147,7 @@ class BookingResponseParser }, $this->stringToArray((string) $attributes['einzelpreis'], '/') ); $service->individualPrice = array_combine($mapping, $individualPrices); - if (Service::CATEGORY_TRANSPORTATION === $type) { + if (Service::CATEGORY_TRANSPORTATION === $category) { $service->direction = (string) $attributes['richtung']; } diff --git a/src/BusProNet/ApiResponseParser/BookingUpdateResponseParser.php b/src/BusProNet/ApiResponseParser/BookingUpdateResponseParser.php index 929e5d3..b860a95 100644 --- a/src/BusProNet/ApiResponseParser/BookingUpdateResponseParser.php +++ b/src/BusProNet/ApiResponseParser/BookingUpdateResponseParser.php @@ -3,10 +3,11 @@ namespace App\BusProNet\ApiResponseParser; use App\BusProNet\Model\BookingUpdate; +use App\BusProNet\TypeConversionTrait; class BookingUpdateResponseParser { - use ResponseParserTrait; + use TypeConversionTrait; public function parse(\SimpleXMLElement $xml): BookingUpdate { diff --git a/src/BusProNet/ApiResponseParser/BookingsResponseParser.php b/src/BusProNet/ApiResponseParser/BookingsResponseParser.php index 3c6b1b0..2592cd0 100644 --- a/src/BusProNet/ApiResponseParser/BookingsResponseParser.php +++ b/src/BusProNet/ApiResponseParser/BookingsResponseParser.php @@ -4,10 +4,11 @@ namespace App\BusProNet\ApiResponseParser; use App\BusProNet\Model\BaseData; use App\BusProNet\Model\Booking; +use App\BusProNet\TypeConversionTrait; class BookingsResponseParser { - use ResponseParserTrait; + use TypeConversionTrait; public function parse(\SimpleXMLElement $xml): BaseData { @@ -23,6 +24,7 @@ class BookingsResponseParser $booking->price = $this->stringToFloat((string) $item->preis); $booking->bookingDate = $this->stringToDateTime((string) $item->buchungsdatum); $booking->travel = (string) $item->reise; + $booking->travelId = (int) $item->idreise; $booking->travelDate = $this->stringToDate((string) $item->reisedatum); $booking->document = $this->stringToBool((string) $item->reisedokument); $booking->payment = $this->stringToFloat((string) $item->zahlung); diff --git a/src/BusProNet/ApiResponseParser/CrmAttributesResponseParser.php b/src/BusProNet/ApiResponseParser/CrmAttributesResponseParser.php index 59e4ae6..396a6e5 100644 --- a/src/BusProNet/ApiResponseParser/CrmAttributesResponseParser.php +++ b/src/BusProNet/ApiResponseParser/CrmAttributesResponseParser.php @@ -2,13 +2,14 @@ namespace App\BusProNet\ApiResponseParser; +use App\BusProNet\Model\CrmAttributes; use App\BusProNet\Model\CrmSelection; use App\BusProNet\Model\CrmSelectionGroup; -use App\BusProNet\Model\CrmAttributes; +use App\BusProNet\TypeConversionTrait; class CrmAttributesResponseParser { - use ResponseParserTrait; + use TypeConversionTrait; private const BPN_CRM_ID_ADMIN = 1292; private const BPN_CRM_ID_MANAGER = 1293; diff --git a/src/BusProNet/ApiResponseParser/MutableDataResponseParser.php b/src/BusProNet/ApiResponseParser/MutableDataResponseParser.php index 82d921b..305825b 100644 --- a/src/BusProNet/ApiResponseParser/MutableDataResponseParser.php +++ b/src/BusProNet/ApiResponseParser/MutableDataResponseParser.php @@ -4,10 +4,11 @@ namespace App\BusProNet\ApiResponseParser; use App\BusProNet\Model\BaseData; use App\BusProNet\Model\MutableData; +use App\BusProNet\TypeConversionTrait; class MutableDataResponseParser { - use ResponseParserTrait; + use TypeConversionTrait; public function parse(\SimpleXMLElement $xml): BaseData { diff --git a/src/BusProNet/ApiResponseParser/PersonalDataResponseParser.php b/src/BusProNet/ApiResponseParser/PersonalDataResponseParser.php index a152fa2..2253172 100644 --- a/src/BusProNet/ApiResponseParser/PersonalDataResponseParser.php +++ b/src/BusProNet/ApiResponseParser/PersonalDataResponseParser.php @@ -5,9 +5,12 @@ namespace App\BusProNet\ApiResponseParser; use App\BusProNet\Model\Address; use App\BusProNet\Model\Communication; use App\BusProNet\Model\PersonalData; +use App\BusProNet\TypeConversionTrait; class PersonalDataResponseParser { + use TypeConversionTrait; + public function parse(\SimpleXMLElement $xml): PersonalData { $addressXml = $xml->adressdaten; @@ -30,24 +33,25 @@ class PersonalDataResponseParser $personalData->weight = $xml->sonstiges2 ? (int) $xml->sonstiges2 : null; $personalData->shoeSize = $xml->sonstiges3 ? (int) $xml->sonstiges3 : null; - $postalXml = $addressXml->anschrift; + if ($postalXml = $addressXml->anschrift) { + $address = new Address(); + $address->street = (string) $postalXml->strasse; + $address->postCode = (string) $postalXml->plz; + $address->city = (string) $postalXml->ort; + $address->country = (string) $postalXml->land; - $address = new Address(); - $address->street = (string) $postalXml->strasse; - $address->postCode = (string) $postalXml->plz; - $address->city = (string) $postalXml->ort; - $address->country = (string) $postalXml->land; + $personalData->address = $address; + } - $personalData->address = $address; + if ($contactXml = $addressXml->kommunikation) { + $communication = new Communication(); + $communication->phone = (string) $contactXml->telefonprivat; + $communication->mobile = (string) $contactXml->telefonmobil; + $communication->email = (string) $contactXml->email; + $communication->newsletter = $this->stringToBool((string) $contactXml->newsletter); - $contactXml = $addressXml->kommunikation; - - $communication = new Communication(); - $communication->phone = (string) $contactXml->telefonprivat; - $communication->mobile = (string) $contactXml->telefonmobil; - $communication->email = (string) $contactXml->email; - - $personalData->communication = $communication; + $personalData->communication = $communication; + } return $personalData; } diff --git a/src/BusProNet/ApiResponseParser/ResponseParser.php b/src/BusProNet/ApiResponseParser/ResponseParser.php index 1701802..50df4e7 100644 --- a/src/BusProNet/ApiResponseParser/ResponseParser.php +++ b/src/BusProNet/ApiResponseParser/ResponseParser.php @@ -33,6 +33,7 @@ class ResponseParser switch ($subType) { case 'Adressdaten': case 'Adressdaten_Ändern': + case 'Newsletter': return (new PersonalDataResponseParser())->parse($xml); case 'SelektionCRM': case 'SelektionCRM_Ändern': diff --git a/src/BusProNet/DataLoader/AbstractDataLoader.php b/src/BusProNet/DataLoader/AbstractDataLoader.php index 4366a65..c4cd933 100644 --- a/src/BusProNet/DataLoader/AbstractDataLoader.php +++ b/src/BusProNet/DataLoader/AbstractDataLoader.php @@ -2,12 +2,12 @@ namespace App\BusProNet\DataLoader; -use App\BusProNet\ApiResponseParser\ResponseParserTrait; +use App\BusProNet\TypeConversionTrait; use Symfony\Contracts\Cache\CacheInterface; abstract class AbstractDataLoader { - use ResponseParserTrait; + use TypeConversionTrait; public function __construct(protected readonly CacheInterface $cache, protected readonly ?string $xmlPath = null) { diff --git a/src/BusProNet/DataLoader/TravelDataLoader.php b/src/BusProNet/DataLoader/TravelDataLoader.php index 00249bb..d71d73b 100644 --- a/src/BusProNet/DataLoader/TravelDataLoader.php +++ b/src/BusProNet/DataLoader/TravelDataLoader.php @@ -11,38 +11,90 @@ use App\BusProNet\Model\Room; use App\BusProNet\Model\Service; use App\BusProNet\Model\Travel; use Symfony\Component\Finder\Finder; +use Symfony\Contracts\Cache\CacheInterface; +use Symfony\Contracts\Cache\ItemInterface; class TravelDataLoader extends AbstractDataLoader { + public function __construct( + private readonly HotelDataLoader $hotelDataLoader, + CacheInterface $cache, + ?string $xmlPath = null + ) { + parent::__construct($cache, $xmlPath); + } + + public function generateMapping(): array + { + return $this->cache->get('bpn_travels_mapping', function (ItemInterface $item) { + $item->expiresAfter(3600); + + $finder = new Finder(); + $finder->files()->in($this->xmlPath)->name('Ziel_*.xml'); + + $mapping = []; + $hotels = $this->hotelDataLoader->loadAll(); + + foreach ($finder as $file) { + $xml = simplexml_load_file($file->getRealPath()); + + foreach ($xml->reise->termin as $travelXml) { + $attributes = $travelXml->attributes(); + + $travelId = (int) $attributes['idbuspro']; + + $mapping[$travelId] = [ + 'id' => (int) $attributes['idbuspro'], + 'label' => (string) $travelXml->text, + 'dateFrom' => $this->stringToDate((string) $attributes['termin']), + 'dateTo' => $this->stringToDate((string) $attributes['bis']), + 'hotels' => [], + 'file' => $file->getRealPath(), + ]; + + foreach ($travelXml->hotel as $hotelXml) { + $hotelId = (int) $hotelXml->attributes()['idbuspro']; + + $mapping[$travelId]['hotels'][$hotelId] = [ + 'id' => $hotelId, + 'label' => $hotels[$hotelId]->name, + ]; + } + } + } + + return $mapping; + }); + } + public function loadById(int $id, ?string $filename = null): ?Travel { if (null !== $filename) { return $this->loadXml($id, $filename); } - $finder = new Finder(); - $finder->files()->in($this->xmlPath)->name('Ziel_*.xml'); + $mapping = $this->generateMapping(); - foreach ($finder as $file) { - if (null !== $xml = $this->loadXml($id, $file->getRealPath())) { - return $xml; - } + if (false === isset($mapping[$id])) { + return null; } - return null; + $file = $mapping[$id]['file']; + + return $this->loadXml($id, $file); } private function loadXml(int $id, string $filename): ?Travel { $xml = simplexml_load_file($filename); - foreach ($xml->reise->termin as $travel) { - if ($id === (int) $travel->attributes()['idbuspro']) { - return $this->parseXml($travel); - } + $travelXml = $xml->xpath(sprintf('//reise/termin[@idbuspro="%d"]', $id)); + + if (0 === count($travelXml)) { + return null; } - return null; + return $this->parseXml($travelXml[0]); } public function parseXml(\SimpleXMLElement $xml): Travel @@ -100,6 +152,7 @@ class TravelDataLoader extends AbstractDataLoader $serviceId = (int) $attributes['idbuspro']; $service = new Service(); + $service->source = Service::SOURCE_TRAVEL; $service->category = Service::CATEGORY_ADDITIONAL; $service->id = $serviceId; $service->subType = (string) $attributes['unterart']; @@ -125,6 +178,7 @@ class TravelDataLoader extends AbstractDataLoader $serviceId = (int) $attributes['idbuspro']; $service = new Service(); + $service->source = Service::SOURCE_TRAVEL; $service->category = Service::CATEGORY_TRANSPORTATION; $service->id = $serviceId; $service->subType = (string) $attributes['unterart']; @@ -223,4 +277,15 @@ class TravelDataLoader extends AbstractDataLoader } } } + + public function patchBookings(BaseData $bookings): void + { + foreach ($bookings->getItems() as $booking) { + if (null === $travelId = $booking->travelId) { + continue; + } + + $booking->travelData = $this->loadById($travelId); + } + } } \ No newline at end of file diff --git a/src/BusProNet/Model/Booking.php b/src/BusProNet/Model/Booking.php index eb60ed8..9d50f29 100644 --- a/src/BusProNet/Model/Booking.php +++ b/src/BusProNet/Model/Booking.php @@ -16,6 +16,7 @@ class Booking public ?int $travelId = null; public ?string $travelCode = null; public ?\DateTimeImmutable $travelDate = null; + public ?Travel $travelData = null; public ?int $hotelId = null; public ?string $hotelName = null; public ?bool $document = null; diff --git a/src/BusProNet/Model/Communication.php b/src/BusProNet/Model/Communication.php index 542f72b..32a8aca 100644 --- a/src/BusProNet/Model/Communication.php +++ b/src/BusProNet/Model/Communication.php @@ -7,6 +7,7 @@ class Communication public ?string $phone = null; public ?string $mobile = null; public ?string $email = null; + public bool $newsletter = false; public function toPayload(): array { @@ -14,6 +15,7 @@ class Communication 'email' => $this->email, 'telefonmobil' => $this->mobile, 'telefonprivat' => $this->phone, + 'newsletter' => $this->newsletter ? 'True' : 'False', ]; } } \ No newline at end of file diff --git a/src/BusProNet/Model/PersonalData.php b/src/BusProNet/Model/PersonalData.php index f8f1809..dc00e8a 100644 --- a/src/BusProNet/Model/PersonalData.php +++ b/src/BusProNet/Model/PersonalData.php @@ -8,10 +8,13 @@ class PersonalData { public ?int $addressId = null; public ?int $personId = null; + #[Assert\NotBlank(message: 'Bitte angeben')] public ?string $name = null; + #[Assert\NotBlank(message: 'Bitte angeben')] public ?string $firstName = null; + public ?string $salutation = null; public ?string $title = null; public ?string $gender = null; @@ -20,8 +23,10 @@ class PersonalData public ?string $shoeSize = null; public ?string $weight = null; public ?\DateTimeImmutable $dateOfBirth = null; + #[Assert\Valid()] public ?Address $address = null; + #[Assert\Valid()] public ?Communication $communication = null; diff --git a/src/BusProNet/Model/Service.php b/src/BusProNet/Model/Service.php index 0e7b21f..2df0f2e 100644 --- a/src/BusProNet/Model/Service.php +++ b/src/BusProNet/Model/Service.php @@ -4,6 +4,9 @@ namespace App\BusProNet\Model; class Service { + public const SOURCE_TRAVEL = 'travel'; + public const SOURCE_BOOKING = 'booking'; + public const CATEGORY_ADDITIONAL = 'additional'; public const CATEGORY_TRANSPORTATION = 'transportation'; @@ -14,6 +17,7 @@ class Service public const TOKEN_RENTALS = ['VER', 'VE2', 'VE3', 'VE4', 'VE5', 'VE6', 'VE7', 'VE8']; public ?int $id = null; + public ?string $source = null; public ?string $category = null; public ?string $status = null; public bool $mandatory = false; diff --git a/src/BusProNet/ApiResponseParser/ResponseParserTrait.php b/src/BusProNet/TypeConversionTrait.php similarity index 80% rename from src/BusProNet/ApiResponseParser/ResponseParserTrait.php rename to src/BusProNet/TypeConversionTrait.php index 34b2e2e..098ace7 100644 --- a/src/BusProNet/ApiResponseParser/ResponseParserTrait.php +++ b/src/BusProNet/TypeConversionTrait.php @@ -1,19 +1,12 @@ security->logout(); } - // Fetch original bookingData data via API - $bookingData = $this->apiClient->getBooking($bpnUser->getEmail(), $bpnUser->getPassword(), $id); + // Fetch original bookingData data via API and cache result for a short ttl + $cacheKeyList = sprintf('bpn_bookings_%s', sha1($bpnUser->getUserIdentifier())); + $cacheKeySingle = sprintf('bpn_booking_%d', $id); + $bookingData = $this->cache->get($cacheKeySingle, function (ItemInterface $item) use ($bpnUser, $id) { + $item->expiresAfter(300); + + return $this->apiClient->getBooking($bpnUser->getEmail(), $bpnUser->getPassword(), $id); + }); if (null === $bookingData) { $this->addFlash('error', 'Buchungsdaten nicht (mehr) verfügbar'); @@ -68,10 +76,9 @@ class EditController extends AbstractController $formData = BookingData::fromBooking($bookingData, $travelData); $form = $this->createForm(BookingType::class, $formData, [ + 'attr' => ['novalidate' => 'novalidate'], 'hx_post' => $this->generateUrl('app_booking_edit', ['id' => $id]), 'hx_target' => '#app', - 'hx_swap' => 'innerHTML show:top', - 'attr' => ['novalidate' => 'novalidate'], ]); $form->handleRequest($request); @@ -79,9 +86,12 @@ class EditController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $this->apiClient->updateBooking($formData, false); + $this->cache->delete($cacheKeySingle); + $this->cache->delete($cacheKeyList); + $this->addFlash('success', 'Buchung erfolgreich aktualisiert'); - return new HxRedirectResponse($this->generateUrl('app_booking_edit', ['id' => $id])); + return $this->redirectToRoute('app_booking_edit', ['id' => $id]); } return $this->render('booking/edit.html.twig', [ diff --git a/src/Controller/Booking/IndexController.php b/src/Controller/Booking/IndexController.php index 9f68711..8d731db 100644 --- a/src/Controller/Booking/IndexController.php +++ b/src/Controller/Booking/IndexController.php @@ -3,17 +3,22 @@ namespace App\Controller\Booking; use App\BusProNet\ApiClient; +use App\BusProNet\DataLoader\TravelDataLoader; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\SecurityBundle\Security; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Http\Attribute\IsGranted; +use Symfony\Contracts\Cache\CacheInterface; +use Symfony\Contracts\Cache\ItemInterface; class IndexController extends AbstractController { public function __construct( private readonly ApiClient $apiClient, + private readonly TravelDataLoader $travelDataLoader, + private readonly CacheInterface $cache, private readonly Security $security, ) { } @@ -28,7 +33,16 @@ class IndexController extends AbstractController return $this->security->logout(); } - $bookings = $this->apiClient->getBookings($bpnUser->getEmail(), $bpnUser->getPassword()); + // Cache bookings for a short ttl + $cacheKey = sprintf('bpn_bookings_%s', sha1($bpnUser->getUserIdentifier())); + $bookings = $this->cache->get($cacheKey, function (ItemInterface $item) use ($bpnUser) { + $item->expiresAfter(300); + + $bookings = $this->apiClient->getBookings($bpnUser->getEmail(), $bpnUser->getPassword()); + $this->travelDataLoader->patchBookings($bookings); + + return $bookings; + }); return $this->render('booking/index.html.twig', [ 'bookings' => $bookings->getItems(), diff --git a/src/Controller/IndexController.php b/src/Controller/IndexController.php new file mode 100644 index 0000000..4b88b2c --- /dev/null +++ b/src/Controller/IndexController.php @@ -0,0 +1,18 @@ +render('index/index.html.twig'); + } +} \ No newline at end of file diff --git a/src/Controller/PersonalDataController.php b/src/Controller/PersonalDataController.php index 42b184c..db5d009 100644 --- a/src/Controller/PersonalDataController.php +++ b/src/Controller/PersonalDataController.php @@ -42,7 +42,7 @@ class PersonalDataController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { try { $this->apiClient->updatePersonalData($bpnUser->getEmail(), $bpnUser->getPassword(), $personalData); - $this->addFlash('success', 'Personal data updated.'); + $this->addFlash('success', 'Deine persönlichen Daten wurden aktualisiert'); } catch (ApiClientException $e) { $this->addFlash('error', $e->getMessage()); } @@ -55,4 +55,31 @@ class PersonalDataController extends AbstractController 'form' => $form->createView(), ]); } + + #[Route('/personal-data/newsletter', name: 'app_personal_data_newsletter', methods: ['POST'])] + #[IsGranted('ROLE_USER')] + public function newsletter(Request $request): Response + { + $bpnUser = $request->getSession()->get('bpn_user'); + + if (null === $bpnUser) { + return $this->security->logout(); + } + + $personalData = $this + ->apiClient + ->getPersonalData($bpnUser->getEmail(), $bpnUser->getPassword()) + ; + + $personalData->communication->newsletter = !$personalData->communication->newsletter; + + try { + $this->apiClient->updateNewsletterRegistration($bpnUser->getEmail(), $bpnUser->getPassword(), $personalData); + $this->addFlash('success', 'Deine Anmeldung zum Newsletter wurde aktualisiert'); + } catch (ApiClientException $e) { + $this->addFlash('error', $e->getMessage()); + } + + return $this->redirectToRoute('app_personal_data'); + } } \ No newline at end of file diff --git a/src/Controller/SecurityController.php b/src/Controller/SecurityController.php index 0f25ab0..0bba6db 100644 --- a/src/Controller/SecurityController.php +++ b/src/Controller/SecurityController.php @@ -10,7 +10,7 @@ use Symfony\Component\Security\Http\Authentication\AuthenticationUtils; class SecurityController extends AbstractController { - #[Route('/', name: 'app_login')] + #[Route('/login', name: 'app_login')] #[IsGranted('PUBLIC_ACCESS')] public function login(AuthenticationUtils $authenticationUtils): Response { diff --git a/src/EventListener/LogoutListener.php b/src/EventListener/LogoutListener.php new file mode 100644 index 0000000..e224d40 --- /dev/null +++ b/src/EventListener/LogoutListener.php @@ -0,0 +1,21 @@ +setResponse(new HxRedirectResponse($this->urlGenerator->generate('app_index'))); + } +} diff --git a/src/Form/BookingType.php b/src/Form/BookingType.php index 6a25be8..ed28bcd 100644 --- a/src/Form/BookingType.php +++ b/src/Form/BookingType.php @@ -24,11 +24,11 @@ final class BookingType extends AbstractType $form->add('participants', CollectionType::class, [ 'entry_type' => ParticipantType::class, 'entry_options' => [ - 'selectable_courses' => $travelData->getAdditionalServicesByGroup(Service::TOKEN_COURSES), - 'selectable_ski_passes' => $travelData->getAdditionalServicesByGroup(Service::TOKEN_SKI_PASS), - 'selectable_services' => $travelData->getAdditionalServicesByGroup(Service::TOKEN_ADDITIONAL), - 'selectable_board' => $travelData->getAdditionalServicesByGroup(Service::TOKEN_BOARD), - 'selectable_rentals' => $travelData->getAdditionalServicesByGroup(Service::TOKEN_RENTALS), + 'selectable_courses' => $this->mergeSelectableServices($data, Service::TOKEN_COURSES), + 'selectable_ski_passes' => $this->mergeSelectableServices($data, Service::TOKEN_SKI_PASS), + 'selectable_services' => $this->mergeSelectableServices($data, Service::TOKEN_ADDITIONAL), + 'selectable_board' => $this->mergeSelectableServices($data, Service::TOKEN_BOARD), + 'selectable_rentals' => $this->mergeSelectableServices($data, Service::TOKEN_RENTALS), 'selectable_transportation_services_to' => $travelData ->getTransportationServicesByDirection('HIN'), 'selectable_transportation_services_fro' => $travelData @@ -46,10 +46,28 @@ final class BookingType extends AbstractType }); } + private function mergeSelectableServices(BookingData $data, mixed $subType): array + { + // combine selectable services from travel data with additional services + // from booking data + $selectableServices = $data->travel->getAdditionalServicesByGroup($subType); + $selectableServiceIds = array_map(function (Service $service) { + return $service->id; + }, $selectableServices); + + foreach ($data->booking->getAdditionalServicesByGroup($subType) as $item) { + if (false === in_array($item->id, $selectableServiceIds)) { + $selectableServices[] = $item; + } + } + + return $selectableServices; + } + public function configureOptions(OptionsResolver $resolver): void { - $resolver - ->setDefaults(['data_class' => BookingData::class]) - ; + $resolver->setDefaults([ + 'data_class' => BookingData::class, + ]); } } \ No newline at end of file diff --git a/src/Form/ParticipantType.php b/src/Form/ParticipantType.php index 62a4f6f..ed1ffc5 100644 --- a/src/Form/ParticipantType.php +++ b/src/Form/ParticipantType.php @@ -51,7 +51,7 @@ class ParticipantType extends AbstractType 'preferred_choices' => ['D', 'A', 'CH'], ]) ->add('email', EmailType::class, [ - 'label' => 'Email', + 'label' => 'E-Mail', ]) ->add('mobile', TextType::class, [ 'label' => 'Telefon (mobil)', @@ -71,142 +71,190 @@ class ParticipantType extends AbstractType ; } - $builder - ->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options) { - /** @var ParticipantData $participantData */ - $participantData = $event->getData(); - $participantIndex = $participantData->index; + $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options) { + /** @var ParticipantData $participantData */ + $participantData = $event->getData(); + $participantIndex = $participantData->index; - $form = $event->getForm(); + $form = $event->getForm(); - $commonChoiceFieldOptions = [ - 'multiple' => true, - 'expanded' => true, - 'choice_value' => 'id', - 'choice_label' => function (?Service $service) use ($participantIndex) { - if (null === $service) { - return null; - } - $price = $service->individualPrice[$participantIndex] ?? $service->price; - if (null === $price || 0.0 === $price) { - return $service->label; - } + $commonChoiceFieldOptions = [ + 'required' => false, + 'multiple' => true, + 'expanded' => true, + 'choice_value' => 'id', + 'choice_label' => function (?Service $service) use ($participantIndex) { + if (null === $service) { + return null; + } + $price = $service->individualPrice[$participantIndex] ?? $service->price; + if (null === $price || 0.0 === $price) { + return $service->label; + } - return sprintf('%s (%s€)', - $service->label, - number_format($price, 2, ',', '.') - ); - }, - 'choice_attr' => function (?Service $service) { - if (true === $service->mandatory) { + return sprintf('%s (%s €)', + $service->label, + number_format($price, 2, ',', '.') + ); + }, + 'choice_attr' => function (?Service $service) { + $attributes = [ + 'data-available' => $service->available, + 'data-availabilities-target' => 'field', + ]; + + // forcibly select mandatory services + if (true === $service->mandatory) { + $attributes['checked'] = true; + $attributes['disabled'] = true; + } + + // disable selection of services only available in booking data + if (Service::SOURCE_BOOKING === $service->source) { + $attributes['disabled'] = true; + } + + return $attributes; + }, + 'choice_filter' => function (Service $service) use ($participantData) { + // remove choices only available in booking data and + // which are not mapped to the current participant + if ( + Service::SOURCE_TRAVEL === $service->source || + Service::CATEGORY_ADDITIONAL !== $service->category + ) { + return true; + } + + return in_array($participantData->index, $service->mapping); + }, + ]; + + // Additional services + if (true === $options['additional_services_mutable']) { + if (0 < count($options['selectable_courses'])) { + $form->add('courses', ChoiceType::class, [ + ...$commonChoiceFieldOptions, + 'label' => 'Kurse', + 'choices' => $options['selectable_courses'], + ]); + } + if (0 < count($options['selectable_services'])) { + $form->add('additionalServices', ChoiceType::class, [ + ...$commonChoiceFieldOptions, + 'label' => 'Zusatzleistungen', + 'choices' => $options['selectable_services'], + ]); + } + if (0 < count($options['selectable_ski_passes'])) { + $form->add('skiPass', ChoiceType::class, [ + ...$commonChoiceFieldOptions, + 'label' => 'Skipass', + 'choices' => $options['selectable_ski_passes'], + ]); + } + if (0 < count($options['selectable_board'])) { + $form->add('board', ChoiceType::class, [ + ...$commonChoiceFieldOptions, + 'label' => 'Verpflegung', + 'choices' => $options['selectable_board'], + ]); + } + if (0 < count($options['selectable_rentals'])) { + $form->add('rentals', ChoiceType::class, [ + ...$commonChoiceFieldOptions, + 'label' => 'Verleih', + 'choices' => $options['selectable_rentals'], + ]); + } + } + + // Transportation + if (true === $options['transportation_services_mutable']) { + $form + ->add('transportationServiceTo', ChoiceType::class, [ + ...$commonChoiceFieldOptions, + 'label' => 'Anreise', + 'multiple' => false, + 'choices' => $options['selectable_transportation_services_to'], + 'choice_attr' => function (?Service $service) { return [ - 'checked' => true, - 'disabled' => true, + 'data-available' => $service->available, + 'data-availabilities-target' => 'field', + 'data-action' => 'select-toggle#toggle', + 'data-select-toggle-value' => $service->subType, ]; - } + }, + ]) + ->add('transportationServiceFro', ChoiceType::class, [ + ...$commonChoiceFieldOptions, + 'label' => 'Rückreise', + 'multiple' => false, + 'choices' => $options['selectable_transportation_services_fro'], + ]); + } - return []; - }, - ]; + // Pickup + if (true === $options['pickups_mutable']) { + $form + ->add('pickup', ChoiceType::class, [ + 'label' => 'Zustieg', + 'multiple' => false, + 'expanded' => false, + 'choices' => $options['selectable_pickups'], + 'choice_value' => 'id', + 'choice_label' => function (?Pickup $pickup) { + if (null === $pickup) { + return null; + } - // Additional services - if (true === $options['additional_services_mutable']) { + $price = $pickup->price; - if (0 < count($options['selectable_courses'])) { - $form->add('courses', ChoiceType::class, [ - ...$commonChoiceFieldOptions, - 'label' => 'Kurse', - 'choices' => $options['selectable_courses'], - ]); - } - if (0 < count($options['selectable_services'])) { - $form->add('additionalServices', ChoiceType::class, [ - ...$commonChoiceFieldOptions, - 'label' => 'Zusatzleistungen', - 'choices' => $options['selectable_services'], - ]); - } - if (0 < count($options['selectable_ski_passes'])) { - $form->add('skiPass', ChoiceType::class, [ - ...$commonChoiceFieldOptions, - 'label' => 'Skipass', - 'choices' => $options['selectable_ski_passes'], - ]); - } - if (0 < count($options['selectable_board'])) { - $form->add('board', ChoiceType::class, [ - ...$commonChoiceFieldOptions, - 'label' => 'Verpflegung', - 'choices' => $options['selectable_board'], - ]); - } - if (0 < count($options['selectable_rentals'])) { - $form->add('rentals', ChoiceType::class, [ - ...$commonChoiceFieldOptions, - 'label' => 'Verleih', - 'choices' => $options['selectable_rentals'], - ]); - } + if (null === $price || 0.0 === $price) { + return $pickup->city; + } + + return sprintf('%s (%s €)', + $pickup->city, + number_format($price, 2, ',', '.') + ); + }, + ]); + } + }) + ->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($options) { + $data = $event->getData(); + $form = $event->getForm(); + + $transportationId = $data['transportationServiceTo']; + $transportation = $options['travel']->pickups[$transportationId] ?? null; + + if (null !== $transportation && 'PKW' === $transportation->subType) { + $form->remove('pickup'); + unset($data['pickup']); + } + + // forcibly select mandatory services that potentially have been disabled in PRE_SET_DATA + $mandatoryServices = array_filter($options['selectable_services'], function (Service $service) use ($data) { + return true === $service->mandatory || + (Service::SOURCE_BOOKING === $service->source && in_array($data['index'], $service->mapping)); + }); + + if (0 < count($mandatoryServices)) { + if (false === isset($data['additionalServices'])) { + $data['additionalServices'] = []; } - // Transportation - if (true === $options['transportation_services_mutable']) { - $form - ->add('transportationServiceTo', ChoiceType::class, [ - ...$commonChoiceFieldOptions, - 'label' => 'Anreise', - 'multiple' => false, - 'choices' => $options['selectable_transportation_services_to'], - ]) - ->add('transportationServiceFro', ChoiceType::class, [ - ...$commonChoiceFieldOptions, - 'label' => 'Rückreise', - 'multiple' => false, - 'choices' => $options['selectable_transportation_services_fro'], - ]); - } + $mandatoryServiceIds = array_map(function (Service $service) { + return $service->id; + }, $mandatoryServices); - // Pickup - if (true === $options['pickups_mutable']) { - $form - ->add('pickup', ChoiceType::class, [ - 'label' => 'Zustieg (bei Busanreise)', - 'multiple' => false, - 'expanded' => false, - 'choices' => $options['selectable_pickups'], - 'choice_value' => 'id', - 'choice_label' => function (?Pickup $pickup) { - if (null === $pickup) { - return null; - } + $allServiceIds = [...$mandatoryServiceIds, ...$data['additionalServices']]; + $data['additionalServices'] = array_unique($allServiceIds); + } - $price = $pickup->price; - - if (null === $price || 0.0 === $price) { - return $pickup->city; - } - - return sprintf('%s (%s€)', - $pickup->city, - number_format($price, 2, ',', '.') - ); - }, - ]); - } - }) - ->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($options) { - $data = $event->getData(); - $form = $event->getForm(); - - $transportationId = $data['transportationServiceTo']; - $transportation = $options['travel']->pickups[$transportationId] ?? null; - - if (null !== $transportation && 'PKW' === $transportation->subType) { - $form->remove('pickup'); - unset($data['pickup']); - } - }) - ; + $event->setData($data); + }); } public function configureOptions(OptionsResolver $resolver): void diff --git a/src/Form/PersonalDataType.php b/src/Form/PersonalDataType.php index 6ade0a7..63b1d27 100644 --- a/src/Form/PersonalDataType.php +++ b/src/Form/PersonalDataType.php @@ -18,9 +18,9 @@ class PersonalDataType extends AbstractType ->add('gender', ChoiceType::class, [ 'label' => 'Gender', 'choices' => [ - 'M' => 'M', - 'W' => 'W', - 'D' => 'D', + 'männlich' => 'M', + 'weiblich' => 'W', + 'divers' => 'D', ], ]) ->add('firstName', TextType::class, [ diff --git a/src/Menu/MenuBuilder.php b/src/Menu/MenuBuilder.php new file mode 100644 index 0000000..4541aba --- /dev/null +++ b/src/Menu/MenuBuilder.php @@ -0,0 +1,49 @@ +factory->createItem('root', [ + 'childrenAttributes' => [ + 'class' => 'menu menu--main', + ], + ]); + + $menu->addChild('Meine Daten', [ + 'route' => 'app_personal_data', + 'linkAttributes' => [ + 'title' => 'Persönliche Daten', + ], + ]); + $menu->addChild('Meine Buchungen', [ + 'route' => 'app_bookings', + 'linkAttributes' => [ + 'title' => 'Meine Buchungen', + ], + 'extras' => [ + 'routes' => [ + 'app_booking_edit', + ], + ], + ]); + $menu->addChild('Logout', [ + 'route' => 'app_logout', + 'linkAttributes' => [ + 'title' => 'Logout', + ], + ]); + + return $menu; + } +} \ No newline at end of file diff --git a/src/Twig/AppExtension.php b/src/Twig/AppExtension.php new file mode 100644 index 0000000..d413537 --- /dev/null +++ b/src/Twig/AppExtension.php @@ -0,0 +1,26 @@ + ['html']]), + new TwigFilter('format_money', [AppRuntime::class, 'formatMoney']), + ]; + } + + public function getFunctions(): array + { + return [ + new TwigFunction('icon', [AppRuntime::class, 'renderIcon'], ['needs_environment' => true, 'is_safe' => ['html']]), + ]; + } +} diff --git a/src/Twig/AppRuntime.php b/src/Twig/AppRuntime.php new file mode 100644 index 0000000..3a37f71 --- /dev/null +++ b/src/Twig/AppRuntime.php @@ -0,0 +1,50 @@ + 'pdf', + 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'excel', + 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'word', + default => 'download', + }; + + return $this->renderIcon($environment, $icon, $classes); + } + + public function formatBytes(int $bytes, ?int $precision = 2): string + { + $size = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + $factor = floor((strlen($bytes) - 1) / 3); + + return sprintf("%.{$precision}f", $bytes / (1024 ** $factor)) . @$size[$factor]; + } + + public function formatMoney(int $amount): string + { + // Amounts are stored as integers so divide by 100 first + $amount = $amount / 100; + + return $this->intlExtension->formatCurrency($amount, 'EUR'); + } + + public function renderIcon(Environment $environment, string $icon, string $classes = 'w-5 h-5'): string + { + return $environment->render('_partials/_icon.html.twig', [ + 'icon' => $icon, + 'class' => $classes, + ]); + } +} diff --git a/symfony.lock b/symfony.lock index 17cd510..86647e9 100644 --- a/symfony.lock +++ b/symfony.lock @@ -26,6 +26,9 @@ "migrations/.gitignore" ] }, + "knplabs/knp-menu-bundle": { + "version": "v3.4.2" + }, "phpunit/phpunit": { "version": "9.6", "recipe": { @@ -40,19 +43,16 @@ "tests/bootstrap.php" ] }, - "symfony/asset-mapper": { - "version": "6.4", + "symfony/apache-pack": { + "version": "1.0", "recipe": { - "repo": "github.com/symfony/recipes", + "repo": "github.com/symfony/recipes-contrib", "branch": "main", - "version": "6.4", - "ref": "5ad1308aa756d58f999ffbe1540d1189f5d7d14a" + "version": "1.0", + "ref": "0f18b4decdf5695d692c1d0dfd65516a07a6adf1" }, "files": [ - "assets/app.js", - "assets/styles/app.css", - "config/packages/asset_mapper.yaml", - "importmap.php" + "public/.htaccess" ] }, "symfony/console": { @@ -285,7 +285,23 @@ "config/routes/web_profiler.yaml" ] }, + "symfony/webpack-encore-bundle": { + "version": "2.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "2.0", + "ref": "35ee1edee91a1a7137095f53db7ed0c20884b745" + }, + "files": [ + "assets/app.js", + "assets/styles/app.css", + "config/packages/webpack_encore.yaml", + "package.json", + "webpack.config.js" + ] + }, "twig/extra-bundle": { - "version": "v3.13.0" + "version": "v3.15.0" } } diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..e5bd523 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,33 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './templates/**/*.twig', + './src/Twig/*.php', + './src/Menu/*.php', + ], + safelist: ['rotate-90'], + theme: { + container: { + center: true, + padding: '2rem', + }, + extend: { + fontFamily: { + sans: ['Lato', 'sans-serif'], + }, + fontWeight: { + semibold: '700', + bold: '900', + }, + colors: { + primary: '#3d8ccb', + secondary: '#f9c700', + } + }, + }, + plugins: [ + require('@tailwindcss/forms'), + require('@tailwindcss/typography'), + ], +} + diff --git a/templates/_partials/_alert.html.twig b/templates/_partials/_alert.html.twig new file mode 100644 index 0000000..778bed1 --- /dev/null +++ b/templates/_partials/_alert.html.twig @@ -0,0 +1,12 @@ +{% apply spaceless %} + {% for message in messages %} + {% if message is iterable %} + {% set message = message.id | trans(message.parameters | default({}), message.domain | default(null), message.locale | default(null)) | raw %} + {% else %} + {% set message = message | trans | raw %} + {% endif %} +

+ {{ message }} +
+ {% endfor %} +{% endapply %} diff --git a/templates/_partials/_flashes.html.twig b/templates/_partials/_flashes.html.twig new file mode 100644 index 0000000..69a2c83 --- /dev/null +++ b/templates/_partials/_flashes.html.twig @@ -0,0 +1,9 @@ +{% if app.session.flashBag.peek('error')|length > 0 %} + {% include '_partials/_alert.html.twig' with { level: 'warning', messages: app.flashes('error') } %} +{% endif %} +{% if app.session.flashBag.peek('success')|length > 0 %} + {% include '_partials/_alert.html.twig' with { level: 'success', messages: app.flashes('success') } %} +{% endif %} +{% if app.session.flashBag.peek('info')|length > 0 %} + {% include '_partials/_alert.html.twig' with { level: 'info', messages: app.flashes('info') } %} +{% endif %} diff --git a/templates/_partials/_spinner.html.twig b/templates/_partials/_spinner.html.twig new file mode 100644 index 0000000..8d99116 --- /dev/null +++ b/templates/_partials/_spinner.html.twig @@ -0,0 +1,37 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/base.html.twig b/templates/base.html.twig index ff241f4f..b53deb8 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -2,18 +2,16 @@ - {% block title %}Welcome!{% endblock %} - + {% block title %}MyE&P.next{% endblock %} {% block stylesheets %} + {{ encore_entry_link_tags('app') }} {% endblock %} - {% block javascripts %} - {% block importmap %}{{ importmap('app') }}{% endblock %} + {{ encore_entry_script_tags('app') }} {% endblock %} - -
- {% block body %}{% endblock %} -
+ + {% block body %}{% endblock %} + {% include '_partials/_flashes.html.twig' %} diff --git a/templates/booking/edit.html.twig b/templates/booking/edit.html.twig index 6ac668e..74896ca 100644 --- a/templates/booking/edit.html.twig +++ b/templates/booking/edit.html.twig @@ -10,42 +10,39 @@ {{ form_errors(form) }} {% endif %} -
-
- Reisedaten -
- - - - - - - - - - - - - - - - - - - -
- Reise - +
+
+
+ Reisedaten + + + +
+
+
+

+ Destination +

{{ bookingData.travel }} -
- Reiseedatum - + +
+

+ Reisedatum +

{{ bookingData.travelDate|date('d.m.Y') }} -
- Buchungsdatum - + +
+

+ Buchungsdatum +

{{ bookingData.bookingDate|date('d.m.Y') }} -
- Inklusivleistungen - -
    + +
    +

    + Inklusivleistungen +

    +
      {% for selectionGroup in travelData.includedServices %} {% for service in selectionGroup.selections %}
    • @@ -54,136 +51,104 @@ {% endfor %} {% endfor %}
    -
-
- {% for child in form.participants %} - {% set participant = child.vars.data %} - - - Teilnehmer {{ participant.index }} - -
-
- Persönliche Daten -
-
- {% if travelData.participantDataMutable %} - {{ form_row(child.firstName) }} - {{ form_row(child.lastName) }} - {{ form_row(child.gender) }} - {% else %} - Teilnehmerdaten nicht mehr änderbar - {% endif %} -
-
- {% if travelData.participantDataMutable %} - {{ form_row(child.dateOfBirth) }} - {{ form_row(child.nationality) }} - {% else %} - Teilnehmerdaten nicht mehr änderbar - {% endif %} -
-
- {% if travelData.participantDataMutable %} - {{ form_row(child.email) }} - {{ form_row(child.mobile) }} - {% else %} - Teilnehmerdaten nicht mehr änderbar - {% endif %} -
-
- {% if travelData.participantDataMutable %} - {{ form_row(child.height) }} - {{ form_row(child.shoeSize) }} - {{ form_row(child.weight) }} - {% else %} - Teilnehmerdaten nicht mehr änderbar - {% endif %} -
-
-
-
- Unterkunft -
- {% set room = bookingData.roomForParticipant(participant.index) %} - {{ room.label }} ({{ room.individualPrice[participant.index]|format_currency('EUR') }}) -
-
-
- Leistungen -
-
- {% if travelData.additionalServicesMutable %} - {% if child.courses is defined %} - {{ form_row(child.courses) }} - {% endif %} - {% if child.skiPass is defined %} - {{ form_row(child.skiPass) }} - {% endif %} - {% else %} - Leistungen nicht mehr änderbar - {% endif %} -
-
- {% if travelData.additionalServicesMutable %} - {% if child.additionalServices is defined %} - {{ form_row(child.additionalServices) }} - {% endif %} - {% if child.board is defined %} - {{ form_row(child.board) }} - {% endif %} - {% else %} - Leistungen nicht mehr änderbar - {% endif %} -
-
- {% if travelData.additionalServicesMutable %} - {% if child.rentals is defined %} - {{ form_row(child.rentals) }} - {% endif %} - {% else %} - Leistungen nicht mehr änderbar - {% endif %} -
-
- {% if travelData.additionalServicesMutable %} - {{ form_row(child.transportationServiceTo) }} - {{ form_row(child.transportationServiceFro) }} - {% else %} - Beförderungsleistung nicht mehr änderbar - {% endif %} - {% if child.pickup is defined %} - {% if travelData.pickupsMutable %} - {{ form_row(child.pickup) }} - {% else %} - Zustieg nicht mehr änderbar - {% endif %} - {% endif %} -
-
-
-
- Gesamtpreis -
- {{ bookingData.priceForParticipant(participant.index)|format_currency('EUR') }} -
- - {% endfor %} - {{ form_rest(form) }} - - {{ form_end(form) }} -

- -

+ + {{ form_rest(form) }} + {{ form_end(form) }} {% endblock %} \ No newline at end of file diff --git a/templates/booking/index.html.twig b/templates/booking/index.html.twig index ef624b2..26670b2 100644 --- a/templates/booking/index.html.twig +++ b/templates/booking/index.html.twig @@ -1,71 +1,75 @@ {% extends 'layout.html.twig' %} {% block content %} -
- - - - - - - - - - - - - {% for booking in bookings %} - - - - - - - - - {% else %} - - - - {% endfor %} - -
- Buchungsdatum/
Reisedatum -
- Reise - - Vorgangsnr. - - Preis/
offen -
- Status -
- {{ booking.bookingDate | date('d.m.Y') }}/
{{ booking.travelDate | date('d.m.Y') }} -
- {{ booking.travel }} - - {{ booking.bookingNumber }} - - {{ booking.price|format_currency('EUR') }}/
{{ booking.balance ? booking.balance|format_currency('EUR') : '-' }} -
- {{ booking.status }} - - {% if booking.editable %} - +

+ Meine Buchungen +

+
+ {% for booking in bookings %} +
- Keine Daten -
+
+ + + {% else %} +
+ Keine Daten +
+ {% endfor %} {% endblock %} \ No newline at end of file diff --git a/templates/forms.html.twig b/templates/forms.html.twig index 289d9a0..d0932e0 100644 --- a/templates/forms.html.twig +++ b/templates/forms.html.twig @@ -1,62 +1,155 @@ {% use 'form_div_layout.html.twig' %} -{%- block form_widget_simple -%} - {%- set type = type|default('text') -%} - {%- if type == 'range' or type == 'color' -%} - {# Attribute "required" is not supported #} - {%- set required = false -%} - {%- endif -%} - {%- if errors|length > 0 -%} - {% set attr = attr|merge({ 'aria-invalid': 'true', 'aria-describedby': 'error-' ~ id }) %} - {%- endif -%} - -{%- endblock form_widget_simple -%} - {%- block form_row -%} - - - - {{- label -}} - - - {{- form_widget(form) -}} + {%- set widget_attr = {} -%} + {%- if help is not empty -%} + {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} + {%- endif -%} + + {{- form_label(form) -}} + {{- form_widget(form, widget_attr) -}} {{- form_errors(form) -}} {{- form_help(form) -}} - + {%- endblock form_row -%} +{%- block form_label -%} + {% set class = 'block font-semibold pb-2' %} + {% if errors|length %} + {% set class = class ~ ' text-red-500' %} + {% endif %} + {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ class)|trim}) %} + {{ parent() }} +{%- endblock form_label -%} + {%- block form_errors -%} {%- if errors|length > 0 -%} - +
    {%- for error in errors -%} -
    {{ error.message }}
    +
  • {{ error.message }}
  • {%- endfor -%} -
    +
{%- endif -%} {%- endblock form_errors -%} -{%- block choice_widget_expanded -%} - {%- for child in form %} - {{- form_widget(child) -}} - {% endfor -%} -{%- endblock choice_widget_expanded -%} +{%- block form_widget_simple -%} + {%- set type = type|default('text') -%} + {%- if type != 'hidden' -%} + {%- set attr = attr|merge({'class': (attr.class|default('') ~ ' block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset text-sm')|trim }) -%} + {%- if errors|length -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' ring-red-500 placeholder-red-500 focus:ring-red-500' }) -%} + {% else %} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-gray-400 focus:ring-primary' }) -%} + {%- endif -%} + {%- if disabled is defined and disabled == true -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%} + {%- endif -%} + {%- endif -%} + {{ parent() }} + {%- if disabled is defined and disabled == true -%} + + {%- endif -%} +{%- endblock form_widget_simple -%} + +{%- block textarea_widget -%} + {%- set attr = attr|merge({'class': (attr.class|default('') ~ ' block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset text-sm')|trim }) -%} + {%- if errors|length -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' ring-red-500 placeholder-red-500 focus:ring-red-500' }) -%} + {% else %} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-gray-400 focus:ring-primary' }) -%} + {%- endif -%} + {%- if disabled is defined and disabled == true -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%} + {%- endif -%} + {{ parent() }} + {%- if disabled is defined and disabled == true -%} + + {%- endif -%} +{%- endblock textarea_widget -%} {%- block checkbox_widget -%} - + {%- set attr = attr|merge({'class': (attr.class|default('') ~ ' h-4 w-4 rounded text-primary')|trim }) -%} + {%- if errors|length -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' border-red-500 text-red-500 ring-red-500 focus:ring-red-500' }) -%} + {% else %} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' border-gray-300 focus:ring-primary' }) -%} + {%- endif -%} + {%- if attr.disabled is defined and attr.disabled == true -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%} + {%- endif -%} + {%- endblock checkbox_widget -%} {%- block radio_widget -%} - - {%- if attr.disabled is defined and attr.disabled == true and attr.checked == true -%} + {%- set attr = attr|merge({'class': (attr.class|default('') ~ ' h-4 w-4 rounded-full text-primary')|trim }) -%} + {%- if errors|length -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' border-red-500 text-red-500 ring-red-500 focus:ring-red-500' }) -%} + {% else %} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' border-gray-300 focus:ring-primary' }) -%} + {%- endif -%} + {%- if attr.disabled is defined and attr.disabled == true -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%} + {%- endif -%} + +{%- endblock radio_widget -%} + +{% block checkbox_row %} +
+
+ {{ form_widget(form) }} +
+
+ + {{- form_errors(form) -}} +
+
+{% endblock %} + +{%- block choice_widget_collapsed -%} + {%- set attr = attr|merge({'class': (attr.class|default('') ~ ' block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset text-sm')|trim }) -%} + {%- if errors|length -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' ring-red-500 placeholder-red-500 focus:ring-red-500' }) -%} + {% else %} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-gray-400 focus:ring-primary' }) -%} + {%- endif -%} + {%- if disabled is defined and disabled == true -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%} + {%- endif -%} + {{ parent() }} + {%- if disabled is defined and disabled == true -%} {%- endif -%} -{%- endblock radio_widget -%} +{%- endblock choice_widget_collapsed -%} + +{%- block choice_widget_expanded -%} + {%- for child in form %} +
+
+ +
+
+ {{- form_widget(child) -}} +
+
+ {% endfor -%} +{%- endblock choice_widget_expanded -%} + +{%- block multiselect_widget -%} +
+
+
+ {{ icon('dots', 'w-4 h-4 mt-2') }} +
+ +
+{%- endblock multiselect_widget -%} diff --git a/templates/index/index.html.twig b/templates/index/index.html.twig new file mode 100644 index 0000000..07053b8 --- /dev/null +++ b/templates/index/index.html.twig @@ -0,0 +1,7 @@ +{% extends 'base.html.twig' %} + +{% block body %} +
+{% endblock %} \ No newline at end of file diff --git a/templates/layout.html.twig b/templates/layout.html.twig index caf0c63..5ac3a04 100644 --- a/templates/layout.html.twig +++ b/templates/layout.html.twig @@ -1,58 +1,21 @@ -{% extends 'base.html.twig' %} - -{% block body %} -
+
+
+ My E&P Team {% if is_granted('ROLE_USER') %} - - {% endif %} -
- {% for label, messages in app.flashes %} - {% for message in messages %} -
- {{ message }} -
- {% endfor %} - {% endfor %} - {% block content %}{% endblock %} -
- + -
+ {% endif %}
-{% endblock %} \ No newline at end of file +
+ {% include '_partials/_flashes.html.twig' %} + {% block content %}{% endblock %} +
+
+ {% include '_partials/_spinner.html.twig' with { 'class': 'w-8 h-8'} %} +
+
diff --git a/templates/personal_data/index.html.twig b/templates/personal_data/index.html.twig index d6fcb51..c7d3b5b 100644 --- a/templates/personal_data/index.html.twig +++ b/templates/personal_data/index.html.twig @@ -1,32 +1,60 @@ {% extends 'layout.html.twig' %} {% block content %} -

- Persönliche Daten -

- {{ form_start(form) }} -
+
- {{ form_row(form.gender) }} - {{ form_row(form.firstName) }} - {{ form_row(form.name) }} - {{ form_row(form.dateOfBirth) }} +

+ Persönliche Daten +

+ {{ form_start(form) }} +
+ {{ form_row(form.firstName) }} + {{ form_row(form.name) }} + {{ form_row(form.gender) }} + {{ form_row(form.dateOfBirth) }} +
+

+ Anschrift +

+
+
+ {{ form_row(form.street) }} +
+ {{ form_row(form.postCode) }} + {{ form_row(form.city) }} + {{ form_row(form.country) }} +
+

+ Kontakt +

+
+
+ {{ form_row(form.email) }} +
+ {{ form_row(form.phone) }} + {{ form_row(form.mobile) }} +
+ + {{ form_rest(form) }} + {{ form_end(form) }}
- {{ form_row(form.street) }} - {{ form_row(form.postCode) }} - {{ form_row(form.city) }} - {{ form_row(form.country) }} -
-
- {{ form_row(form.email) }} - {{ form_row(form.phone) }} - {{ form_row(form.mobile) }} +

+ Newsletter +

+

+ Du bist aktuell {% if not personalData.communication.newsletter %}nicht {% endif%} zum Newsletter + angemeldet. +

+
- {{ form_rest(form) }} - - {{ form_end(form) }} {% endblock %} \ No newline at end of file diff --git a/templates/security/login.html.twig b/templates/security/login.html.twig index 816f972..87e6a03 100644 --- a/templates/security/login.html.twig +++ b/templates/security/login.html.twig @@ -1,52 +1,53 @@ {% extends 'layout.html.twig' %} {% block content %} - {% if error %} -
- - - - {{ error.messageKey|trans(error.messageData, 'security') }} -
- {% endif %} -
-
- - -
-
- - -
-
- -
- - -
- +
+ {% if error %} +
+ + + + {{ error.messageKey|trans(error.messageData, 'security') }} +
+ {% endif %} +

+ Login MyE&P +

+
+
+ + +
+
+ + +
+
+ +
+ + +
+
{% endblock %} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..20bde2e --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,30 @@ +const Encore = require('@symfony/webpack-encore'); + +if (!Encore.isRuntimeEnvironmentConfigured()) { + Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev'); +} + +Encore + .setOutputPath('public/build/') + .setPublicPath('/build') + .addEntry('app', './assets/app.js') + .splitEntryChunks() + + // enables the Symfony UX Stimulus bridge (used in assets/bootstrap.js) + .enableStimulusBridge('./assets/controllers.json') + .enableStimulusBridge('./assets/controllers.json') + .enableSingleRuntimeChunk() + .cleanupOutputBeforeBuild() + .enableSourceMaps(!Encore.isProduction()) + .enableVersioning(Encore.isProduction()) + .configureBabelPresetEnv((config) => { + config.useBuiltIns = 'usage'; + config.corejs = '3.23'; + }) + .enablePostCssLoader() + .copyFiles([ + {from: './assets/images', to: 'images/[path][name].[hash:8].[ext]'}, + ]) +; + +module.exports = Encore.getWebpackConfig();