From eaaa24a3f092510ce7a70e09e3b6efc9b2f2ea08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20Pacho=C5=82ek?= <3039162+bpacholek@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:35:59 +0000 Subject: [PATCH 1/2] Dependencies: the releases versions-watch reported, pinned together (#5) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit versions-watch (#5) listed 22 entries of PLAN/07 §2 with newer releases. Each moves to the release current on 2026-10-23 (three are a step past the issue's list: vite 8.3.5, html-validate 11.17.0 and size-limit 14.3.0 came out after Monday's run), in the three places the issue names: - versions.json: all 22 entries. - PLAN/07 §2: the rows and their release dates, a dated "re-verified" note, and the qs row says what P1-06 made it: watched only, not shipped (buildQueryString() replaced it). §7 names Playwright 1.64. - The constraints. composer.json moves the ones that follow a row's minor: twig/twig ^3.30, doctrine/orm ^3.7, symfony/stimulus-bundle ^3.6 (runtime), phpunit/phpunit ^13.4, phpstan/phpstan ^2.3, rector/rector ^2.7 (dev). doctrine-bundle (^3.0), php-cs-fixer (^3.95), infection (^0.35) and framework-bundle (^7.4 || ^8.0) already admit the new patch releases. package.json pins exactly: @axe-core/playwright 4.14.0, @playwright/test 1.64.1, eslint 10.13.0, html-validate 11.17.0, jsdom 30.1.3, prettier 3.9.10, size-limit and @size-limit/file 14.3.0, stylelint 17.16.0, vite 8.3.5, vitest 5.0.5; package-lock.json moves only those and their own dependencies. doctrine/mongodb-odm-bundle and qs have no constraint here. Follow-ups of the bumps: - src/Resources/public/app.js is rebuilt: Vite 8.3's minifier writes some early returns as conditional expressions. Same behaviour; the size budget and the CSS contract hold. - bin/visual.sh takes the Playwright image from package.json, so the screenshots now come from mcr.microsoft.com/playwright:v1.64.1-noble; playwright.config.js names it. - README and UPGRADE.md state the raised Twig and ORM floors; CHANGELOG (Unreleased, Changed). Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 9 + PLAN/07-packaging-and-project-setup.md | 38 +- README.md | 2 +- UPGRADE.md | 5 +- composer.json | 12 +- package-lock.json | 645 ++++++++++++------------- package.json | 22 +- playwright.config.js | 2 +- src/Resources/public/app.js | 2 +- versions.json | 44 +- 10 files changed, 375 insertions(+), 406 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 822f4001d..e183d0a93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -406,6 +406,15 @@ mosaic and tree list modes, global search, the tab menu and four dashboard block ### Changed +- **Requirements follow the current releases** (2026-10-23, #5): `twig/twig` `^3.30` (was + `^3.28`), `doctrine/orm` `^3.7` (was `^3.6`) and `symfony/stimulus-bundle` `^3.6` (was `^3.4`); + for development `phpunit/phpunit` `^13.4`, `phpstan/phpstan` `^2.3` and `rector/rector` `^2.7`, + and the npm toolchain at its latest releases — Vite 8.3.5, Vitest 5.0.5, jsdom 30.1.3, ESLint + 10.13.0, Prettier 3.9.10, Stylelint 17.16.0, size-limit 14.3.0, html-validate 11.17.0, + `@axe-core/playwright` 4.14.0 and Playwright 1.64.1, whose `-noble` image now takes the + screenshots. `versions.json` and PLAN/07 §2 record the same versions. The committed `app.js` is + rebuilt: the newer minifier writes some early returns as conditional expressions, nothing else + changes. - **Icons go by their Font Awesome 7 names** (2026-10-08). Every icon adminata draws or documents that Font Awesome 7 keeps only as an alias of an older version is renamed to the canonical name: `plus-circle` → `circle-plus` (the dashboard's and the association widgets' diff --git a/PLAN/07-packaging-and-project-setup.md b/PLAN/07-packaging-and-project-setup.md index 2d1c8eef4..6dda324aa 100644 --- a/PLAN/07-packaging-and-project-setup.md +++ b/PLAN/07-packaging-and-project-setup.md @@ -57,6 +57,14 @@ deletes those files without a hash check. Migration therefore runs Composer with Owner directive: latest releases everywhere; nothing inherits Sonata's pins. Pin exactly in lock files; Dependabot bumps weekly. +**Re-verified 2026-10-23** (issue #5, opened by `versions-watch`): the rows of the 22 entries it +reported carry the releases current that day, and `versions.json`, the exact `package.json` pins +and the `composer.json` constraints that follow a row's minor (`twig/twig`, +`symfony/stimulus-bundle`, `doctrine/orm`, `phpunit/phpunit`, `phpstan/phpstan`, +`rector/rector`) moved with them. `qs` has not been a dependency since P1-06 (PLAN/11 owner +decision 10: `buildQueryString()` replaced its one call); its row and `versions.json` entry are +only watched. + | Package | Latest | Released | Role | |---|---|---|---| | `sonata-project/admin-bundle` | 4.43.0 | 2026-06-03 | `packages/admin-bundle`, replaced | @@ -67,27 +75,27 @@ files; Dependabot bumps weekly. | `sonata-project/form-extensions` | 2.7.0 | 2025-11-23 | ~~`packages/form-extensions`, replaced~~ → merged into `packages/admin-bundle`, **conflicted** (P14) | | `sonata-project/twig-extensions` | 2.6.0 | 2025-11-23 | ~~`packages/twig-extensions`, replaced~~ → merged into `packages/admin-bundle`, **conflicted** (P14) | | `idct/sonata-admin-mongodb-bundle` | v5.2.2 | — | external; requires `admin-bundle ^4.39`, `exporter ^3.0`, `form-extensions ^2.0` | -| `symfony/framework-bundle` | v8.1.6 | 2026-08-30 | CI target with 7.4 LTS | -| `symfony/stimulus-bundle` | v3.4.0 | 2026-07-25 | Twig helpers | +| `symfony/framework-bundle` | v8.1.9 | 2026-10-12 | CI target with 7.4 LTS | +| `symfony/stimulus-bundle` | v3.6.0 | 2026-10-13 | Twig helpers | | `symfony/panther` | v2.4.0 | 2026-01-08 | browser tests | -| `twig/twig` | v3.28.0 | 2026-07-03 | | -| `doctrine/orm` / `doctrine-bundle` / `dbal` / `mongodb-odm-bundle` | 3.6.8 / 3.3.1 / 4.x / 5.6.0 | 2026 | ORM bundle requirements; MongoDB job | -| `phpunit/phpunit` | 13.3.2 | 2026-08-27 | replaces the fork's PHPUnit 12 convention | -| `phpstan/phpstan` | 2.2.13 | 2026-09-03 | level 8 + strict | -| `rector/rector` | 2.6.6 | 2026-09-02 | `UP_TO_PHP_84`, PHPUnit 13 sets | -| `friendsofphp/php-cs-fixer` | v3.95.24 | 2026-08-31 | | -| `infection/infection` | 0.35.4 | 2026-09-02 | nightly | +| `twig/twig` | v3.30.0 | 2026-09-25 | | +| `doctrine/orm` / `doctrine-bundle` / `dbal` / `mongodb-odm-bundle` | 3.7.5 / 3.3.2 / 4.x / 5.6.1 | 2026 | ORM bundle requirements; MongoDB job | +| `phpunit/phpunit` | 13.4.3 | 2026-10-16 | replaces the fork's PHPUnit 12 convention | +| `phpstan/phpstan` | 2.3.1 | 2026-10-08 | level 8 + strict | +| `rector/rector` | 2.7.0 | 2026-10-06 | `UP_TO_PHP_84`, PHPUnit 13 sets | +| `friendsofphp/php-cs-fixer` | v3.95.27 | 2026-09-22 | | +| `infection/infection` | 0.35.8 | 2026-10-14 | nightly | | `symfonycasts/tailwind-bundle` | v1.0.0 | 2026-07-23 | AssetMapper recipe (post-1.0 docs) | | Node.js | 24.20.0 LTS (Krypton); 26.8.1 current | 2026-08-26 | build; CI matrix 24 + 26 | | `@hotwired/stimulus` | 3.2.2 | 2023-08-07 (still `latest`) | runtime | -| `qs` | 6.16.0 | 2026-08-29 | runtime (filter controller) | +| `qs` | 6.16.1 | 2026-10-14 | ~~runtime (filter controller)~~ → not shipped since P1-06 (`buildQueryString()`), watched only | | `tailwindcss`, `@tailwindcss/vite`, `@tailwindcss/postcss` | 4.3.3 | 2026-07-16 | CSS | -| `vite` / `vitest` / `jsdom` | 8.2.2 / 5.0.0 / 30.0.1 | 2026-09 | build and unit tests | +| `vite` / `vitest` / `jsdom` | 8.3.5 / 5.0.5 / 30.1.3 | 2026-10 | build and unit tests | | `@fortawesome/fontawesome-free` | 7.3.1 | 2026-07-15 | icons (no shims) | | `@fontsource-variable/outfit` | 5.3.0 | 2026-07-19 | font | -| `eslint` / `prettier` / `prettier-plugin-tailwindcss` / `stylelint` | 10.10.0 / 3.9.6 / 0.8.1 / 17.15.0 | 2026-09 | lint | -| `size-limit` + `@size-limit/file` | 13.0.3 | 2026-07-30 | budgets | -| `@playwright/test` / `@axe-core/playwright` / `html-validate` | 1.62.1 / 4.13.0 / 11.13.0 | 2026-09 | visual and a11y | +| `eslint` / `prettier` / `prettier-plugin-tailwindcss` / `stylelint` | 10.13.0 / 3.9.10 / 0.8.1 / 17.16.0 | 2026-10 | lint | +| `size-limit` + `@size-limit/file` | 14.3.0 | 2026-10-22 | budgets | +| `@playwright/test` / `@axe-core/playwright` / `html-validate` | 1.64.1 / 4.14.0 / 11.17.0 | 2026-10 | visual and a11y | | Not shipped (post-1.0 candidates, all jQuery-free) | `sortablejs` 1.15.7, `vanilla-calendar-pro` 3.3.2, `tom-select` 2.6.2 | | | | Rejected | `flatpickr` 4.6.13 (stale, 2022-06); `@eonasdan/tempus-dominus` 6.10.4 (Bootstrap-flavoured CSS); anything depending on jQuery | | | @@ -222,7 +230,7 @@ Makefile (appended to the dev-kit file): `assets-install`, `assets-build`, `asse | `lint.yaml` | php-cs-fixer, composer-normalize, yamllint, xmllint, **`replace`-versions check**, `npm ls jquery` | | `symfony-lint.yaml` | container, twig, xliff, yaml | | `frontend.yaml` | Node 24 and 26: `npm ci`, eslint, stylelint, prettier, vitest, build, `git diff --exit-code`, `css-contract`, `size-limit` | -| `visual.yaml` | Playwright 1.62 (Chromium/Firefox/WebKit) screenshots × viewports × themes against the demo app; PR + nightly | +| `visual.yaml` | Playwright 1.64 (Chromium/Firefox/WebKit) screenshots × viewports × themes against the demo app; PR + nightly | | `mongo-compat.yaml` | **PR CI**: check out the MongoDB fork, `composer require idct/adminata:@dev` (path repo), `composer validate`, its unit suite; **nightly**: its Panther suite (informational until the association templates exist) | | `documentation.yaml`, `mutation.yaml`, `stale.yaml` | as the fork | | `upstream-watch.yaml` (weekly) | for each of the seven upstreams: `gh api …/releases/latest`; opens an issue with `upstream/diff.sh` output when a newer tag exists | diff --git a/README.md b/README.md index 58d5f140a..1a13e1d9f 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ the names. ## Requirements -PHP `^8.4`, Symfony `^7.4 || ^8.0`, Twig `^3.28`. +PHP `^8.4`, Symfony `^7.4 || ^8.0`, Twig `^3.30`. ## Installation diff --git a/UPGRADE.md b/UPGRADE.md index f65a5d8a9..e1507e91e 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -31,8 +31,9 @@ Two things to know before anything else: - Start from a clean, committed tree on a branch; run your suites once so that you know what green looks like. -- Requirements are unchanged: PHP `^8.4`, Symfony `^7.4 || ^8.0`, Twig `^3.28`, Doctrine ORM - `^3.6` or MongoDB ODM `^2.17`. +- Requirements: PHP `^8.4`, Symfony `^7.4 || ^8.0`, Twig `^3.30`, Doctrine ORM `^3.7` or MongoDB + ODM `^2.17`. The rename changed none of them; the Twig and ORM floors (`^3.28`, `^3.6` at the + rename) moved to the current releases on 2026-10-23. - Decide about your own service ids first ([§6.3](#63-your-own-service-ids-and-the-roles-derived-from-them)). Keeping them is the default and needs no database change. - Expect `bin/console cache:clear` to fail between §2 and §5: the container cannot build while diff --git a/composer.json b/composer.json index 9f76e4640..7233517d5 100644 --- a/composer.json +++ b/composer.json @@ -47,7 +47,7 @@ "doctrine/common": "^3.0", "doctrine/dbal": "^4.0", "doctrine/doctrine-bundle": "^3.0", - "doctrine/orm": "^3.6", + "doctrine/orm": "^3.7", "doctrine/persistence": "^4.0", "knplabs/knp-menu": "^3.6", "knplabs/knp-menu-bundle": "^3.0", @@ -73,7 +73,7 @@ "symfony/security-core": "^7.4 || ^8.0", "symfony/security-csrf": "^7.4 || ^8.0", "symfony/serializer": "^7.4 || ^8.0", - "symfony/stimulus-bundle": "^3.4", + "symfony/stimulus-bundle": "^3.6", "symfony/string": "^7.4 || ^8.0", "symfony/translation": "^7.4 || ^8.0", "symfony/translation-contracts": "^3.0", @@ -81,7 +81,7 @@ "symfony/twig-bundle": "^7.4 || ^8.0", "symfony/validator": "^7.4 || ^8.0", "twig/string-extra": "^3.0", - "twig/twig": "^3.28" + "twig/twig": "^3.30" }, "require-dev": { "dama/doctrine-test-bundle": "^8.6", @@ -96,13 +96,13 @@ "matthiasnoback/symfony-dependency-injection-test": "^6.3", "phpoffice/phpspreadsheet": "^5.9", "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.2", + "phpstan/phpstan": "^2.3", "phpstan/phpstan-phpunit": "^2.0", "phpstan/phpstan-strict-rules": "^2.0", "phpstan/phpstan-symfony": "^2.0", - "phpunit/phpunit": "^13.3", + "phpunit/phpunit": "^13.4", "psr/event-dispatcher": "^1.0", - "rector/rector": "^2.6", + "rector/rector": "^2.7", "sonata-project/entity-audit-bundle": "^1.23", "symfony/browser-kit": "^7.4 || ^8.0", "symfony/cache": "^7.4 || ^8.0", diff --git a/package-lock.json b/package-lock.json index 0b80db9e0..9c31cd1de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,73 +12,76 @@ "@hotwired/stimulus": "3.2.2" }, "devDependencies": { - "@axe-core/playwright": "4.13.0", + "@axe-core/playwright": "4.14.0", "@eslint/js": "10.0.1", "@fontsource-variable/outfit": "5.3.0", "@fortawesome/fontawesome-free": "7.3.1", - "@playwright/test": "1.63.0", - "@size-limit/file": "13.0.3", + "@playwright/test": "1.64.1", + "@size-limit/file": "14.3.0", "@tailwindcss/vite": "4.3.3", - "eslint": "10.10.0", + "eslint": "10.13.0", "eslint-config-prettier": "10.1.8", "globals": "17.12.0", - "html-validate": "11.13.0", - "jsdom": "30.0.1", - "prettier": "3.9.6", + "html-validate": "11.17.0", + "jsdom": "30.1.3", + "prettier": "3.9.10", "prettier-plugin-tailwindcss": "0.8.1", - "size-limit": "13.0.3", - "stylelint": "17.15.0", + "size-limit": "14.3.0", + "stylelint": "17.16.0", "stylelint-config-standard": "40.0.0", "stylelint-order": "8.1.1", "tailwindcss": "4.3.3", - "vite": "8.2.2", - "vitest": "5.0.0" + "vite": "8.3.5", + "vitest": "5.0.5" }, "engines": { "node": ">=24" } }, "node_modules/@asamuzakjp/css-color": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-6.0.7.tgz", - "integrity": "sha512-vC/bk1Lz7Tn/EfU9/apOTBk80/8dyGyWMowPoV1tJ52muDGsDqt2HPT2klrFUiY60MQmQv9q8yIht15JnBgDGw==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-7.1.7.tgz", + "integrity": "sha512-Q7ioeear07HwixdIitIn9KS1LZi97CEDFCSjPNm9v+y8KNbsu9q4Lrd4zUQW4faED+E7qxvfeVnbNRW46wFKuw==", "dev": true, "license": "MIT", "dependencies": { - "@csstools/css-calc": "^3.3.0", - "@csstools/css-color-parser": "^4.1.10", - "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-tokenizer": "^4.0.0", - "lru-cache": "^11.5.2" + "@csstools/css-calc": "^3.4.3", + "@csstools/css-color-parser": "^4.2.6", + "@csstools/css-parser-algorithms": "^4.0.2", + "@csstools/css-tokenizer": "^4.0.2", + "lru-cache": "^11.5.3" }, "engines": { - "node": "^22.13.0 || >=24.0.0" + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" } }, "node_modules/@asamuzakjp/dom-selector": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-8.3.2.tgz", - "integrity": "sha512-93Z1N+BQNXysodoicpOIyNh2drHfz/CTf9nnT0FEx72GJcIiwgydD7tGAr78j41LsYn3hlRn+LdGPuBLn1Bl8Q==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-10.0.4.tgz", + "integrity": "sha512-A6f1nKy99I6tyoK82U6kBHvQQZmdHmTmPzJYPY/0eaOW0r8/qPmEOwjGHs+hL/vCgOwQTupu4LT1XtXNUuDruA==", "dev": true, "license": "MIT", "dependencies": { - "bidi-js": "^1.0.3", + "bidi-js": "^1.1.0", "css-tree": "^3.2.1", "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.5.2" + "lru-cache": "^11.5.3" }, "engines": { - "node": "^22.13.0 || >=24.0.0" + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" } }, "node_modules/@axe-core/playwright": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.13.0.tgz", - "integrity": "sha512-6YLx+kxXu5GJceG4ozFg+33a2EMTdjYwWGloJ3sb9Kta5pp+ZNS53uxGVog5JetIY8s++P5UrtX+cri+u0VAVg==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.14.0.tgz", + "integrity": "sha512-SGUhG5PIHd2eMdpgBF2PyQLOhX+qyDR2PT4cmoS4Qk2ak+jX/rrSvst9l0PGv5WTHolKpUMvVmoHpr4cZgf1RQ==", "dev": true, "license": "MPL-2.0", "dependencies": { - "axe-core": "~4.13.0" + "axe-core": "~4.14.0" + }, + "engines": { + "node": ">=22.12.0" }, "peerDependencies": { "playwright-core": ">= 1.0.0" @@ -110,13 +113,13 @@ } }, "node_modules/@bramus/specificity": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", - "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.3.tgz", + "integrity": "sha512-0GEz8qJWokkUVYQYRukmkSHIFNoBH8QTreeHrAFbvz1XFYc3Y+puhMs8PQ5x8GNugiC2l5jvDBXKLbBIByeSBw==", "dev": true, "license": "MIT", "dependencies": { - "css-tree": "^3.0.0" + "css-tree": "^3.2.1" }, "bin": { "specificity": "bin/cli.js" @@ -147,9 +150,9 @@ } }, "node_modules/@csstools/color-helpers": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.1.tgz", - "integrity": "sha512-gLNsunvwf3mCi5u5o46/Z/JcJMnhbHSaZ69rkgPzNM3J4s8hWwpPUQB6/tt0EDFyCiWzxANlx+2LJwpYj4zS1w==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.2.tgz", + "integrity": "sha512-grhRy3OKmniaAEKXMjua5z/EODX0MSqBGjunw8+j/3HQjOnahs2AGhvEOIYVUWcU6ScApbhLhVrQTX8XqrMrow==", "dev": true, "funding": [ { @@ -167,9 +170,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.3.0.tgz", - "integrity": "sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.4.3.tgz", + "integrity": "sha512-iex20d8CHVkyvg6B7UKV7uHnI2Bqo9g+EFfT9E0y+GvTvhZ/DwONJ+9aKb1dlqm0ZiGsL5RXjp0fCoJYnkeDjA==", "dev": true, "funding": [ { @@ -186,14 +189,14 @@ "node": ">=20.19.0" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-tokenizer": "^4.0.0" + "@csstools/css-parser-algorithms": "^4.0.2", + "@csstools/css-tokenizer": "^4.0.2" } }, "node_modules/@csstools/css-color-parser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.2.2.tgz", - "integrity": "sha512-3QKjR/vxyjcSXBLgb6lP0S3MGdvwbmqSsvLPbYdVORqPDc8FX1HAJ0Spk38bxaRXgvENTA47tlhhbb5Z2e8hEg==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.2.6.tgz", + "integrity": "sha512-iiPQ3iRWwnJkeEn6RIu6SJPr7hYrLz6XZ9s/QZl+2/LI5KQVjpl2fdmDSZKuD4xP6GMmMPgHFFXg6k1Wkz0Trg==", "dev": true, "funding": [ { @@ -207,21 +210,21 @@ ], "license": "MIT", "dependencies": { - "@csstools/color-helpers": "^6.1.1", - "@csstools/css-calc": "^3.3.0" + "@csstools/color-helpers": "^6.1.2", + "@csstools/css-calc": "^3.4.3" }, "engines": { "node": ">=20.19.0" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-tokenizer": "^4.0.0" + "@csstools/css-parser-algorithms": "^4.0.2", + "@csstools/css-tokenizer": "^4.0.2" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", - "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.2.tgz", + "integrity": "sha512-40cSKyMvK+tq4qz6Awrlye2WGuOKt3FwPgtGg6KTfbHOWNw+Rk1rzbAtZnZ6IBhsY491HLRnDXwoyBAijmmILA==", "dev": true, "funding": [ { @@ -238,13 +241,13 @@ "node": ">=20.19.0" }, "peerDependencies": { - "@csstools/css-tokenizer": "^4.0.0" + "@csstools/css-tokenizer": "^4.0.2" } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.12.tgz", - "integrity": "sha512-3vLQK+dXxhBMR2Wx99PTCifE+vHtW2ndZWyla8yK813ev6oGhyn8Lja8jCyGAWTJ+LEYZK7EVtJxrDj8ztevJw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.15.tgz", + "integrity": "sha512-J0u7HkVl2nzSlhsiTOp4AmwcUQ3D+mGEEKfBy/7To5/y7F2OHwyLrXfrhR0SMgr4p5Lo+eaMVSeai24zUcBIxA==", "dev": true, "funding": [ { @@ -267,9 +270,9 @@ } }, "node_modules/@csstools/css-tokenizer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", - "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.2.tgz", + "integrity": "sha512-OoKoR0f76dCY666JlcbhmVTs2drYj1GUXZTYTcbUgJjh9Nv41aFfZ21bPQTERm5+L5cBDo466NltB2lplS5GBw==", "dev": true, "funding": [ { @@ -485,9 +488,9 @@ } }, "node_modules/@exodus/bytes": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz", - "integrity": "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.16.0.tgz", + "integrity": "sha512-IcpW84uEn3N7ETtNZMlxKhfl6Pec8rUNGOTBtWbK1FKhJxIFAptZyVrvVRVBimAJxJCgc3PxepxkdWWG4DVzfA==", "dev": true, "license": "MIT", "engines": { @@ -717,9 +720,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.148.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.148.0.tgz", - "integrity": "sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==", + "version": "0.155.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.155.0.tgz", + "integrity": "sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==", "dev": true, "license": "MIT", "funding": { @@ -727,13 +730,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.63.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.63.0.tgz", - "integrity": "sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ==", + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.64.1.tgz", + "integrity": "sha512-IaYGml/nSOiZWROfPtuIL7neuu9qDOZ3TNvNljUIrhDMxiGTgPjzj/g9p9RxpS2tSepPDRY+UwAaEeiKtUvIAg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.63.0" + "playwright": "1.64.1" }, "bin": { "playwright": "cli.js" @@ -743,9 +746,9 @@ } }, "node_modules/@rolldown/binding-android-arm-eabi": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.7.tgz", - "integrity": "sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.15.tgz", + "integrity": "sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==", "cpu": [ "arm" ], @@ -760,9 +763,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.7.tgz", - "integrity": "sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.15.tgz", + "integrity": "sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==", "cpu": [ "arm64" ], @@ -777,9 +780,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.7.tgz", - "integrity": "sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.15.tgz", + "integrity": "sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==", "cpu": [ "arm64" ], @@ -794,9 +797,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.7.tgz", - "integrity": "sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.15.tgz", + "integrity": "sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==", "cpu": [ "x64" ], @@ -811,9 +814,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.7.tgz", - "integrity": "sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.15.tgz", + "integrity": "sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==", "cpu": [ "x64" ], @@ -828,9 +831,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.7.tgz", - "integrity": "sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.15.tgz", + "integrity": "sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==", "cpu": [ "arm" ], @@ -845,9 +848,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.7.tgz", - "integrity": "sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.15.tgz", + "integrity": "sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==", "cpu": [ "arm64" ], @@ -865,9 +868,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.7.tgz", - "integrity": "sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.15.tgz", + "integrity": "sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==", "cpu": [ "arm64" ], @@ -885,9 +888,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.7.tgz", - "integrity": "sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.15.tgz", + "integrity": "sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==", "cpu": [ "ppc64" ], @@ -905,9 +908,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.7.tgz", - "integrity": "sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.15.tgz", + "integrity": "sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==", "cpu": [ "s390x" ], @@ -925,9 +928,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.7.tgz", - "integrity": "sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.15.tgz", + "integrity": "sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==", "cpu": [ "x64" ], @@ -945,9 +948,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.7.tgz", - "integrity": "sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.15.tgz", + "integrity": "sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==", "cpu": [ "x64" ], @@ -965,9 +968,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.7.tgz", - "integrity": "sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.15.tgz", + "integrity": "sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==", "cpu": [ "arm64" ], @@ -982,9 +985,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.7.tgz", - "integrity": "sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.15.tgz", + "integrity": "sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==", "cpu": [ "arm64" ], @@ -999,9 +1002,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.7.tgz", - "integrity": "sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.15.tgz", + "integrity": "sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==", "cpu": [ "x64" ], @@ -1036,16 +1039,16 @@ } }, "node_modules/@size-limit/file": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@size-limit/file/-/file-13.0.3.tgz", - "integrity": "sha512-PWTITIXH5p9aGIf6qq2Fruihn/b9nBQyfkyoAyb6DzFJgS1Ek9MSPJYKxKFLO8jdo0aqSgBPd3sevbS6PyBiJw==", + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@size-limit/file/-/file-14.3.0.tgz", + "integrity": "sha512-GWKOi0rorXPbYmwbT926Z91t28rg5gd5hv8ywY1FNcaYf8NbibgK5K5YabYbLkV6KpGwuuixBRtIzl3ZpPzUfw==", "dev": true, "license": "MIT", "engines": { - "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^22.19.0 || ^24.5.0 || >=26.0.0" }, "peerDependencies": { - "size-limit": "13.0.3" + "size-limit": "14.3.0" } }, "node_modules/@tailwindcss/node": { @@ -1372,22 +1375,22 @@ "license": "MIT" }, "node_modules/@vitest/mocker": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.0.tgz", - "integrity": "sha512-66PGTMIiVJP3t4a5yxU9qPtf7MdTBs8jmToMvy+HVflB3Yy13WJZTtPePdvU+wjRV02SKK5doLbSA6o9pwOmiA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.5.tgz", + "integrity": "sha512-xLL3lkDegJZw+MGoGaCCsFayDZthGgpAtr3Vziyfc4p7xH89K7KRPcRBBh/kEYm0Aqkt5DtTmkYpBtRV/FrHZg==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.31", - "@vitest/spy": "5.0.0", + "@vitest/spy": "5.0.5", "estree-walker": "^3.0.3", - "magic-string": "^1.2.3" + "magic-string": "^1.4.3" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "msw": "^2.4.9", + "msw": "^2.4.9 || ^3.0.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { @@ -1400,19 +1403,19 @@ } }, "node_modules/@vitest/mocker/node_modules/magic-string": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.2.3.tgz", - "integrity": "sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.3.tgz", + "integrity": "sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" + "@jridgewell/sourcemap-codec": "^1.6.0" } }, "node_modules/@vitest/spy": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.0.tgz", - "integrity": "sha512-uy+luWBAPw9XfthoHi5AkfHUnuPYEESjl0p/r+meoBnU8bxg5GDQ3Ey8MjcJ6sqahkL4PFyrvfMJJBw7LbU06g==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.5.tgz", + "integrity": "sha512-lwJRExuH417257Q5wv9QYugN9IMJkoxcrKrYxGPQkBzl7wlNpTUxD/5yNX4ESKVUIShKPgkGchYPFMWOOk0wzw==", "dev": true, "license": "MIT", "funding": { @@ -1516,9 +1519,9 @@ } }, "node_modules/axe-core": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.13.0.tgz", - "integrity": "sha512-UzGt8zg7Ny8djbYMhxl2zuEevVa7r2gJjYY5Lwr1xM7+XU2nd6CkIWFTVcCIbAP63vSz71NaVyyuSk9lHKcy0A==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.14.0.tgz", + "integrity": "sha512-9WTZxEjsZ7b13TH8JPmbV2z8CHbl80/2hm3XPEG4JgNdQLK81IBRXmSxHfMAOkSqQeRxT/0dwNDz2GOm3zzpcQ==", "dev": true, "license": "MPL-2.0", "engines": { @@ -1536,9 +1539,9 @@ } }, "node_modules/bidi-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.1.0.tgz", + "integrity": "sha512-fX1Onk0tdVPC7obPWB5EbJ1z7NVhLq4m2xZLq2YXBkxzMXIGRpNMU88n0EPgWseKl12J7zXs7qrDxPK4sRs2fg==", "dev": true, "license": "MIT", "dependencies": { @@ -1571,16 +1574,6 @@ "node": ">=8" } }, - "node_modules/bytes-iec": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", - "integrity": "sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/cacheable": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.5.0.tgz", @@ -1606,9 +1599,9 @@ } }, "node_modules/chai": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.3.0.tgz", + "integrity": "sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==", "dev": true, "license": "MIT", "engines": { @@ -1722,32 +1715,17 @@ } }, "node_modules/data-urls": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", - "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-8.0.0.tgz", + "integrity": "sha512-JQUCCK+/CAGbGGx618PlFZMXH81Jtj7t73CHv9dd/zVWvxgGT2zLFRjnKb+Ng46GIwcy+f7f88qd4duqllK+WQ==", "dev": true, "license": "MIT", "dependencies": { "whatwg-mimetype": "^5.0.0", - "whatwg-url": "^16.0.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", - "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@exodus/bytes": "^1.11.0", - "tr46": "^6.0.0", - "webidl-conversions": "^8.0.1" + "whatwg-url": "^17.1.2" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": "^22.14.0 || >=24.0.0" } }, "node_modules/debug": { @@ -1814,9 +1792,9 @@ } }, "node_modules/entities": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", - "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz", + "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -1867,9 +1845,9 @@ } }, "node_modules/eslint": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.10.0.tgz", - "integrity": "sha512-NPXn6r5zl4uET1DAVPaOwzX3rut4c0wcmw3dWJAfOsTM5+TogXo0DDjz8pwm/hL8cyVNpHqeK4JpN0NjnyFFNw==", + "version": "10.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.13.0.tgz", + "integrity": "sha512-UohDjD4zSzEwhf58M3O7vc/ycc8O1I7dNlhtD0WxE8Px8EHNJKtUwzBqrzeGhisRuv2ag4sAYswszCJRgKXYUg==", "dev": true, "license": "MIT", "workspaces": [ @@ -2379,16 +2357,16 @@ "license": "MIT" }, "node_modules/html-encoding-sniffer": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", - "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-7.0.0.tgz", + "integrity": "sha512-UikN5yr7xsCDAq87Or5or0PAlD3HJJOKVzM05az588WnpDJ4Ux7a2A53Qi6gofGg2/EtvF/H4hCi/TXfCW4Y6w==", "dev": true, "license": "MIT", "dependencies": { - "@exodus/bytes": "^1.6.0" + "@exodus/bytes": "^1.15.1" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": "^22.13.0 || >=24.0.0" } }, "node_modules/html-tags": { @@ -2405,9 +2383,9 @@ } }, "node_modules/html-validate": { - "version": "11.13.0", - "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-11.13.0.tgz", - "integrity": "sha512-+D/OzRlO1500q7N5Zq6TElX/HUmclqpKVh4B8z3ko1121I09i2fOrdiuYnufBOAFw85ex5cprn2fOZpzA41Utg==", + "version": "11.17.0", + "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-11.17.0.tgz", + "integrity": "sha512-DTUTxSFbiYnFOMsjsMaW5X4tT4a/k/bG3P7W9vdyxGC6L1LGtXCnL1e3pc9QMIEVkD9kk9AQIMjyJTs+2Yu0Kw==", "dev": true, "funding": [ { @@ -2432,10 +2410,10 @@ }, "peerDependencies": { "@jest/globals": "^29.0.3 || ^30.0.0", - "@vitest/expect": "^3.2.0 || ^4.0.1", + "@vitest/expect": "^3.2.0 || ^4.0.1 || ^5.0.0", "jest": "^29.0.3 || ^30.0.0", "jest-snapshot": "^29.0.3 || ^30.0.0", - "vitest": "^3.2.0 || ^4.0.1" + "vitest": "^3.2.0 || ^4.0.1 || ^5.0.0" }, "peerDependenciesMeta": { "@jest/globals": { @@ -2665,32 +2643,31 @@ } }, "node_modules/jsdom": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-30.0.1.tgz", - "integrity": "sha512-52v7mUVUfNQVYYqE1lcdaymWL0njO7lTLUog6ZvW2U5KsbiLk/GnZlVJ+qx0xfNJZ6Gn+KSpPNE52vurbxZwrA==", + "version": "30.1.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-30.1.3.tgz", + "integrity": "sha512-hQMUPvRgN7KxsfIytDQji7bimuJeRQa6Qo5+iuiZQk5CafeRxLIA10/cG5YCBFNpD9RO3oqIiN4CO1Y44kxqXg==", "dev": true, "license": "MIT", "dependencies": { - "@asamuzakjp/css-color": "^6.0.5", - "@asamuzakjp/dom-selector": "^8.3.0", + "@asamuzakjp/css-color": "^7.1.3", + "@asamuzakjp/dom-selector": "^10.0.3", "@bramus/specificity": "^2.4.2", - "@csstools/css-syntax-patches-for-csstree": "^1.1.7", - "@exodus/bytes": "^1.15.1", + "@csstools/css-syntax-patches-for-csstree": "^1.1.15", + "@exodus/bytes": "^1.16.0", "css-tree": "^3.2.1", - "data-urls": "^7.0.0", + "data-urls": "^8.0.0", "decimal.js": "^10.6.0", - "html-encoding-sniffer": "^6.0.0", + "html-encoding-sniffer": "^7.0.0", "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.5.2", + "lru-cache": "^11.5.3", "parse5": "^8.0.1", "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.2", - "undici": "^8.9.0", - "w3c-xmlserializer": "^5.0.0", + "undici": "^8.12.1", + "w3c-xmlserializer": "^6.0.0", "webidl-conversions": "^8.0.1", "whatwg-mimetype": "^5.0.0", - "whatwg-url": "^17.1.0", + "whatwg-url": "^17.2.0", "xml-name-validator": "^5.0.0" }, "engines": { @@ -3044,9 +3021,9 @@ } }, "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.4.tgz", + "integrity": "sha512-zJZyBmQhArDRefuWTypZxwDpFDIYmrj8ypSBvwGD5P13Y95s6DjzKgu4DVdGbeQa5PDEsAOCAPNk4X+QOR006w==", "dev": true, "license": "MIT", "engines": { @@ -3087,9 +3064,9 @@ "license": "MIT" }, "node_modules/lru-cache": { - "version": "11.5.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", - "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "version": "11.5.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.3.tgz", + "integrity": "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -3185,9 +3162,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.18", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", - "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", "dev": true, "funding": [ { @@ -3231,9 +3208,9 @@ } }, "node_modules/obug": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", - "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/obug/-/obug-3.0.0.tgz", + "integrity": "sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==", "dev": true, "funding": [ "https://github.com/sponsors/sxzz", @@ -3380,13 +3357,13 @@ } }, "node_modules/playwright": { - "version": "1.63.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", - "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.1.tgz", + "integrity": "sha512-HCrVhHr5QQuwYoswEUGTb7gGp522yflbv/ST8nF4sFWGuLjQCt17Q/EubpGGSNKYn1tsTCPZxqHhHCfVURu7UA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.63.0" + "playwright-core": "1.64.1" }, "bin": { "playwright": "cli.js" @@ -3396,9 +3373,9 @@ } }, "node_modules/playwright-core": { - "version": "1.63.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", - "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.1.tgz", + "integrity": "sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3409,9 +3386,9 @@ } }, "node_modules/postcss": { - "version": "8.5.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", - "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "version": "8.5.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.31.tgz", + "integrity": "sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==", "dev": true, "funding": [ { @@ -3429,9 +3406,9 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.18", + "nanoid": "^3.3.20", "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "source-map-js": "^1.2.2" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3506,9 +3483,9 @@ } }, "node_modules/prettier": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", - "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.10.tgz", + "integrity": "sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==", "dev": true, "license": "MIT", "bin": { @@ -3707,13 +3684,13 @@ } }, "node_modules/rolldown": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.7.tgz", - "integrity": "sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.15.tgz", + "integrity": "sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.148.0", + "@oxc-project/types": "=0.155.0", "@rolldown/pluginutils": "^1.0.0" }, "bin": { @@ -3723,21 +3700,21 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm-eabi": "1.2.7", - "@rolldown/binding-android-arm64": "1.2.7", - "@rolldown/binding-darwin-arm64": "1.2.7", - "@rolldown/binding-darwin-x64": "1.2.7", - "@rolldown/binding-freebsd-x64": "1.2.7", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.7", - "@rolldown/binding-linux-arm64-gnu": "1.2.7", - "@rolldown/binding-linux-arm64-musl": "1.2.7", - "@rolldown/binding-linux-ppc64-gnu": "1.2.7", - "@rolldown/binding-linux-s390x-gnu": "1.2.7", - "@rolldown/binding-linux-x64-gnu": "1.2.7", - "@rolldown/binding-linux-x64-musl": "1.2.7", - "@rolldown/binding-openharmony-arm64": "1.2.7", - "@rolldown/binding-win32-arm64-msvc": "1.2.7", - "@rolldown/binding-win32-x64-msvc": "1.2.7" + "@rolldown/binding-android-arm-eabi": "1.2.15", + "@rolldown/binding-android-arm64": "1.2.15", + "@rolldown/binding-darwin-arm64": "1.2.15", + "@rolldown/binding-darwin-x64": "1.2.15", + "@rolldown/binding-freebsd-x64": "1.2.15", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.15", + "@rolldown/binding-linux-arm64-gnu": "1.2.15", + "@rolldown/binding-linux-arm64-musl": "1.2.15", + "@rolldown/binding-linux-ppc64-gnu": "1.2.15", + "@rolldown/binding-linux-s390x-gnu": "1.2.15", + "@rolldown/binding-linux-x64-gnu": "1.2.15", + "@rolldown/binding-linux-x64-musl": "1.2.15", + "@rolldown/binding-openharmony-arm64": "1.2.15", + "@rolldown/binding-win32-arm64-msvc": "1.2.15", + "@rolldown/binding-win32-x64-msvc": "1.2.15" } }, "node_modules/run-parallel": { @@ -3813,13 +3790,6 @@ "node": ">=8" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -3841,21 +3811,20 @@ "license": "MIT" }, "node_modules/size-limit": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-13.0.3.tgz", - "integrity": "sha512-KVb2aNEU49BwTR21SVjD+2QHP9gBV/nWsTHzNB/heRwXtHyA7lLQiDZDQ1TiNh/B/TZXKAZrHYyTt+cvBUrzYw==", + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-14.3.0.tgz", + "integrity": "sha512-SoT7DtEYQ9AkOIyrNmmHu8IyJyA3P/Q6EUVjUUinT0iBuaI6IOpWxwyI+teUxg8WdLwcTwbu9moKvw/LGlCE7g==", "dev": true, "license": "MIT", "dependencies": { - "bytes-iec": "^3.1.1", - "lilconfig": "^3.1.3", + "lilconfig": "^3.1.4", "nanospinner": "^1.2.2" }, "bin": { "size-limit": "bin.js" }, "engines": { - "node": "^22.18.0 || ^24.0.0 || >=26.0.0" + "node": "^22.19.0 || ^24.5.0 || >=26.0.0" } }, "node_modules/slash": { @@ -3890,26 +3859,19 @@ } }, "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==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, "node_modules/std-env": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", - "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.3.0.tgz", + "integrity": "sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==", "dev": true, "license": "MIT" }, @@ -3947,9 +3909,9 @@ } }, "node_modules/stylelint": { - "version": "17.15.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.15.0.tgz", - "integrity": "sha512-mWIkesYQvQjf4Kvdeu9ns0IL8/K/wtjaGxPqsPd6DlLZvaQxGysJsocxUDrBcyHQ5VleAk4uSMat4yMrVED7PA==", + "version": "17.16.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.16.0.tgz", + "integrity": "sha512-ejlWnbJ13x1GU32+zZXa6sYQJsKKkwSdv2B4rAdO3OWdEmvhSJKcXi5pOphQYSzyaj1kXpuGJr7pcMBNfDIuPw==", "dev": true, "funding": [ { @@ -4118,13 +4080,6 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, - "license": "MIT" - }, "node_modules/table": { "version": "6.9.0", "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", @@ -4226,9 +4181,9 @@ } }, "node_modules/tinybench": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-6.1.4.tgz", - "integrity": "sha512-9APumHG7r4yOk4X4WlkmE71aZcv1gvin1czO3OQ1U9iJcFA5Ja/ygyb0vPOVHTthFozUYs8CLoLUlM8grb2lTQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-6.2.2.tgz", + "integrity": "sha512-nIZ2N2dFpjBsg2hgitKu7mA+FvsIJuGJOwysRngmVRRmWgR/UyPjwJj8c/fT/dhm8EkHnF5EOogRf+0Z2qrimA==", "dev": true, "license": "MIT", "engines": { @@ -4236,9 +4191,9 @@ } }, "node_modules/tinyexec": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", - "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz", + "integrity": "sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==", "dev": true, "license": "MIT", "engines": { @@ -4294,22 +4249,22 @@ } }, "node_modules/tldts": { - "version": "7.4.11", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.11.tgz", - "integrity": "sha512-aBiNayCfTQxuIJBm06M+xR14cYaYlDlSXZbgsnKzKNxDKUVq7KFwTjwBSsb7m9Y5xO8WfPnBc63WaYFMTGlvqw==", + "version": "7.4.19", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.19.tgz", + "integrity": "sha512-48dH6aSpQnpbzDUc4vIQZ1VjB8tkK+e8c1yx05/SZK+rkssgjEOlxDd/yU8/a4vGYQ9vRgJr9dwMq9TJ0b3X2Q==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.4.11" + "tldts-core": "^7.4.19" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.4.11", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.11.tgz", - "integrity": "sha512-CW3WN2rIIE/Of21mulhgnGOwoDyEFNygyIBOONSdyAuSATgMMUCpLeUlB+E8sAwA5xRV9hYPl+kyZ9citHCaKg==", + "version": "7.4.19", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.19.tgz", + "integrity": "sha512-goNXV6Ho9TIOfpJZanTd6CKG5DyYgYAL+k+22T0SLh8l6+KHIfBUPFuePuSZv05UttIaaLmI9tb7TmGIdK5AkQ==", "dev": true, "license": "MIT" }, @@ -4340,16 +4295,16 @@ } }, "node_modules/tr46": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", - "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-7.0.0.tgz", + "integrity": "sha512-BcDSDW+SIGWVOns1Zm6Yg91q9AEj7eaID0QDY9oIqJD1A8dscNwMcl9Sms2DeuWCNov1X0/oXanHGYQBSLwZsg==", "dev": true, "license": "MIT", "dependencies": { "punycode": "^2.3.1" }, "engines": { - "node": ">=20" + "node": "^22.14.0 || >=24.0.0" } }, "node_modules/type-check": { @@ -4366,9 +4321,9 @@ } }, "node_modules/undici": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-8.10.2.tgz", - "integrity": "sha512-/y4/bH9YNU5hi9NIrpOuvGXFcxrj3CMrV+/AYpowAYTpHn8gX/XPFjNy766FPoYY0miQhdW977JFWKGNhBdwyQ==", + "version": "8.12.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.12.3.tgz", + "integrity": "sha512-+fdndUTwBP86cVjihTp21hZHo7d6oj1c/47XPA3lL8mM0XHs+C4EkcjmgRsFnFk2f/UONGDy9ItBItmXsLOQHw==", "dev": true, "license": "MIT", "engines": { @@ -4406,16 +4361,16 @@ "license": "MIT" }, "node_modules/vite": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", - "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.5.tgz", + "integrity": "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.33.0", - "picomatch": "^4.0.5", - "postcss": "^8.5.26", - "rolldown": "~1.2.4", + "picomatch": "^4.0.7", + "postcss": "^8.5.30", + "rolldown": "~1.2.14", "tinyglobby": "^0.2.17" }, "bin": { @@ -4432,7 +4387,7 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.4.0 || ^0.5.0", + "@vitejs/devtools": "^0.7.1 || ^0.8.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", @@ -4770,25 +4725,25 @@ } }, "node_modules/vitest": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.0.tgz", - "integrity": "sha512-gpsMNoRhMjMktVxPtstOH4/PJuPyovVaMDr4oDilXaGH1EcqM2OE96SoHT2VIQ6fTGtTjqmHDrEu2X9RQiXf8Q==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.5.tgz", + "integrity": "sha512-cPODOMF8YnkiiYtDdHo6n4wWmBrOBBbOIYH2d33M4l3CdNn72h+qMmO6uXffUN6A5AZFXNND/d+krS9mgkXRfg==", "dev": true, "license": "MIT", "dependencies": { "@types/chai": "^5.2.2", - "@vitest/mocker": "5.0.0", - "chai": "^6.2.2", + "@vitest/mocker": "5.0.5", + "chai": "^6.3.0", "es-module-lexer": "^2.3.2", "expect-type": "^1.4.0", - "magic-string": "^1.2.3", - "obug": "^2.1.4", + "magic-string": "^1.4.3", + "obug": "^3.0.0", "picomatch": "^4.0.7", - "std-env": "^4.2.0", - "tinybench": "6.1.4", - "tinyexec": "1.3.0", + "std-env": "^4.3.0", + "tinybench": "^6.2.2", + "tinyexec": "^1.3.1", "tinyglobby": "^0.2.17", - "why-is-node-running": "^2.3.0" + "why-is-node-running": "3.2.1" }, "bin": { "vitest": "vitest.mjs" @@ -4803,12 +4758,12 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "5.0.0", - "@vitest/browser-preview": "5.0.0", + "@vitest/browser-playwright": "5.0.5", + "@vitest/browser-preview": "5.0.5", "@vitest/browser-webdriverio": "^5.0.0-beta.5 || >=5.0.0", - "@vitest/coverage-istanbul": "5.0.0", - "@vitest/coverage-v8": "5.0.0", - "@vitest/ui": "5.0.0", + "@vitest/coverage-istanbul": "5.0.5", + "@vitest/coverage-v8": "5.0.5", + "@vitest/ui": "5.0.5", "happy-dom": "*", "jsdom": "*", "vite": "^6.4.0 || ^7.0.0 || ^8.0.0" @@ -4853,13 +4808,13 @@ } }, "node_modules/vitest/node_modules/magic-string": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.2.3.tgz", - "integrity": "sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.3.tgz", + "integrity": "sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" + "@jridgewell/sourcemap-codec": "^1.6.0" } }, "node_modules/vitest/node_modules/picomatch": { @@ -4876,16 +4831,16 @@ } }, "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-6.0.0.tgz", + "integrity": "sha512-4Nsy8K5Tr6SPDH9jhKJOHf7ChDrc1zufZTVSF7x72hwuEXBqxqk9G6cK+K2NRUtB3iELRJqjXb4JPDMBjMTl2Q==", "dev": true, "license": "MIT", "dependencies": { "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=18" + "node": "^22.22.2 || ^24.15.0 || >=26.0.0" } }, "node_modules/webidl-conversions": { @@ -4909,14 +4864,14 @@ } }, "node_modules/whatwg-url": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-17.1.0.tgz", - "integrity": "sha512-3GeworPmc2ZfEEHP7lEbUfBX/L75wdEsi0rLNhXcXxnoN5jyq0SL5gCy06SGW2cyTIZdTvWIDQNQoza++vKeaw==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-17.3.0.tgz", + "integrity": "sha512-KwOAJrpf+GTgBvcBQJcP38sMF0DsQKdwtG+TxM2pW44P6E5k0hDbWrDmyuJDIF0Uef0aQq0ZoJs+5oI+k8ddhg==", "dev": true, "license": "MIT", "dependencies": { - "@exodus/bytes": "^1.15.1", - "tr46": "^6.0.0", + "@exodus/bytes": "^1.16.0", + "tr46": "^7.0.0", "webidl-conversions": "^8.0.1" }, "engines": { @@ -4940,20 +4895,16 @@ } }, "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-3.2.1.tgz", + "integrity": "sha512-Tb2FUhB4vUsGQlfSquQLYkApkuPAFQXGFzxWKHHumVz2dK+X1RUm/HnID4+TfIGYJ1kTcwOaCk/buYCEJr6YjQ==", "dev": true, "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, "bin": { "why-is-node-running": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=20.11" } }, "node_modules/word-wrap": { diff --git a/package.json b/package.json index c029d1af3..02994f21a 100644 --- a/package.json +++ b/package.json @@ -27,27 +27,27 @@ "@hotwired/stimulus": "3.2.2" }, "devDependencies": { - "@axe-core/playwright": "4.13.0", + "@axe-core/playwright": "4.14.0", "@eslint/js": "10.0.1", "@fontsource-variable/outfit": "5.3.0", "@fortawesome/fontawesome-free": "7.3.1", - "@playwright/test": "1.63.0", - "@size-limit/file": "13.0.3", + "@playwright/test": "1.64.1", + "@size-limit/file": "14.3.0", "@tailwindcss/vite": "4.3.3", - "eslint": "10.10.0", + "eslint": "10.13.0", "eslint-config-prettier": "10.1.8", "globals": "17.12.0", - "html-validate": "11.13.0", - "jsdom": "30.0.1", - "prettier": "3.9.6", + "html-validate": "11.17.0", + "jsdom": "30.1.3", + "prettier": "3.9.10", "prettier-plugin-tailwindcss": "0.8.1", - "size-limit": "13.0.3", - "stylelint": "17.15.0", + "size-limit": "14.3.0", + "stylelint": "17.16.0", "stylelint-config-standard": "40.0.0", "stylelint-order": "8.1.1", "tailwindcss": "4.3.3", - "vite": "8.2.2", - "vitest": "5.0.0" + "vite": "8.3.5", + "vitest": "5.0.5" }, "overrides": { "html-validate": { diff --git a/playwright.config.js b/playwright.config.js index 3e6065240..409b3fbd6 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -19,7 +19,7 @@ import { BASE_URL, CREDENTIALS } from './tests-adminata/Visual/support/demo.js'; * * Screenshots are pixels, so they are only comparable when the browser, the fonts and the * compositor are the same. `make test-visual` therefore runs this inside - * `mcr.microsoft.com/playwright:v1.63.0-noble`, the image the `visual` workflow uses, with the + * `mcr.microsoft.com/playwright:v1.64.1-noble`, the image the `visual` workflow uses, with the * demo served from the host — the committed baselines under `tests-adminata/Visual/__snapshots__` come * from that image and nowhere else. Running `npx playwright test` on the host works and is useful * while writing a spec, but its screenshots will not match. diff --git a/src/Resources/public/app.js b/src/Resources/public/app.js index f7523a621..22ce2f4ac 100644 --- a/src/Resources/public/app.js +++ b/src/Resources/public/app.js @@ -2,4 +2,4 @@ %o -%o`,t,e,n),(r=window.onerror)==null||r.call(window,t,``,0,0,e)}logFormattedMessage(e,t,n={}){n=Object.assign({application:this},n),this.logger.groupCollapsed(`${e} #${t}`),this.logger.log(`details:`,Object.assign({},n)),this.logger.groupEnd()}};function Ie(){return new Promise(e=>{document.readyState==`loading`?document.addEventListener(`DOMContentLoaded`,()=>e()):e()})}function Le(e){return T(e,`classes`).reduce((e,t)=>Object.assign(e,Re(t)),{})}function Re(e){return{[`${e}Class`]:{get(){let{classes:t}=this;if(t.has(e))return t.get(e);{let n=t.getAttributeName(e);throw Error(`Missing attribute "${n}"`)}}},[`${e}Classes`]:{get(){return this.classes.getAll(e)}},[`has${d(e)}Class`]:{get(){return this.classes.has(e)}}}}function ze(e){return T(e,`outlets`).reduce((e,t)=>Object.assign(e,Be(t)),{})}function M(e,t,n){return e.application.getControllerForElementAndIdentifier(t,n)}function N(e,t,n){let r=M(e,t,n);if(r||(e.application.router.proposeToConnectScopeForElementAndIdentifier(t,n),r=M(e,t,n),r))return r}function Be(e){let t=u(e);return{[`${t}Outlet`]:{get(){let t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t){let n=N(this,t,e);if(n)return n;throw Error(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`)}throw Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}Outlets`]:{get(){let t=this.outlets.findAll(e);return t.length>0?t.map(t=>{let n=N(this,t,e);if(n)return n;console.warn(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`,t)}).filter(e=>e):[]}},[`${t}OutletElement`]:{get(){let t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t)return t;throw Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}OutletElements`]:{get(){return this.outlets.findAll(e)}},[`has${d(t)}Outlet`]:{get(){return this.outlets.has(e)}}}}function Ve(e){return T(e,`targets`).reduce((e,t)=>Object.assign(e,He(t)),{})}function He(e){return{[`${e}Target`]:{get(){let t=this.targets.find(e);if(t)return t;throw Error(`Missing target element "${e}" for "${this.identifier}" controller`)}},[`${e}Targets`]:{get(){return this.targets.findAll(e)}},[`has${d(e)}Target`]:{get(){return this.targets.has(e)}}}}function Ue(e){let t=he(e,`values`);return t.reduce((e,t)=>Object.assign(e,We(t)),{valueDescriptorMap:{get(){return t.reduce((e,t)=>{let n=P(t,this.identifier),r=this.data.getAttributeNameForKey(n.key);return Object.assign(e,{[r]:n})},{})}}})}function We(e,t){let n=P(e,t),{key:r,name:i,reader:a,writer:o}=n;return{[i]:{get(){let e=this.data.get(r);return e===null?n.defaultValue:a(e)},set(e){e===void 0?this.data.delete(r):this.data.set(r,o(e))}},[`has${d(i)}`]:{get(){return this.data.has(r)||n.hasCustomDefaultValue}}}}function P([e,t],n){return Je({controller:n,token:e,typeDefinition:t})}function F(e){switch(e){case Array:return`array`;case Boolean:return`boolean`;case Number:return`number`;case Object:return`object`;case String:return`string`}}function I(e){switch(typeof e){case`boolean`:return`boolean`;case`number`:return`number`;case`string`:return`string`}if(Array.isArray(e))return`array`;if(Object.prototype.toString.call(e)===`[object Object]`)return`object`}function Ge(e){let{controller:t,token:n,typeObject:r}=e,i=p(r.type),a=p(r.default),o=i&&a,s=i&&!a,c=!i&&a,l=F(r.type),u=I(e.typeObject.default);if(s)return l;if(c)return u;if(l!==u){let e=t?`${t}.${n}`:n;throw Error(`The specified default value for the Stimulus Value "${e}" must match the defined type "${l}". The provided default value of "${r.default}" is of type "${u}".`)}if(o)return l}function Ke(e){let{controller:t,token:n,typeDefinition:r}=e,i=Ge({controller:t,token:n,typeObject:r}),a=I(r),o=F(r),s=i||a||o;if(s)return s;let c=t?`${t}.${r}`:n;throw Error(`Unknown value type "${c}" for "${n}" value`)}function qe(e){let t=F(e);if(t)return L[t];let n=m(e,`default`),r=m(e,`type`),i=e;if(n)return i.default;if(r){let{type:e}=i,t=F(e);if(t)return L[t]}return e}function Je(e){let{token:t,typeDefinition:n}=e,r=`${f(t)}-value`,i=Ke(e);return{type:i,key:r,name:l(r),get defaultValue(){return qe(n)},get hasCustomDefaultValue(){return I(n)!==void 0},reader:Ye[i],writer:R[i]||R.default}}var L={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:``},Ye={array(e){let t=JSON.parse(e);if(!Array.isArray(t))throw TypeError(`expected value of type "array" but instead got value "${e}" of type "${I(t)}"`);return t},boolean(e){return e!=`0`&&String(e).toLowerCase()!=`false`},number(e){return Number(e.replace(/_/g,``))},object(e){let t=JSON.parse(e);if(typeof t!=`object`||!t||Array.isArray(t))throw TypeError(`expected value of type "object" but instead got value "${e}" of type "${I(t)}"`);return t},string(e){return e}},R={default:Xe,array:z,object:z};function z(e){return JSON.stringify(e)}function Xe(e){return`${e}`}var B=class{constructor(e){this.context=e}static get shouldLoad(){return!0}static afterLoad(e,t){}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get outlets(){return this.scope.outlets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(e,{target:t=this.element,detail:n={},prefix:r=this.identifier,bubbles:i=!0,cancelable:a=!0}={}){let o=r?`${r}:${e}`:e,s=new CustomEvent(o,{detail:n,bubbles:i,cancelable:a});return t.dispatchEvent(s),s}};B.blessings=[Le,Ve,Ue,ze],B.targets=[],B.outlets=[],B.values={};function V(e,t=document.createElement(`div`)){return e.parentNode.insertBefore(t,e),t.appendChild(e),t}function Ze(e){let t=document.createElement(`script`);return t.textContent=e.textContent,t.async=!1,[...e.attributes].forEach(({name:e,value:n})=>{t.setAttribute(e,n)}),t}function Qe(e){let t=document.createElement(`template`);return t.innerHTML=e,t.content}function H(e){return document.querySelector(`meta[name="${e}"]`)?.content}function $e(e){switch(e.tagName.toLowerCase()){case`select`:e.selectedIndex=-1;break;case`textarea`:case`input`:[`radio`,`checkbox`].includes(e.type.toLowerCase())?e.checked&&=!1:e.value=``}}function et(e){return e.options&&e.multiple?Array.from(e.options).filter(e=>e.selected).map(e=>e.value):e.value}function U(e,t=``){let n=[];for(let[r,i]of Object.entries(e)){let e=t===``?r:`${t}[${r}]`;if(typeof i==`object`&&i){let t=U(i,e);t!==``&&n.push(t);continue}let a=i==null?``:encodeURIComponent(String(i));n.push(`${encodeURIComponent(e)}=${a}`)}return n.join(`&`)}function tt(e){return e.split(`&`).reduce((e,t)=>{let n=decodeURIComponent(t.split(`=`)[0]),r=t.split(`=`)[1];return n.endsWith(`[]`)?(Object.prototype.hasOwnProperty.call(e,n)||(e[n]=[]),e[n].push(r)):e[n]=r,e},{})}var nt=class extends B{static targets=[`input`,`listbox`,`status`,`chips`,`hiddenInputs`,`itemTemplate`,`chipTemplate`];static values={url:String,requestParameters:{type:Object,default:{}},searchParameter:{type:String,default:`q`},pageParameter:{type:String,default:`_page`},perPageParameter:{type:String,default:`_per_page`},minLength:{type:Number,default:3},perPage:{type:Number,default:10},delay:{type:Number,default:100},multiple:Boolean,name:String,safeLabel:Boolean,disabled:Boolean,selected:{type:Array,default:[]},moreText:{type:String,default:`More`},minLengthText:{type:String,default:``},noResultsText:{type:String,default:``},loadingText:{type:String,default:``},removeText:{type:String,default:`Remove`}};initialize(){this.items=[],this.active=-1,this.page=1,this.more=!1,this.query=``,this.timer=null,this.request=null}connect(){this.multipleValue&&this.hasChipsTarget&&this.chipsTarget.replaceChildren(...this.selectedValue.map(e=>this.chip(e))),this.onDocumentClick=e=>{this.element.contains(e.target)||this.close()},document.addEventListener(`click`,this.onDocumentClick)}disconnect(){document.removeEventListener(`click`,this.onDocumentClick),window.clearTimeout(this.timer),this.request?.abort(),this.request=null}search(){window.clearTimeout(this.timer),!this.multipleValue&&this.selectedIds().length>0&&(this.hiddenInputsTarget.replaceChildren(this.hiddenInput(``)),this.dispatch(`cleared`));let e=this.inputTarget.value.trim();if(e.lengththis.load(e,1),this.delayValue)}navigate(e){let t={ArrowDown:()=>this.move(1),ArrowUp:()=>this.move(-1),Home:()=>this.moveTo(0),End:()=>this.moveTo(this.optionCount()-1),Enter:()=>this.choose(),Escape:()=>this.close(),Backspace:()=>this.removeLast()}[e.key];t!==void 0&&(e.key!==`Backspace`||this.inputTarget.value===``&&this.multipleValue)&&(e.key!==`Enter`||this.active!==-1)&&(e.preventDefault(),t())}async load(e,t){this.query=e,this.page=t,t===1&&this.announce(this.loadingTextValue),this.request?.abort();let n=new AbortController;this.request=n;let r={...this.requestParametersValue,[this.searchParameterValue]:e,[this.pageParameterValue]:t,[this.perPageParameterValue]:this.perPageValue},i;try{i=await fetch(`${this.urlValue}?${U(r)}`,{headers:{"X-Requested-With":`XMLHttpRequest`},signal:n.signal})}catch(e){if(e.name===`AbortError`)return;throw e}if(i.status===403){this.items=[],this.more=!1,this.render(this.minLengthMessage(e));return}let a=await i.json(),o=Array.isArray(a.items)?a.items:[];this.items=t===1?o:[...this.items,...o],this.more=!0===a.more,this.render(this.items.length===0?this.noResultsTextValue:``)}choose(){let e=this.items[this.active];if(e===void 0){this.more&&this.active===this.items.length&&this.load(this.query,this.page+1);return}this.select(e)}pick(e){e.preventDefault(),this.active=Number(e.currentTarget.dataset.adminataAutocompleteIndex),this.choose()}select(e){if(!this.multipleValue)this.hiddenInputsTarget.replaceChildren(this.hiddenInput(e.id)),this.inputTarget.value=this.plainLabel(e);else{if(this.selectedIds().includes(String(e.id))){this.close();return}this.hiddenInputsTarget.append(this.hiddenInput(e.id)),this.chipsTarget.append(this.chip(e)),this.inputTarget.value=``}this.items=[],this.more=!1,this.close(),this.announce(``),this.dispatch(`selected`,{detail:{id:e.id,label:this.labelOf(e)}})}remove(e){e.preventDefault(),this.removeId(e.currentTarget.closest(`[data-adminata-autocomplete-id]`).dataset.adminataAutocompleteId),this.inputTarget.focus()}removeLast(){let e=this.selectedIds();e.length!==0&&this.removeId(e[e.length-1])}removeId(e){this.hiddenInputs().filter(t=>t.value===String(e)).forEach(e=>e.remove()),this.hasChipsTarget&&[...this.chipsTarget.children].filter(t=>t.dataset.adminataAutocompleteId===String(e)).forEach(e=>e.remove()),this.dispatch(this.multipleValue?`removed`:`cleared`,{detail:{id:e}})}render(e){let t=this.items.map((e,t)=>this.option(e,t,!1));this.more&&t.push(this.option({label:this.moreTextValue},t.length,!0)),this.listboxTarget.replaceChildren(...t),this.open(t.length>0),this.highlight(),this.announce(e)}option(e,t,n){let r=this.itemTemplateTarget.content.firstElementChild.cloneNode(!0);return r.id=`${this.inputTarget.id}_option_${t}`,r.dataset.adminataAutocompleteIndex=String(t),r.setAttribute(`role`,`option`),r.setAttribute(`aria-selected`,`false`),this.write(r,this.labelOf(e),n),r}chip(e){let t=this.chipTemplateTarget.content.firstElementChild.cloneNode(!0);return t.dataset.adminataAutocompleteId=String(e.id),this.write(t.querySelector(`[data-label]`)??t,this.labelOf(e),!1),t.querySelector(`[data-remove]`)?.setAttribute(`aria-label`,`${this.removeTextValue} ${this.plainLabel(e)}`.trim()),t}write(e,t,n){if(this.safeLabelValue&&!n){e.innerHTML=t;return}e.textContent=t}labelOf(e){return String(e.label??e.text??``)}plainLabel(e){let t=this.labelOf(e);if(!this.safeLabelValue)return t;let n=document.createElement(`template`);return n.innerHTML=t,n.content.textContent.trim()}hiddenInput(e){let t=document.createElement(`input`);return t.type=`hidden`,t.name=this.multipleValue?`${this.nameValue}[]`:this.nameValue,t.value=String(e),t.disabled=this.disabledValue,t}hiddenInputs(){return[...this.hiddenInputsTarget.querySelectorAll(`input`)]}selectedIds(){return this.hiddenInputs().map(e=>e.value).filter(e=>e!==``)}optionCount(){return this.listboxTarget.querySelectorAll(`[role="option"]`).length}move(e){let t=this.optionCount();t!==0&&this.moveTo((this.active+e+t)%t)}moveTo(e){this.active=e,this.open(this.optionCount()>0),this.highlight()}highlight(){let e=[...this.listboxTarget.querySelectorAll(`[role="option"]`)];e.forEach((e,t)=>e.setAttribute(`aria-selected`,String(t===this.active)));let t=e[this.active];if(t===void 0){this.inputTarget.removeAttribute(`aria-activedescendant`);return}this.inputTarget.setAttribute(`aria-activedescendant`,t.id),t.scrollIntoView?.({block:`nearest`})}open(e){this.listboxTarget.hidden=!e,this.inputTarget.setAttribute(`aria-expanded`,String(e))}close(){this.active=-1,this.open(!1),this.inputTarget.removeAttribute(`aria-activedescendant`)}announce(e){this.hasStatusTarget&&(this.statusTarget.textContent=e??``)}minLengthMessage(e){return this.minLengthTextValue.replace(`%count%`,String(Math.max(0,this.minLengthValue-e.length)))}},rt=`adminata-list-row-selected`,it=class extends B{static targets=[`all`,`row`];connect(){this.lastIndex=null,this.render()}toggleAll(){this.hasAllTarget&&(this.rowTargets.forEach(e=>{e.checked=this.allTarget.checked}),this.lastIndex=null,this.render())}toggleRow(e){let t=this.rowTargets.indexOf(e.currentTarget);if(t!==-1){if(e.shiftKey&&this.lastIndex!==null){let[n,r]=[this.lastIndex,t].sort((e,t)=>e-t);for(let t=n;t<=r;t+=1)this.rowTargets[t].checked=e.currentTarget.checked}this.lastIndex=t,this.render()}}render(){if(this.rowTargets.forEach(e=>{e.closest(`tr, div.adminata-list-field-batch`)?.classList.toggle(rt,e.checked)}),!this.hasAllTarget)return;let e=this.rowTargets.filter(e=>e.checked).length;this.allTarget.checked=e>0&&e===this.rowTargets.length,this.allTarget.indeterminate=e>0&&e{e.replaceWith(Ze(e))}),this.element.insertBefore(n,t),this.numItemsValue+=1,this.dispatch(`adminata-admin-append-form-element`,{prefix:``,detail:{item:n}}),this.dispatch(`adminata-collection-item-added`,{prefix:``,detail:{item:n}})}delete(e){let t=e.currentTarget,n=this.itemTargets.find(e=>e.contains(t));this.dispatch(`adminata-collection-item-deleted`,{prefix:``,detail:{item:n}}),n.remove(),this.dispatch(`adminata-collection-item-deleted-successful`,{prefix:``})}createItem(){let e=this.element.getAttribute(`id`),t=e.split(`_`),n=RegExp(`${e}_${this.prototypeName}`,`g`),r=RegExp(`${t[t.length-1]}\\]\\[${this.prototypeName}`,`g`);return Qe(this.prototype.replace(n,`${e}_${this.numItemsValue}`).replace(r,`${t[t.length-1]}][${this.numItemsValue}`)).firstElementChild}get prototype(){return this.element.getAttribute(`data-prototype`)||``}get prototypeName(){return this.element.getAttribute(`data-prototype-name`)||`__name__`}},W=new class{params=null;param(e){if(this.params===null){let e=H(`adminata-config`);if(e===void 0)return null;try{this.params=JSON.parse(e)}catch(e){throw Error(`An error has occurred resolving the "adminata-config" meta tag: ${e.message}.`,{cause:e})}}return e in this.params?this.params[e]:null}},ot=new class{messages=null;trans(e){if(this.messages===null)try{this.messages=JSON.parse(H(`adminata-translations`))}catch(e){throw Error(`An error has occurred resolving the "adminata-translations" meta tag: ${e.message}.`,{cause:e})}return e in this.messages?this.messages[e]:null}},st=class extends B{static values={snapshot:String,skip:Boolean};static get shouldLoad(){return W.param(`CONFIRM_EXIT`)}connect(){this.snapshotValue=this.snapshot}skip(){this.skipValue=!0}confirm(e){if(!this.shouldConfirm)return;let t=ot.trans(`CONFIRM_EXIT`);return e.preventDefault(),e.returnValue=t,t}get shouldConfirm(){return!this.skipValue&&this.snapshotValue!==this.snapshot}get snapshot(){return new URLSearchParams(new FormData(this.element)).toString()}},ct=class extends B{static values={remove:{type:Boolean,default:!0}};dismiss(e){if(e?.preventDefault(),this.dispatch(`dismissed`),this.removeValue){this.element.remove();return}this.element.hidden=!0}},lt=class extends B{static targets=[`toggle`,`menu`];static values={open:{type:Boolean,default:!1}};connect(){this.onDocumentClick=e=>{this.openValue&&!this.element.contains(e.target)&&(this.openValue=!1)},document.addEventListener(`click`,this.onDocumentClick),this.render()}disconnect(){document.removeEventListener(`click`,this.onDocumentClick)}toggle(e){e?.preventDefault(),e?.stopPropagation(),this.openValue=!this.openValue}open(e){e?.preventDefault(),e?.stopPropagation(),this.openValue=!0}close(e){e?.preventDefault(),this.openValue=!1}closeAndFocus(e){this.openValue&&(e?.preventDefault(),this.openValue=!1,this.toggleTargets[0]?.focus())}navigate(e){let t=e.key===`ArrowDown`;if(!t&&e.key!==`ArrowUp`)return;if(e.preventDefault(),!this.openValue){this.openValue=!0,this.render(),this.focusItem(t?0:-1);return}let n=this.items(),r=n.indexOf(document.activeElement);if(r===-1){this.focusItem(t?0:-1);return}this.focusItem((r+(t?1:-1)+n.length)%n.length)}openValueChanged(){this.render(),this.dispatch(this.openValue?`opened`:`closed`)}render(){this.toggleTargets.forEach(e=>{e.setAttribute(`aria-expanded`,String(this.openValue))}),this.menuTargets.forEach(e=>{e.hidden=!this.openValue})}focusItem(e){this.items().at(e)?.focus()}items(){return this.menuTargets.flatMap(e=>[...e.querySelectorAll(`a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])`)])}},ut=class extends B{static targets=[`tab`,`tabStore`,`errorMark`];connect(){this.reveal=setTimeout(()=>{this.reveal=null,this.tabSelected&&this.showFirstTabWithErrors(`.adminata-field-error`)},0)}disconnect(){this.reveal!==null&&(clearTimeout(this.reveal),this.reveal=null)}checkValidity(){this.tabSelected&&this.showFirstTabWithErrors(`:invalid`)}prepareSubmit(){setTimeout(()=>{this.submitters.forEach(e=>{e.disabled=!0})},1),this.tabSelected&&(this.tabStoreTarget.value=this.tabSelected.getAttribute(`aria-controls`))}showFirstTabWithErrors(e){let t=null;this.tabTargets.forEach(n=>{let r=this.element.querySelector(`#${CSS.escape(n.getAttribute(`aria-controls`)??``)}`),i=n.querySelector(`[data-adminata-edit-target~="errorMark"]`);r&&r.querySelectorAll(e).length>0?(t||=(this.dispatch(`show`,{prefix:`adminata-tabs`,target:n}),n),i&&(i.hidden=!1)):i&&(i.hidden=!0)})}changeTab(e){let{history:t,location:n}=window,{search:r,href:i,origin:a}=n,o=e.currentTarget,s=new URLSearchParams(r);s.set(`_tab`,o.getAttribute(`aria-controls`));let c=new URL(i,a);c.search=s.toString(),t&&t.pushState({path:c.toString()},``,c.toString())}get tabSelected(){return this.tabTargets.find(e=>e.getAttribute(`aria-selected`)===`true`)}get submitters(){return this.element.querySelectorAll(`button`)}},dt=class extends B{static targets=[`form`,`group`,`advanced`,`submitter`];static outlets=[`adminata-filter-list`];static values={defaultValues:Object};connect(){let e=this.advancedTargets.find(e=>!e.hidden)!==void 0;this.advancedTargets.forEach(t=>{t.hidden=!e})}prepareSubmit(){this.formElements.filter(e=>e.closest(`[hidden]`)).forEach(e=>$e(e));let e=tt(U({filter:this.defaultValuesValue})),t=[];if(this.formElements.forEach(n=>{let r=n.multiple?[]:``,i=e[n.name]||r,a=et(n)||r;if(JSON.stringify(i)===JSON.stringify(a))n.removeAttribute(`name`);else if(n.multiple&&JSON.stringify(a)===`[]`){let e=n.name.substring(0,n.name.length-2),t=document.createElement(`input`);t.type=`hidden`,t.name=e,t.value=``,this.formTarget.appendChild(t),n.removeAttribute(`name`)}else t.push(n)}),t.length===0){let e=document.createElement(`input`);e.type=`hidden`,e.name=`filters`,e.value=`reset`,this.formTarget.appendChild(e)}this.submitterTarget.disabled=!0}toggleAdvanced(){this.advancedTargets.forEach(e=>{e.hidden=!e.hidden})}toggleFilter(e,t){let n=this.groupTargets.find(t=>e===t.id);n&&(n.hidden=!t,this.element.hidden=!this.visibleGroups.length)}hideFilter({params:e}){this.toggleFilter(e.id,!1),this.adminataFilterListOutlet.disable(e.id)}get visibleGroups(){return this.groupTargets.filter(e=>!e.hidden)}get formElements(){return Array.from(this.formTarget.elements).filter(e=>[`select`,`textarea`,`input`].includes(e.tagName.toLowerCase())).filter(e=>e.name.includes(`filter`))}},ft=class extends B{static targets=[`counter`,`field`];static outlets=[`adminata-filter`];static classes=[`active`];connect(){this.updateCounter()}updateCounter(){this.counterTarget.innerHTML=this.enabledFields.length}disable(e){let t=this.fieldTargets.find(t=>e===t.dataset.filter);t&&(t.classList.remove(this.activeClass),this.updateCounter())}toggle(e){let t=e.currentTarget,n=t.classList.contains(this.activeClass);t.classList.toggle(this.activeClass,!n),this.adminataFilterOutlet.toggleFilter(t.dataset.filter,!n),this.updateCounter()}get enabledFields(){return this.fieldTargets.filter(e=>e.classList.contains(this.activeClass))}},pt=class extends B{static targets=[`sidebar`,`overlay`,`toggle`,`collapseOnly`,`content`,`headerMenu`,`headerMenuToggle`];static values={collapsed:{type:Boolean,default:!1},mobileOpen:{type:Boolean,default:!1},headerMenuOpen:{type:Boolean,default:!1},breakpoint:{type:Number,default:1024},cookieName:{type:String,default:`adminata_sidebar_hide`}};initialize(){this.query=window.matchMedia(`(min-width: ${this.breakpointValue}px)`),this.connected=!1}connect(){this.onBreakpointChange=e=>{e.matches&&(this.mobileOpenValue=!1)},this.query.addEventListener(`change`,this.onBreakpointChange),this.render(),this.connected=!0}disconnect(){this.query.removeEventListener(`change`,this.onBreakpointChange)}toggleSidebar(e){e?.preventDefault(),this.query.matches?this.collapsedValue=!this.collapsedValue:this.mobileOpenValue=!this.mobileOpenValue}toggleCollapsed(e){e?.preventDefault(),this.collapsedValue=!this.collapsedValue}closeSidebar(e){e?.preventDefault(),this.mobileOpenValue=!1}toggleHeaderMenu(e){e?.preventDefault(),this.headerMenuOpenValue=!this.headerMenuOpenValue}collapsedValueChanged(){this.render(),this.connected&&(this.writeCookie(),this.announceSidebar())}mobileOpenValueChanged(){this.render(),this.connected&&this.announceSidebar()}headerMenuOpenValueChanged(){this.render(),this.connected&&this.dispatch(`header-menu-changed`,{detail:{open:this.headerMenuOpenValue}})}announceSidebar(){this.dispatch(`sidebar-changed`,{detail:{collapsed:this.collapsedValue,mobileOpen:this.mobileOpenValue}})}render(){this.element.dataset.sidebar=this.collapsedValue?`collapsed`:`expanded`,this.element.dataset.sidebarMobile=this.mobileOpenValue?`open`:`closed`,this.hasOverlayTarget&&(this.overlayTarget.hidden=!this.mobileOpenValue),this.hasContentTarget&&(this.contentTarget.inert=this.mobileOpenValue),this.hasHeaderMenuTarget&&(this.headerMenuTarget.hidden=!this.headerMenuOpenValue),this.toggleTargets.forEach(e=>{e.setAttribute(`aria-expanded`,String(this.mobileOpenValue))}),this.collapseOnlyTargets.forEach(e=>{e.setAttribute(`aria-expanded`,String(!this.collapsedValue))}),this.headerMenuToggleTargets.forEach(e=>{e.setAttribute(`aria-expanded`,String(this.headerMenuOpenValue))})}writeCookie(){let e=encodeURIComponent(this.cookieNameValue),t=window.location.protocol===`https:`?`; Secure`:``;document.cookie=this.collapsedValue?`${e}=1; path=/; max-age=31536000; SameSite=Lax${t}`:`${e}=; path=/; max-age=0; SameSite=Lax${t}`}},mt=class extends B{static targets=[`item`];static values={unit:{type:Number,default:4}};connect(){this.widths=new WeakMap,this.gap=parseFloat(getComputedStyle(this.element).columnGap)||0,this.element.style.gridAutoRows=`${this.unitValue}px`,this.element.style.rowGap=`0px`,this.observer=new ResizeObserver(e=>{if(e.some(e=>{let t=e.target.getBoundingClientRect().width;return t>0&&t!==this.widths.get(e.target)})){this.pack();return}for(let t of e)this.fit(t.target)}),this.itemTargets.forEach(e=>this.observer.observe(e)),this.pack()}disconnect(){this.observer.disconnect(),this.itemTargets.forEach(e=>{this.release(e),e.style.removeProperty(`grid-row-end`),e.style.removeProperty(`align-self`)}),this.element.style.removeProperty(`grid-auto-rows`),this.element.style.removeProperty(`row-gap`)}itemTargetConnected(e){this.observer&&(this.observer.observe(e),this.fit(e))}itemTargetDisconnected(e){this.observer&&this.observer.unobserve(e)}pack(){let e=this.itemTargets;e.forEach(e=>this.release(e));let t=this.tracks();e.forEach(e=>{this.widths.set(e,e.getBoundingClientRect().width),this.fit(e)});let n=e.map(e=>this.columnOf(e,t));e.forEach((e,t)=>this.pin(e,n[t]))}tracks(){return getComputedStyle(this.element).gridTemplateColumns.split(` `).map(e=>parseFloat(e)).filter(e=>!Number.isNaN(e))}fit(e){e.style.alignSelf=`start`;let t=e.getBoundingClientRect().height;t!==0&&(e.style.gridRowEnd=`span ${Math.max(1,Math.ceil((t+this.gap)/this.unitValue))}`)}columnOf(e,t){let n=getComputedStyle(this.element),r=this.element.getBoundingClientRect(),i=e.getBoundingClientRect(),a=n.direction===`rtl`?r.right-(parseFloat(n.paddingRight)||0)-i.right:i.left-r.left-(parseFloat(n.paddingLeft)||0),o=0;for(let e=0;ee.toLowerCase().normalize(`NFD`).replace(/\p{M}/gu,``).replace(/[łđðøħıßæœþ]/g,e=>ht[e]).replace(/\s+/g,` `).trim(),gt=class extends B{static targets=[`toggle`];static values={storageKey:{type:String,default:`adminata_sidebar_open`},breakpoint:{type:Number,default:1024}};initialize(){this.parked=null,this.opened=null,this.unfiltered=null,this.filteredOut=new Set,this.onOutsideClick=e=>{this.holds(e.target)||this.popup(null)},this.onKeydown=e=>{if(e.key!==`Escape`||this.opened===null)return;let t=this.opened;this.popup(null),t.focus()},this.onFocusOut=e=>{e.relatedTarget!==null&&!this.holds(e.relatedTarget)&&this.popup(null)},this.onReposition=()=>this.place()}connect(){this.shell=this.element.closest(`[data-sidebar]`),this.query=window.matchMedia(`(min-width: ${this.breakpointValue}px)`),this.wide=this.query.matches,this.onBreakpointChange=e=>{this.wide=e.matches,this.sync()},this.query.addEventListener(`change`,this.onBreakpointChange),this.observer=new MutationObserver(()=>this.sync()),this.shell!==null&&this.observer.observe(this.shell,{attributes:!0,attributeFilter:[`data-sidebar`]}),this.restore(),this.sync()}disconnect(){this.query.removeEventListener(`change`,this.onBreakpointChange),this.observer.disconnect(),this.unfilter(),this.leaveRail(),this.toggleTargets.forEach(e=>this.settle(this.panelFor(e)))}toggle(e){let t=e.currentTarget;if(this.parked?.has(t)){this.popup(t===this.opened?null:t);return}this.isPinned(t)||(this.setExpanded(t,t.getAttribute(`aria-expanded`)!==`true`,{animate:!0}),this.remember())}collapseAll(){this.toggleTargets.forEach(e=>{this.isPinned(e)||this.setOpen(e,!1,{animate:!0})}),this.remember()}expandAll(){this.toggleTargets.forEach(e=>this.setOpen(e,!0,{animate:!0})),this.remember()}filter(e){let t=K(e).split(` `).filter(e=>e!==``);t.length===0?this.unfilter():(this.unfiltered??=new Map(this.toggleTargets.map(e=>[e,this.isOpen(e)])),this.narrow(t));let n=this.visibleLinks().length;return this.dispatch(`filtered`,{detail:{query:e,active:0e.closest(`li[hidden]`)===null)}narrow(e){let t=null;for(let n of this.element.querySelector(`:scope > ul`)?.children??[]){let r=n.querySelector(`:scope > .adm-menu-group-title`);if(r!==null)t!==null&&this.show(t.header,t.shown),t={header:n,name:K(r.textContent??``),shown:!1};else if(!n.classList.contains(`adm-menu-popup-title`)){let r=this.narrowItem(n,t?.name??``,e);this.show(n,r),t!==null&&(t.shown||=r)}}t!==null&&this.show(t.header,t.shown)}narrowItem(e,t,n){let r=e.querySelector(`:scope > a, :scope > button`),i=`${t} ${K((r?.querySelector(`.menu-item-text`)??r)?.textContent??``)}`,a=this.toggleTargets.find(t=>t.parentElement===e),o=a===void 0?null:this.panelFor(a);if(a===void 0||o===null)return r!==null&&n.every(e=>i.includes(e));let s=!1;for(let e of o.children)if(!e.classList.contains(`adm-menu-popup-title`)){let t=this.narrowItem(e,i,n);this.show(e,t),s||=t}return s&&this.setOpen(a,!0),s}show(e,t){e instanceof HTMLElement&&(t?this.filteredOut.delete(e)&&(e.hidden=!1):e.hidden||(e.hidden=!0,this.filteredOut.add(e)))}unfilter(){this.filteredOut.forEach(e=>{e.hidden=!1}),this.filteredOut.clear(),this.unfiltered?.forEach((e,t)=>this.setOpen(t,e)),this.unfiltered=null}restore(){let e=this.read();this.toggleTargets.forEach(t=>{let n=this.keyFor(t),r=this.isOpen(t);if(r||this.isPinned(t)||!(n in e)){this.setOpen(t,r||this.isPinned(t));return}this.setOpen(t,e[n])})}sync(){this.wide&&this.shell?.dataset.sidebar===`collapsed`?this.enterRail():this.leaveRail()}enterRail(){this.parked===null&&(this.unfiltered!==null&&this.filter(``),this.parked=new Map,this.toggleTargets.forEach(e=>{this.isTopLevel(e)&&(this.parked.set(e,e.getAttribute(`aria-expanded`)===`true`),this.settle(this.panelFor(e)),e.setAttribute(`aria-expanded`,`false`))}),this.element.dataset.adminataMenuRail=``)}leaveRail(){this.parked!==null&&(this.popup(null),this.parked.forEach((e,t)=>t.setAttribute(`aria-expanded`,String(e))),this.parked=null,delete this.element.dataset.adminataMenuRail)}popup(e){if(e!==this.opened){if(this.opened!==null&&(this.opened.setAttribute(`aria-expanded`,`false`),this.unplace(this.panelFor(this.opened))),this.opened=e,e===null){this.unlisten();return}e.setAttribute(`aria-expanded`,`true`),this.place(),this.listen()}}place(){let e=this.opened===null?null:this.panelFor(this.opened);if(e===null)return;let t=(this.element.closest(`aside`)??this.element).getBoundingClientRect(),n=this.opened.getBoundingClientRect(),r=e.getBoundingClientRect(),i=e.firstElementChild?.getBoundingClientRect()??r,a=n.top+n.height/2-(i.top-r.top+i.height/2),o=document.documentElement.clientHeight-G,s=Math.max(G,Math.min(a,o-r.height)),c=window.getComputedStyle(this.element).direction===`rtl`;e.style.setProperty(`--adm-menu-popup-top`,`${s}px`),e.style.setProperty(`--adm-menu-popup-start`,`${c?document.documentElement.clientWidth-t.left:t.right}px`)}unplace(e){e?.style.removeProperty(`--adm-menu-popup-top`),e?.style.removeProperty(`--adm-menu-popup-start`)}listen(){document.addEventListener(`click`,this.onOutsideClick),document.addEventListener(`keydown`,this.onKeydown),this.element.addEventListener(`focusout`,this.onFocusOut),window.addEventListener(`resize`,this.onReposition),document.addEventListener(`scroll`,this.onReposition,{capture:!0,passive:!0})}unlisten(){document.removeEventListener(`click`,this.onOutsideClick),document.removeEventListener(`keydown`,this.onKeydown),this.element.removeEventListener(`focusout`,this.onFocusOut),window.removeEventListener(`resize`,this.onReposition),document.removeEventListener(`scroll`,this.onReposition,{capture:!0})}holds(e){return this.opened===null||!(e instanceof Node)?!1:this.opened.contains(e)||!0===this.panelFor(this.opened)?.contains(e)}isOpen(e){return this.parked?.get(e)??e.getAttribute(`aria-expanded`)===`true`}setOpen(e,t,n={}){if(this.parked?.has(e)){this.parked.set(e,t);return}this.setExpanded(e,t,n)}isTopLevel(e){return e.parentElement?.closest(`.menu-dropdown`)===null}setExpanded(e,t,{animate:n=!1}={}){let r=e.getAttribute(`aria-expanded`)===`true`,i=this.panelFor(e),a=n&&i!==null&&t!==r,o=a?this.heightOf(i,r):0;e.setAttribute(`aria-expanded`,String(t)),a&&this.slide(i,t,o)}heightOf(e,t){return e.dataset.sliding===void 0?t?e.scrollHeight:0:e.getBoundingClientRect().height}panelFor(e){let t=e.nextElementSibling;return t instanceof HTMLElement&&t.classList.contains(`menu-dropdown`)?t:null}slide(e,t,n){e.style.removeProperty(`height`),t?e.style.removeProperty(`display`):e.style.display=`flex`;let r=t?e.scrollHeight:0;e.dataset.sliding=``,e.style.height=`${n}px`,e.offsetHeight,e.style.height=`${r}px`;let i=t=>{(t===void 0||t.propertyName===`height`)&&(e.removeEventListener(`transitionend`,i),this.settle(e))};e.addEventListener(`transitionend`,i),(n===r||window.matchMedia(`(prefers-reduced-motion: reduce)`).matches)&&i()}settle(e,{keepHidden:t=!1}={}){e!==null&&(delete e.dataset.sliding,e.style.removeProperty(`height`),t||e.style.removeProperty(`display`))}remember(){if(this.unfiltered!==null)return;let e={};this.toggleTargets.forEach(t=>{e[this.keyFor(t)]=this.isOpen(t)}),this.write(e)}keyFor(e){return(e.textContent??``).trim()}isPinned(e){return e.dataset.adminataMenuKeepOpen===`true`}read(){try{let e=JSON.parse(window.localStorage.getItem(this.storageKeyValue)??`{}`);return typeof e==`object`&&e?e:{}}catch{return{}}}write(e){try{window.localStorage.setItem(this.storageKeyValue,JSON.stringify(e))}catch{}}},_t=class extends B{static targets=[`input`,`empty`];static outlets=[`adminata-menu`];connect(){this.offer()}adminataMenuOutletConnected(){this.offer()}adminataMenuOutletDisconnected(){this.offer()}filter(){this.adminataMenuOutlets.forEach(e=>e.filter(this.inputTarget.value))}clear(e){this.inputTarget.value!==``&&(e.preventDefault(),this.inputTarget.value=``,this.filter())}follow(e){let t=this.firstLink();t!==null&&(e.preventDefault(),t.click())}focusFirst(e){let t=this.firstLink();t!==null&&(e.preventDefault(),t.focus())}sync({target:e,detail:t}){this.adminataMenuOutlets.some(t=>t.element===e)&&(!t.active&&this.inputTarget.value.trim()!==``&&(this.inputTarget.value=``),this.emptyTarget.hidden=!t.active||0e.visibleLinks())[0]??null}offer(){this.element.hidden=!this.adminataMenuOutlets.some(e=>e.element.querySelector(`a[href]`)!==null)}},q={sm:`adm-dialog-sm`,md:``,lg:`adm-dialog-lg`,list:`adm-dialog-list`},vt=class extends B{static targets=[`dialog`];static values={size:{type:String,default:`md`},closable:{type:Boolean,default:!0},backdrop:{type:Boolean,default:!0}};connect(){this.dialog=this.hasDialogTarget?this.dialogTarget:null,this.dialog!==null&&(this.dialog.classList.add(`adm-dialog`),this.applySize(),this.onClose=()=>this.dispatch(`closed`,{detail:{dialog:this.dialog}}),this.onCancel=e=>{this.closableValue||e.preventDefault()},this.onBackdropClick=e=>{this.closableValue&&this.backdropValue&&e.target===this.dialog&&this.dialog.close()},this.dialog.addEventListener(`close`,this.onClose),this.dialog.addEventListener(`cancel`,this.onCancel),this.dialog.addEventListener(`click`,this.onBackdropClick))}disconnect(){this.dialog&&(this.dialog.removeEventListener(`close`,this.onClose),this.dialog.removeEventListener(`cancel`,this.onCancel),this.dialog.removeEventListener(`click`,this.onBackdropClick))}open(e){e?.preventDefault(),this.dialog&&(this.dialog.showModal(),this.dispatch(`opened`,{detail:{dialog:this.dialog}}))}close(e){e?.preventDefault(),this.dialog?.close()}sizeValueChanged(){this.dialog&&this.applySize()}applySize(){Object.values(q).filter(Boolean).forEach(e=>this.dialog.classList.remove(e));let e=q[this.sizeValue];e&&this.dialog.classList.add(e)}},J=new WeakMap,yt=class extends B{static values={target:{type:String,default:`adminata-dialog`},title:String,text:String,content:String,size:String};open(e){e?.preventDefault();let t=document.getElementById(this.targetValue);if(!(t instanceof HTMLDialogElement))throw Error(`adminata-modal-trigger: there is no to open.`);this.fill(t);let n=this.application.getControllerForElementAndIdentifier(t,`adminata-modal`);if(n===null){t.showModal();return}if(this.hasSizeValue&&this.sizeValue!==``){let e=n.sizeValue;t.addEventListener(`close`,()=>n.sizeValue=e,{once:!0}),n.sizeValue=this.sizeValue}n.open()}fill(e){let t=e.getAttribute(`aria-labelledby`),n=t===null?null:document.getElementById(t),r=e.querySelector(`.adm-dialog__body`);if(n!==null&&(J.has(n)||J.set(n,n.textContent),n.textContent=this.hasTitleValue&&this.titleValue!==``?this.titleValue:J.get(n)),r!==null){if(this.hasContentValue&&this.contentValue!==``){let e=document.getElementById(this.contentValue);if(e===null)throw Error(`adminata-modal-trigger: there is no element "${this.contentValue}" to take the content from.`);r.innerHTML=e.innerHTML;return}r.textContent=this.hasTextValue?this.textValue:``}}},bt=class extends B{reload(){this.submitters.forEach(e=>{e.disabled=!0}),window.top.location.href=this.element.options[this.element.selectedIndex].value}get submitters(){return document.querySelectorAll(`input[type=submit], button[type=submit]`)}},Y=new WeakMap,xt=class extends B{static values={target:{type:String,default:`adminata-question-dialog`},text:String,title:String,confirm:String,cancel:String};ask(e){if(this.confirmed){this.confirmed=!1;return}e?.preventDefault(),this.submitter=e?.submitter instanceof HTMLElement?e.submitter:null;let t=document.getElementById(this.targetValue);if(!(t instanceof HTMLDialogElement))throw Error(`adminata-question: there is no to ask in.`);let n=t.querySelector(`[data-adminata-question-confirm]`);if(!(n instanceof HTMLButtonElement))throw Error(`adminata-question: has no confirm button.`);this.fill(t,n);let r=!1,i=()=>{r=!0,t.close(),this.dispatch(`confirmed`,{cancelable:!0}).defaultPrevented||this.follow()};n.addEventListener(`click`,i),t.addEventListener(`close`,()=>{n.removeEventListener(`click`,i),r||this.dispatch(`cancelled`)},{once:!0});let a=this.application.getControllerForElementAndIdentifier(t,`adminata-modal`);a===null?t.showModal():a.open(),n.focus()}fill(e,t){let n=e.getAttribute(`aria-labelledby`),r=n===null?null:document.getElementById(n),i=e.querySelector(`[data-adminata-question-text]`),a=e.querySelector(`[data-adminata-question-cancel]`);for(let[e,n]of[[r,this.hasTitleValue?this.titleValue:``],[t,this.hasConfirmValue?this.confirmValue:``],[a,this.hasCancelValue?this.cancelValue:``]])e!==null&&(Y.has(e)||Y.set(e,e.textContent),e.textContent=n===``?Y.get(e):n);i!==null&&(i.textContent=this.hasTextValue?this.textValue:``)}follow(){let e=this.element;if(e instanceof HTMLFormElement){let t=this.submitter?.form===e&&this.submitter.type===`submit`?this.submitter:void 0;this.confirmed=!0;try{e.requestSubmit(t)}finally{this.confirmed=!1}return}if((e instanceof HTMLButtonElement||e instanceof HTMLInputElement)&&e.form){e.type===`submit`?e.form.requestSubmit(e):e.form.requestSubmit();return}e instanceof HTMLAnchorElement&&e.href!==``&&window.location.assign(e.href)}},X=new WeakMap,Z=new ResizeObserver(e=>{e.forEach(e=>{let t=X.get(e.target);t&&t.resize()})}),St=class extends B{static targets=[`content`,`button`];static values={collapsedHeight:Number,moreText:String,lessText:String};connect(){X.set(this.contentTarget,this),Z.observe(this.contentTarget),this.contentTarget.style.maxHeight=`${this.collapsedHeightValue}px`,this.buttonTarget.innerHTML=this.moreTextValue}disconnect(){X.delete(this.contentTarget),Z.unobserve(this.contentTarget)}resize(){this.contentTarget.scrollHeight>this.contentTarget.clientHeight?this.contentTarget.classList.add(`truncated`):this.contentTarget.classList.remove(`truncated`)}toggle(){this.contentTarget.classList.toggle(`expanded`),this.contentTarget.classList.contains(`expanded`)?this.buttonTarget.innerHTML=this.lessTextValue:this.buttonTarget.innerHTML=this.moreTextValue}},Ct=class extends B{static values={target:String,when:String};connect(){this.onChange=()=>this.apply(),this.element.addEventListener(`change`,this.onChange),this.apply()}disconnect(){this.element.removeEventListener(`change`,this.onChange)}apply(){let e=this.accepted(),t=this.current().some(t=>e.includes(t));for(let e of this.sections())e.hidden=!t,e.classList.remove(`hidden`)}accepted(){let e=this.whenValue.trim();if(e.startsWith(`[`))try{let t=JSON.parse(e);if(Array.isArray(t))return t.map(String)}catch{}return[e]}current(){let e=this.element;return e instanceof HTMLSelectElement?[...e.selectedOptions].map(e=>e.value):e instanceof HTMLTextAreaElement?[e.value]:e instanceof HTMLInputElement?e.type===`checkbox`||e.type===`radio`?e.checked?[e.value]:[]:[e.value]:[...e.querySelectorAll(`input:checked`)].filter(e=>e instanceof HTMLInputElement).map(e=>e.value)}sections(){if(this.targetValue===``)return[];let e=this.element.parentElement;for(;e!==null&&e.querySelector(this.targetValue)===null;)e=e.parentElement;return[...(e??document).querySelectorAll(this.targetValue)]}},wt=class extends B{static targets=[`preview`];showPreview(e){let t=e.currentTarget;if(!(t instanceof HTMLAnchorElement))return;let n={method:`GET`,headers:{"X-Requested-With":`XMLHttpRequest`}};this.previewTarget.innerHTML=``,fetch(t.href,n).then(e=>e.text()).then(e=>{this.previewTarget.innerHTML=e})}},Tt=`a, button, input, select, textarea, label, summary, [role="button"], [contenteditable]`,Et=`.adminata-list-field-batch, .adminata-list-field-select, .adminata-list-field-actions`,Dt=class extends B{open(e){if(e.button!==0&&e.button!==1)return;let t=e.target instanceof Element?e.target.closest(`tr[data-adminata-row-link-url]`):null;if(t===null||!this.element.contains(t)||e.target.closest(Tt)!==null||e.target.closest(Et)!==null||this.hasSelection)return;let n=t.dataset.adminataRowLinkUrl;if(e.preventDefault(),e.button===1||e.ctrlKey||e.metaKey||e.shiftKey){window.open(n,`_blank`,`noopener`);return}window.location.assign(n)}get hasSelection(){let e=window.getSelection();return e!==null&&!e.isCollapsed&&e.toString().trim()!==``}},Ot=class extends B{static targets=[`collapse`,`expand`];static outlets=[`adminata-menu`];connect(){this.sync()}adminataMenuOutletConnected(){this.sync()}adminataMenuOutletDisconnected(){this.sync()}collapseAll(){this.adminataMenuOutlets.forEach(e=>e.collapseAll())}expandAll(){this.adminataMenuOutlets.forEach(e=>e.expandAll())}sync(){let e=this.adminataMenuOutlets.some(e=>e.hasToggleTarget);[...this.collapseTargets,...this.expandTargets].forEach(t=>{t.hidden=!e})}},kt=class extends B{static targets=[`topNavbar`,`navbar`,`action`];static get shouldLoad(){return W.param(`USE_STICKYFORMS`)}connect(){this.resizeObserver=new ResizeObserver(this.resize.bind(this)),this.hasActionTarget&&this.resizeObserver.observe(this.actionTarget),this.hasNavbarTarget&&this.resizeObserver.observe(this.navbarTarget)}disconnect(){this.resizeObserver.disconnect()}resize(e){e.forEach(e=>{this.hasActionTarget&&e.target===this.actionTarget?this.actionIntersect():this.hasNavbarTarget&&e.target===this.navbarTarget&&this.navbarIntersect()})}actionIntersect(){let e=this.actionTarget.closest(`.action-sentinel`)||V(this.actionTarget);e.classList.add(`action-sentinel`),e.style.height=`${this.actionTarget.offsetHeight}px`,new IntersectionObserver(([e])=>{e.isIntersecting?this.actionTarget.classList.remove(`stuck`):this.actionTarget.classList.add(`stuck`)},{rootMargin:`0px 0px -${e.offsetHeight}px 0px`,threshold:[0,1]}).observe(e)}navbarIntersect(){let e=this.navbarTarget.closest(`.navbar-sentinel`)||V(this.navbarTarget);e.classList.add(`navbar-sentinel`),e.style.height=`${this.navbarTarget.offsetHeight}px`,new IntersectionObserver(([e])=>{e.isIntersecting?this.navbarTarget.classList.remove(`stuck`):this.navbarTarget.classList.add(`stuck`)},{rootMargin:`-${this.topNavbarTarget.offsetHeight+e.offsetHeight}px 0px 0px 0px`,threshold:[0,1]}).observe(e)}},At=class extends B{static targets=[`tab`,`panel`];connect(){this.onShow=e=>{let t=this.tabTargets.find(t=>t===e.target||t.contains(e.target));t&&this.show(t)},this.element.addEventListener(`adminata-tabs:show`,this.onShow);let e=this.selected??this.tabTargets[0];e&&this.show(e)}disconnect(){this.element.removeEventListener(`adminata-tabs:show`,this.onShow)}select(e){e.preventDefault(),this.show(e.currentTarget)}move(e){let t=this.tabTargets,n=t.indexOf(e.currentTarget);if(n===-1)return;let r={ArrowLeft:(n-1+t.length)%t.length,ArrowRight:(n+1)%t.length,Home:0,End:t.length-1};if(!(e.key in r))return;e.preventDefault();let i=t[r[e.key]];this.show(i),i.focus()}show(e){let t=e.getAttribute(`aria-controls`);for(let t of this.tabTargets){let n=t===e;t.setAttribute(`aria-selected`,n?`true`:`false`),t.setAttribute(`tabindex`,n?`0`:`-1`)}let n=null;for(let e of this.panelTargets){let r=e.id===t;e.hidden=!r,r&&(n=e)}this.dispatch(`shown`,{detail:{tab:e,panel:n}})}get selected(){return this.tabTargets.find(e=>e.getAttribute(`aria-selected`)===`true`)}},Q=[`light`,`dark`,`system`],jt={"adminata-autocomplete":nt,"adminata-batch":it,"adminata-collection":at,"adminata-confirm-exit":st,"adminata-dismiss":ct,"adminata-dropdown":lt,"adminata-edit":ut,"adminata-filter":dt,"adminata-filter-list":ft,"adminata-layout":pt,"adminata-masonry":mt,"adminata-menu":gt,"adminata-menu-filter":_t,"adminata-modal":vt,"adminata-modal-trigger":yt,"adminata-per-page":bt,"adminata-question":xt,"adminata-readmore":St,"adminata-reveal":Ct,"adminata-revision":wt,"adminata-row-link":Dt,"adminata-sidebar-toolbar":Ot,"adminata-sticky":kt,"adminata-tabs":At,"adminata-theme":class extends B{static targets=[`label`];static values={theme:{type:String,default:`system`},cookieName:{type:String,default:`adminata_theme`},labels:{type:Object,default:{}}};initialize(){this.query=window.matchMedia(`(prefers-color-scheme: dark)`),this.connected=!1}connect(){this.onSystemChange=()=>{this.themeValue===`system`&&this.paint()},this.query.addEventListener(`change`,this.onSystemChange),this.render(),this.connected=!0}disconnect(){this.query.removeEventListener(`change`,this.onSystemChange)}cycle(e){e?.preventDefault(),this.themeValue=Q[(Q.indexOf(this.themeValue)+1)%Q.length]}select(e){e?.preventDefault();let t=e?.params?.theme??e?.currentTarget?.dataset?.theme;Q.includes(t)&&(this.themeValue=t)}themeValueChanged(){this.render(),this.connected&&(this.writeCookie(),this.dispatch(`changed`,{detail:{theme:this.themeValue,dark:this.isDark()}}))}render(){this.paint(),this.element.setAttribute(`aria-label`,this.label()),this.element.title=this.label(),this.labelTargets.forEach(e=>{e.textContent=this.label()})}paint(){let e=document.documentElement;e.dataset.theme=this.themeValue,e.classList.toggle(`dark`,this.isDark())}isDark(){return this.themeValue===`dark`||this.themeValue===`system`&&this.query.matches}label(){let e=Q[(Q.indexOf(this.themeValue)+1)%Q.length];return this.labelsValue[e]??e}writeCookie(){let e=encodeURIComponent(this.cookieNameValue),t=window.location.protocol===`https:`?`; Secure`:``;document.cookie=`${e}=${this.themeValue}; path=/; max-age=31536000; SameSite=Lax${t}`}}};function Mt(e){for(let[t,n]of Object.entries(jt))e.register(t,n)}var $=Fe.start();$.debug=document.documentElement.dataset.adminataDebug===`true`,Mt($),window.adminataApplication=$,document.documentElement.classList.remove(`no-js`)})(); \ No newline at end of file +%o`,t,e,n),(r=window.onerror)==null||r.call(window,t,``,0,0,e)}logFormattedMessage(e,t,n={}){n=Object.assign({application:this},n),this.logger.groupCollapsed(`${e} #${t}`),this.logger.log(`details:`,Object.assign({},n)),this.logger.groupEnd()}};function Ie(){return new Promise(e=>{document.readyState==`loading`?document.addEventListener(`DOMContentLoaded`,()=>e()):e()})}function Le(e){return T(e,`classes`).reduce((e,t)=>Object.assign(e,Re(t)),{})}function Re(e){return{[`${e}Class`]:{get(){let{classes:t}=this;if(t.has(e))return t.get(e);{let n=t.getAttributeName(e);throw Error(`Missing attribute "${n}"`)}}},[`${e}Classes`]:{get(){return this.classes.getAll(e)}},[`has${d(e)}Class`]:{get(){return this.classes.has(e)}}}}function ze(e){return T(e,`outlets`).reduce((e,t)=>Object.assign(e,Be(t)),{})}function M(e,t,n){return e.application.getControllerForElementAndIdentifier(t,n)}function N(e,t,n){let r=M(e,t,n);if(r||(e.application.router.proposeToConnectScopeForElementAndIdentifier(t,n),r=M(e,t,n),r))return r}function Be(e){let t=u(e);return{[`${t}Outlet`]:{get(){let t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t){let n=N(this,t,e);if(n)return n;throw Error(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`)}throw Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}Outlets`]:{get(){let t=this.outlets.findAll(e);return t.length>0?t.map(t=>{let n=N(this,t,e);if(n)return n;console.warn(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`,t)}).filter(e=>e):[]}},[`${t}OutletElement`]:{get(){let t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t)return t;throw Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}OutletElements`]:{get(){return this.outlets.findAll(e)}},[`has${d(t)}Outlet`]:{get(){return this.outlets.has(e)}}}}function Ve(e){return T(e,`targets`).reduce((e,t)=>Object.assign(e,He(t)),{})}function He(e){return{[`${e}Target`]:{get(){let t=this.targets.find(e);if(t)return t;throw Error(`Missing target element "${e}" for "${this.identifier}" controller`)}},[`${e}Targets`]:{get(){return this.targets.findAll(e)}},[`has${d(e)}Target`]:{get(){return this.targets.has(e)}}}}function Ue(e){let t=he(e,`values`);return t.reduce((e,t)=>Object.assign(e,We(t)),{valueDescriptorMap:{get(){return t.reduce((e,t)=>{let n=P(t,this.identifier),r=this.data.getAttributeNameForKey(n.key);return Object.assign(e,{[r]:n})},{})}}})}function We(e,t){let n=P(e,t),{key:r,name:i,reader:a,writer:o}=n;return{[i]:{get(){let e=this.data.get(r);return e===null?n.defaultValue:a(e)},set(e){e===void 0?this.data.delete(r):this.data.set(r,o(e))}},[`has${d(i)}`]:{get(){return this.data.has(r)||n.hasCustomDefaultValue}}}}function P([e,t],n){return Je({controller:n,token:e,typeDefinition:t})}function F(e){switch(e){case Array:return`array`;case Boolean:return`boolean`;case Number:return`number`;case Object:return`object`;case String:return`string`}}function I(e){switch(typeof e){case`boolean`:return`boolean`;case`number`:return`number`;case`string`:return`string`}if(Array.isArray(e))return`array`;if(Object.prototype.toString.call(e)===`[object Object]`)return`object`}function Ge(e){let{controller:t,token:n,typeObject:r}=e,i=p(r.type),a=p(r.default),o=i&&a,s=i&&!a,c=!i&&a,l=F(r.type),u=I(e.typeObject.default);if(s)return l;if(c)return u;if(l!==u){let e=t?`${t}.${n}`:n;throw Error(`The specified default value for the Stimulus Value "${e}" must match the defined type "${l}". The provided default value of "${r.default}" is of type "${u}".`)}if(o)return l}function Ke(e){let{controller:t,token:n,typeDefinition:r}=e,i=Ge({controller:t,token:n,typeObject:r}),a=I(r),o=F(r),s=i||a||o;if(s)return s;let c=t?`${t}.${r}`:n;throw Error(`Unknown value type "${c}" for "${n}" value`)}function qe(e){let t=F(e);if(t)return L[t];let n=m(e,`default`),r=m(e,`type`),i=e;if(n)return i.default;if(r){let{type:e}=i,t=F(e);if(t)return L[t]}return e}function Je(e){let{token:t,typeDefinition:n}=e,r=`${f(t)}-value`,i=Ke(e);return{type:i,key:r,name:l(r),get defaultValue(){return qe(n)},get hasCustomDefaultValue(){return I(n)!==void 0},reader:Ye[i],writer:R[i]||R.default}}var L={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:``},Ye={array(e){let t=JSON.parse(e);if(!Array.isArray(t))throw TypeError(`expected value of type "array" but instead got value "${e}" of type "${I(t)}"`);return t},boolean(e){return e!=`0`&&String(e).toLowerCase()!=`false`},number(e){return Number(e.replace(/_/g,``))},object(e){let t=JSON.parse(e);if(typeof t!=`object`||!t||Array.isArray(t))throw TypeError(`expected value of type "object" but instead got value "${e}" of type "${I(t)}"`);return t},string(e){return e}},R={default:Xe,array:z,object:z};function z(e){return JSON.stringify(e)}function Xe(e){return`${e}`}var B=class{constructor(e){this.context=e}static get shouldLoad(){return!0}static afterLoad(e,t){}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get outlets(){return this.scope.outlets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(e,{target:t=this.element,detail:n={},prefix:r=this.identifier,bubbles:i=!0,cancelable:a=!0}={}){let o=r?`${r}:${e}`:e,s=new CustomEvent(o,{detail:n,bubbles:i,cancelable:a});return t.dispatchEvent(s),s}};B.blessings=[Le,Ve,Ue,ze],B.targets=[],B.outlets=[],B.values={};function V(e,t=document.createElement(`div`)){return e.parentNode.insertBefore(t,e),t.appendChild(e),t}function Ze(e){let t=document.createElement(`script`);return t.textContent=e.textContent,t.async=!1,[...e.attributes].forEach(({name:e,value:n})=>{t.setAttribute(e,n)}),t}function Qe(e){let t=document.createElement(`template`);return t.innerHTML=e,t.content}function H(e){return document.querySelector(`meta[name="${e}"]`)?.content}function $e(e){switch(e.tagName.toLowerCase()){case`select`:e.selectedIndex=-1;break;case`textarea`:case`input`:[`radio`,`checkbox`].includes(e.type.toLowerCase())?e.checked&&=!1:e.value=``}}function et(e){return e.options&&e.multiple?Array.from(e.options).filter(e=>e.selected).map(e=>e.value):e.value}function U(e,t=``){let n=[];for(let[r,i]of Object.entries(e)){let e=t===``?r:`${t}[${r}]`;if(typeof i==`object`&&i){let t=U(i,e);t!==``&&n.push(t);continue}let a=i==null?``:encodeURIComponent(String(i));n.push(`${encodeURIComponent(e)}=${a}`)}return n.join(`&`)}function tt(e){return e.split(`&`).reduce((e,t)=>{let n=decodeURIComponent(t.split(`=`)[0]),r=t.split(`=`)[1];return n.endsWith(`[]`)?(Object.prototype.hasOwnProperty.call(e,n)||(e[n]=[]),e[n].push(r)):e[n]=r,e},{})}var nt=class extends B{static targets=[`input`,`listbox`,`status`,`chips`,`hiddenInputs`,`itemTemplate`,`chipTemplate`];static values={url:String,requestParameters:{type:Object,default:{}},searchParameter:{type:String,default:`q`},pageParameter:{type:String,default:`_page`},perPageParameter:{type:String,default:`_per_page`},minLength:{type:Number,default:3},perPage:{type:Number,default:10},delay:{type:Number,default:100},multiple:Boolean,name:String,safeLabel:Boolean,disabled:Boolean,selected:{type:Array,default:[]},moreText:{type:String,default:`More`},minLengthText:{type:String,default:``},noResultsText:{type:String,default:``},loadingText:{type:String,default:``},removeText:{type:String,default:`Remove`}};initialize(){this.items=[],this.active=-1,this.page=1,this.more=!1,this.query=``,this.timer=null,this.request=null}connect(){this.multipleValue&&this.hasChipsTarget&&this.chipsTarget.replaceChildren(...this.selectedValue.map(e=>this.chip(e))),this.onDocumentClick=e=>{this.element.contains(e.target)||this.close()},document.addEventListener(`click`,this.onDocumentClick)}disconnect(){document.removeEventListener(`click`,this.onDocumentClick),window.clearTimeout(this.timer),this.request?.abort(),this.request=null}search(){window.clearTimeout(this.timer),!this.multipleValue&&this.selectedIds().length>0&&(this.hiddenInputsTarget.replaceChildren(this.hiddenInput(``)),this.dispatch(`cleared`));let e=this.inputTarget.value.trim();e.lengththis.load(e,1),this.delayValue)}navigate(e){let t={ArrowDown:()=>this.move(1),ArrowUp:()=>this.move(-1),Home:()=>this.moveTo(0),End:()=>this.moveTo(this.optionCount()-1),Enter:()=>this.choose(),Escape:()=>this.close(),Backspace:()=>this.removeLast()}[e.key];t!==void 0&&(e.key!==`Backspace`||this.inputTarget.value===``&&this.multipleValue)&&(e.key!==`Enter`||this.active!==-1)&&(e.preventDefault(),t())}async load(e,t){this.query=e,this.page=t,t===1&&this.announce(this.loadingTextValue),this.request?.abort();let n=new AbortController;this.request=n;let r={...this.requestParametersValue,[this.searchParameterValue]:e,[this.pageParameterValue]:t,[this.perPageParameterValue]:this.perPageValue},i;try{i=await fetch(`${this.urlValue}?${U(r)}`,{headers:{"X-Requested-With":`XMLHttpRequest`},signal:n.signal})}catch(e){if(e.name===`AbortError`)return;throw e}if(i.status===403){this.items=[],this.more=!1,this.render(this.minLengthMessage(e));return}let a=await i.json(),o=Array.isArray(a.items)?a.items:[];this.items=t===1?o:[...this.items,...o],this.more=!0===a.more,this.render(this.items.length===0?this.noResultsTextValue:``)}choose(){let e=this.items[this.active];e===void 0?this.more&&this.active===this.items.length&&this.load(this.query,this.page+1):this.select(e)}pick(e){e.preventDefault(),this.active=Number(e.currentTarget.dataset.adminataAutocompleteIndex),this.choose()}select(e){if(!this.multipleValue)this.hiddenInputsTarget.replaceChildren(this.hiddenInput(e.id)),this.inputTarget.value=this.plainLabel(e);else{if(this.selectedIds().includes(String(e.id))){this.close();return}this.hiddenInputsTarget.append(this.hiddenInput(e.id)),this.chipsTarget.append(this.chip(e)),this.inputTarget.value=``}this.items=[],this.more=!1,this.close(),this.announce(``),this.dispatch(`selected`,{detail:{id:e.id,label:this.labelOf(e)}})}remove(e){e.preventDefault(),this.removeId(e.currentTarget.closest(`[data-adminata-autocomplete-id]`).dataset.adminataAutocompleteId),this.inputTarget.focus()}removeLast(){let e=this.selectedIds();e.length!==0&&this.removeId(e[e.length-1])}removeId(e){this.hiddenInputs().filter(t=>t.value===String(e)).forEach(e=>e.remove()),this.hasChipsTarget&&[...this.chipsTarget.children].filter(t=>t.dataset.adminataAutocompleteId===String(e)).forEach(e=>e.remove()),this.dispatch(this.multipleValue?`removed`:`cleared`,{detail:{id:e}})}render(e){let t=this.items.map((e,t)=>this.option(e,t,!1));this.more&&t.push(this.option({label:this.moreTextValue},t.length,!0)),this.listboxTarget.replaceChildren(...t),this.open(t.length>0),this.highlight(),this.announce(e)}option(e,t,n){let r=this.itemTemplateTarget.content.firstElementChild.cloneNode(!0);return r.id=`${this.inputTarget.id}_option_${t}`,r.dataset.adminataAutocompleteIndex=String(t),r.setAttribute(`role`,`option`),r.setAttribute(`aria-selected`,`false`),this.write(r,this.labelOf(e),n),r}chip(e){let t=this.chipTemplateTarget.content.firstElementChild.cloneNode(!0);return t.dataset.adminataAutocompleteId=String(e.id),this.write(t.querySelector(`[data-label]`)??t,this.labelOf(e),!1),t.querySelector(`[data-remove]`)?.setAttribute(`aria-label`,`${this.removeTextValue} ${this.plainLabel(e)}`.trim()),t}write(e,t,n){this.safeLabelValue&&!n?e.innerHTML=t:e.textContent=t}labelOf(e){return String(e.label??e.text??``)}plainLabel(e){let t=this.labelOf(e);if(!this.safeLabelValue)return t;let n=document.createElement(`template`);return n.innerHTML=t,n.content.textContent.trim()}hiddenInput(e){let t=document.createElement(`input`);return t.type=`hidden`,t.name=this.multipleValue?`${this.nameValue}[]`:this.nameValue,t.value=String(e),t.disabled=this.disabledValue,t}hiddenInputs(){return[...this.hiddenInputsTarget.querySelectorAll(`input`)]}selectedIds(){return this.hiddenInputs().map(e=>e.value).filter(e=>e!==``)}optionCount(){return this.listboxTarget.querySelectorAll(`[role="option"]`).length}move(e){let t=this.optionCount();t!==0&&this.moveTo((this.active+e+t)%t)}moveTo(e){this.active=e,this.open(this.optionCount()>0),this.highlight()}highlight(){let e=[...this.listboxTarget.querySelectorAll(`[role="option"]`)];e.forEach((e,t)=>e.setAttribute(`aria-selected`,String(t===this.active)));let t=e[this.active];t===void 0?this.inputTarget.removeAttribute(`aria-activedescendant`):(this.inputTarget.setAttribute(`aria-activedescendant`,t.id),t.scrollIntoView?.({block:`nearest`}))}open(e){this.listboxTarget.hidden=!e,this.inputTarget.setAttribute(`aria-expanded`,String(e))}close(){this.active=-1,this.open(!1),this.inputTarget.removeAttribute(`aria-activedescendant`)}announce(e){this.hasStatusTarget&&(this.statusTarget.textContent=e??``)}minLengthMessage(e){return this.minLengthTextValue.replace(`%count%`,String(Math.max(0,this.minLengthValue-e.length)))}},rt=`adminata-list-row-selected`,it=class extends B{static targets=[`all`,`row`];connect(){this.lastIndex=null,this.render()}toggleAll(){this.hasAllTarget&&(this.rowTargets.forEach(e=>{e.checked=this.allTarget.checked}),this.lastIndex=null,this.render())}toggleRow(e){let t=this.rowTargets.indexOf(e.currentTarget);if(t!==-1){if(e.shiftKey&&this.lastIndex!==null){let[n,r]=[this.lastIndex,t].sort((e,t)=>e-t);for(let t=n;t<=r;t+=1)this.rowTargets[t].checked=e.currentTarget.checked}this.lastIndex=t,this.render()}}render(){if(this.rowTargets.forEach(e=>{e.closest(`tr, div.adminata-list-field-batch`)?.classList.toggle(rt,e.checked)}),!this.hasAllTarget)return;let e=this.rowTargets.filter(e=>e.checked).length;this.allTarget.checked=e>0&&e===this.rowTargets.length,this.allTarget.indeterminate=e>0&&e{e.replaceWith(Ze(e))}),this.element.insertBefore(n,t),this.numItemsValue+=1,this.dispatch(`adminata-admin-append-form-element`,{prefix:``,detail:{item:n}}),this.dispatch(`adminata-collection-item-added`,{prefix:``,detail:{item:n}})}delete(e){let t=e.currentTarget,n=this.itemTargets.find(e=>e.contains(t));this.dispatch(`adminata-collection-item-deleted`,{prefix:``,detail:{item:n}}),n.remove(),this.dispatch(`adminata-collection-item-deleted-successful`,{prefix:``})}createItem(){let e=this.element.getAttribute(`id`),t=e.split(`_`),n=RegExp(`${e}_${this.prototypeName}`,`g`),r=RegExp(`${t[t.length-1]}\\]\\[${this.prototypeName}`,`g`);return Qe(this.prototype.replace(n,`${e}_${this.numItemsValue}`).replace(r,`${t[t.length-1]}][${this.numItemsValue}`)).firstElementChild}get prototype(){return this.element.getAttribute(`data-prototype`)||``}get prototypeName(){return this.element.getAttribute(`data-prototype-name`)||`__name__`}},W=new class{params=null;param(e){if(this.params===null){let e=H(`adminata-config`);if(e===void 0)return null;try{this.params=JSON.parse(e)}catch(e){throw Error(`An error has occurred resolving the "adminata-config" meta tag: ${e.message}.`,{cause:e})}}return e in this.params?this.params[e]:null}},ot=new class{messages=null;trans(e){if(this.messages===null)try{this.messages=JSON.parse(H(`adminata-translations`))}catch(e){throw Error(`An error has occurred resolving the "adminata-translations" meta tag: ${e.message}.`,{cause:e})}return e in this.messages?this.messages[e]:null}},st=class extends B{static values={snapshot:String,skip:Boolean};static get shouldLoad(){return W.param(`CONFIRM_EXIT`)}connect(){this.snapshotValue=this.snapshot}skip(){this.skipValue=!0}confirm(e){if(!this.shouldConfirm)return;let t=ot.trans(`CONFIRM_EXIT`);return e.preventDefault(),e.returnValue=t,t}get shouldConfirm(){return!this.skipValue&&this.snapshotValue!==this.snapshot}get snapshot(){return new URLSearchParams(new FormData(this.element)).toString()}},ct=class extends B{static values={remove:{type:Boolean,default:!0}};dismiss(e){e?.preventDefault(),this.dispatch(`dismissed`),this.removeValue?this.element.remove():this.element.hidden=!0}},lt=class extends B{static targets=[`toggle`,`menu`];static values={open:{type:Boolean,default:!1}};connect(){this.onDocumentClick=e=>{this.openValue&&!this.element.contains(e.target)&&(this.openValue=!1)},document.addEventListener(`click`,this.onDocumentClick),this.render()}disconnect(){document.removeEventListener(`click`,this.onDocumentClick)}toggle(e){e?.preventDefault(),e?.stopPropagation(),this.openValue=!this.openValue}open(e){e?.preventDefault(),e?.stopPropagation(),this.openValue=!0}close(e){e?.preventDefault(),this.openValue=!1}closeAndFocus(e){this.openValue&&(e?.preventDefault(),this.openValue=!1,this.toggleTargets[0]?.focus())}navigate(e){let t=e.key===`ArrowDown`;if(!t&&e.key!==`ArrowUp`)return;if(e.preventDefault(),!this.openValue){this.openValue=!0,this.render(),this.focusItem(t?0:-1);return}let n=this.items(),r=n.indexOf(document.activeElement);r===-1?this.focusItem(t?0:-1):this.focusItem((r+(t?1:-1)+n.length)%n.length)}openValueChanged(){this.render(),this.dispatch(this.openValue?`opened`:`closed`)}render(){this.toggleTargets.forEach(e=>{e.setAttribute(`aria-expanded`,String(this.openValue))}),this.menuTargets.forEach(e=>{e.hidden=!this.openValue})}focusItem(e){this.items().at(e)?.focus()}items(){return this.menuTargets.flatMap(e=>[...e.querySelectorAll(`a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])`)])}},ut=class extends B{static targets=[`tab`,`tabStore`,`errorMark`];connect(){this.reveal=setTimeout(()=>{this.reveal=null,this.tabSelected&&this.showFirstTabWithErrors(`.adminata-field-error`)},0)}disconnect(){this.reveal!==null&&(clearTimeout(this.reveal),this.reveal=null)}checkValidity(){this.tabSelected&&this.showFirstTabWithErrors(`:invalid`)}prepareSubmit(){setTimeout(()=>{this.submitters.forEach(e=>{e.disabled=!0})},1),this.tabSelected&&(this.tabStoreTarget.value=this.tabSelected.getAttribute(`aria-controls`))}showFirstTabWithErrors(e){let t=null;this.tabTargets.forEach(n=>{let r=this.element.querySelector(`#${CSS.escape(n.getAttribute(`aria-controls`)??``)}`),i=n.querySelector(`[data-adminata-edit-target~="errorMark"]`);r&&r.querySelectorAll(e).length>0?(t||=(this.dispatch(`show`,{prefix:`adminata-tabs`,target:n}),n),i&&(i.hidden=!1)):i&&(i.hidden=!0)})}changeTab(e){let{history:t,location:n}=window,{search:r,href:i,origin:a}=n,o=e.currentTarget,s=new URLSearchParams(r);s.set(`_tab`,o.getAttribute(`aria-controls`));let c=new URL(i,a);c.search=s.toString(),t&&t.pushState({path:c.toString()},``,c.toString())}get tabSelected(){return this.tabTargets.find(e=>e.getAttribute(`aria-selected`)===`true`)}get submitters(){return this.element.querySelectorAll(`button`)}},dt=class extends B{static targets=[`form`,`group`,`advanced`,`submitter`];static outlets=[`adminata-filter-list`];static values={defaultValues:Object};connect(){let e=this.advancedTargets.find(e=>!e.hidden)!==void 0;this.advancedTargets.forEach(t=>{t.hidden=!e})}prepareSubmit(){this.formElements.filter(e=>e.closest(`[hidden]`)).forEach(e=>$e(e));let e=tt(U({filter:this.defaultValuesValue})),t=[];if(this.formElements.forEach(n=>{let r=n.multiple?[]:``,i=e[n.name]||r,a=et(n)||r;if(JSON.stringify(i)===JSON.stringify(a))n.removeAttribute(`name`);else if(n.multiple&&JSON.stringify(a)===`[]`){let e=n.name.substring(0,n.name.length-2),t=document.createElement(`input`);t.type=`hidden`,t.name=e,t.value=``,this.formTarget.appendChild(t),n.removeAttribute(`name`)}else t.push(n)}),t.length===0){let e=document.createElement(`input`);e.type=`hidden`,e.name=`filters`,e.value=`reset`,this.formTarget.appendChild(e)}this.submitterTarget.disabled=!0}toggleAdvanced(){this.advancedTargets.forEach(e=>{e.hidden=!e.hidden})}toggleFilter(e,t){let n=this.groupTargets.find(t=>e===t.id);n&&(n.hidden=!t,this.element.hidden=!this.visibleGroups.length)}hideFilter({params:e}){this.toggleFilter(e.id,!1),this.adminataFilterListOutlet.disable(e.id)}get visibleGroups(){return this.groupTargets.filter(e=>!e.hidden)}get formElements(){return Array.from(this.formTarget.elements).filter(e=>[`select`,`textarea`,`input`].includes(e.tagName.toLowerCase())).filter(e=>e.name.includes(`filter`))}},ft=class extends B{static targets=[`counter`,`field`];static outlets=[`adminata-filter`];static classes=[`active`];connect(){this.updateCounter()}updateCounter(){this.counterTarget.innerHTML=this.enabledFields.length}disable(e){let t=this.fieldTargets.find(t=>e===t.dataset.filter);t&&(t.classList.remove(this.activeClass),this.updateCounter())}toggle(e){let t=e.currentTarget,n=t.classList.contains(this.activeClass);t.classList.toggle(this.activeClass,!n),this.adminataFilterOutlet.toggleFilter(t.dataset.filter,!n),this.updateCounter()}get enabledFields(){return this.fieldTargets.filter(e=>e.classList.contains(this.activeClass))}},pt=class extends B{static targets=[`sidebar`,`overlay`,`toggle`,`collapseOnly`,`content`,`headerMenu`,`headerMenuToggle`];static values={collapsed:{type:Boolean,default:!1},mobileOpen:{type:Boolean,default:!1},headerMenuOpen:{type:Boolean,default:!1},breakpoint:{type:Number,default:1024},cookieName:{type:String,default:`adminata_sidebar_hide`}};initialize(){this.query=window.matchMedia(`(min-width: ${this.breakpointValue}px)`),this.connected=!1}connect(){this.onBreakpointChange=e=>{e.matches&&(this.mobileOpenValue=!1)},this.query.addEventListener(`change`,this.onBreakpointChange),this.render(),this.connected=!0}disconnect(){this.query.removeEventListener(`change`,this.onBreakpointChange)}toggleSidebar(e){e?.preventDefault(),this.query.matches?this.collapsedValue=!this.collapsedValue:this.mobileOpenValue=!this.mobileOpenValue}toggleCollapsed(e){e?.preventDefault(),this.collapsedValue=!this.collapsedValue}closeSidebar(e){e?.preventDefault(),this.mobileOpenValue=!1}toggleHeaderMenu(e){e?.preventDefault(),this.headerMenuOpenValue=!this.headerMenuOpenValue}collapsedValueChanged(){this.render(),this.connected&&(this.writeCookie(),this.announceSidebar())}mobileOpenValueChanged(){this.render(),this.connected&&this.announceSidebar()}headerMenuOpenValueChanged(){this.render(),this.connected&&this.dispatch(`header-menu-changed`,{detail:{open:this.headerMenuOpenValue}})}announceSidebar(){this.dispatch(`sidebar-changed`,{detail:{collapsed:this.collapsedValue,mobileOpen:this.mobileOpenValue}})}render(){this.element.dataset.sidebar=this.collapsedValue?`collapsed`:`expanded`,this.element.dataset.sidebarMobile=this.mobileOpenValue?`open`:`closed`,this.hasOverlayTarget&&(this.overlayTarget.hidden=!this.mobileOpenValue),this.hasContentTarget&&(this.contentTarget.inert=this.mobileOpenValue),this.hasHeaderMenuTarget&&(this.headerMenuTarget.hidden=!this.headerMenuOpenValue),this.toggleTargets.forEach(e=>{e.setAttribute(`aria-expanded`,String(this.mobileOpenValue))}),this.collapseOnlyTargets.forEach(e=>{e.setAttribute(`aria-expanded`,String(!this.collapsedValue))}),this.headerMenuToggleTargets.forEach(e=>{e.setAttribute(`aria-expanded`,String(this.headerMenuOpenValue))})}writeCookie(){let e=encodeURIComponent(this.cookieNameValue),t=window.location.protocol===`https:`?`; Secure`:``;document.cookie=this.collapsedValue?`${e}=1; path=/; max-age=31536000; SameSite=Lax${t}`:`${e}=; path=/; max-age=0; SameSite=Lax${t}`}},mt=class extends B{static targets=[`item`];static values={unit:{type:Number,default:4}};connect(){this.widths=new WeakMap,this.gap=parseFloat(getComputedStyle(this.element).columnGap)||0,this.element.style.gridAutoRows=`${this.unitValue}px`,this.element.style.rowGap=`0px`,this.observer=new ResizeObserver(e=>{if(e.some(e=>{let t=e.target.getBoundingClientRect().width;return t>0&&t!==this.widths.get(e.target)}))this.pack();else for(let t of e)this.fit(t.target)}),this.itemTargets.forEach(e=>this.observer.observe(e)),this.pack()}disconnect(){this.observer.disconnect(),this.itemTargets.forEach(e=>{this.release(e),e.style.removeProperty(`grid-row-end`),e.style.removeProperty(`align-self`)}),this.element.style.removeProperty(`grid-auto-rows`),this.element.style.removeProperty(`row-gap`)}itemTargetConnected(e){this.observer&&(this.observer.observe(e),this.fit(e))}itemTargetDisconnected(e){this.observer&&this.observer.unobserve(e)}pack(){let e=this.itemTargets;e.forEach(e=>this.release(e));let t=this.tracks();e.forEach(e=>{this.widths.set(e,e.getBoundingClientRect().width),this.fit(e)});let n=e.map(e=>this.columnOf(e,t));e.forEach((e,t)=>this.pin(e,n[t]))}tracks(){return getComputedStyle(this.element).gridTemplateColumns.split(` `).map(e=>parseFloat(e)).filter(e=>!Number.isNaN(e))}fit(e){e.style.alignSelf=`start`;let t=e.getBoundingClientRect().height;t!==0&&(e.style.gridRowEnd=`span ${Math.max(1,Math.ceil((t+this.gap)/this.unitValue))}`)}columnOf(e,t){let n=getComputedStyle(this.element),r=this.element.getBoundingClientRect(),i=e.getBoundingClientRect(),a=n.direction===`rtl`?r.right-(parseFloat(n.paddingRight)||0)-i.right:i.left-r.left-(parseFloat(n.paddingLeft)||0),o=0;for(let e=0;ee.toLowerCase().normalize(`NFD`).replace(/\p{M}/gu,``).replace(/[łđðøħıßæœþ]/g,e=>ht[e]).replace(/\s+/g,` `).trim(),gt=class extends B{static targets=[`toggle`];static values={storageKey:{type:String,default:`adminata_sidebar_open`},breakpoint:{type:Number,default:1024}};initialize(){this.parked=null,this.opened=null,this.unfiltered=null,this.filteredOut=new Set,this.onOutsideClick=e=>{this.holds(e.target)||this.popup(null)},this.onKeydown=e=>{if(e.key!==`Escape`||this.opened===null)return;let t=this.opened;this.popup(null),t.focus()},this.onFocusOut=e=>{e.relatedTarget!==null&&!this.holds(e.relatedTarget)&&this.popup(null)},this.onReposition=()=>this.place()}connect(){this.shell=this.element.closest(`[data-sidebar]`),this.query=window.matchMedia(`(min-width: ${this.breakpointValue}px)`),this.wide=this.query.matches,this.onBreakpointChange=e=>{this.wide=e.matches,this.sync()},this.query.addEventListener(`change`,this.onBreakpointChange),this.observer=new MutationObserver(()=>this.sync()),this.shell!==null&&this.observer.observe(this.shell,{attributes:!0,attributeFilter:[`data-sidebar`]}),this.restore(),this.sync()}disconnect(){this.query.removeEventListener(`change`,this.onBreakpointChange),this.observer.disconnect(),this.unfilter(),this.leaveRail(),this.toggleTargets.forEach(e=>this.settle(this.panelFor(e)))}toggle(e){let t=e.currentTarget;this.parked?.has(t)?this.popup(t===this.opened?null:t):this.isPinned(t)||(this.setExpanded(t,t.getAttribute(`aria-expanded`)!==`true`,{animate:!0}),this.remember())}collapseAll(){this.toggleTargets.forEach(e=>{this.isPinned(e)||this.setOpen(e,!1,{animate:!0})}),this.remember()}expandAll(){this.toggleTargets.forEach(e=>this.setOpen(e,!0,{animate:!0})),this.remember()}filter(e){let t=K(e).split(` `).filter(e=>e!==``);t.length===0?this.unfilter():(this.unfiltered??=new Map(this.toggleTargets.map(e=>[e,this.isOpen(e)])),this.narrow(t));let n=this.visibleLinks().length;return this.dispatch(`filtered`,{detail:{query:e,active:0e.closest(`li[hidden]`)===null)}narrow(e){let t=null;for(let n of this.element.querySelector(`:scope > ul`)?.children??[]){let r=n.querySelector(`:scope > .adm-menu-group-title`);if(r!==null)t!==null&&this.show(t.header,t.shown),t={header:n,name:K(r.textContent??``),shown:!1};else if(!n.classList.contains(`adm-menu-popup-title`)){let r=this.narrowItem(n,t?.name??``,e);this.show(n,r),t!==null&&(t.shown||=r)}}t!==null&&this.show(t.header,t.shown)}narrowItem(e,t,n){let r=e.querySelector(`:scope > a, :scope > button`),i=`${t} ${K((r?.querySelector(`.menu-item-text`)??r)?.textContent??``)}`,a=this.toggleTargets.find(t=>t.parentElement===e),o=a===void 0?null:this.panelFor(a);if(a===void 0||o===null)return r!==null&&n.every(e=>i.includes(e));let s=!1;for(let e of o.children)if(!e.classList.contains(`adm-menu-popup-title`)){let t=this.narrowItem(e,i,n);this.show(e,t),s||=t}return s&&this.setOpen(a,!0),s}show(e,t){e instanceof HTMLElement&&(t?this.filteredOut.delete(e)&&(e.hidden=!1):e.hidden||(e.hidden=!0,this.filteredOut.add(e)))}unfilter(){this.filteredOut.forEach(e=>{e.hidden=!1}),this.filteredOut.clear(),this.unfiltered?.forEach((e,t)=>this.setOpen(t,e)),this.unfiltered=null}restore(){let e=this.read();this.toggleTargets.forEach(t=>{let n=this.keyFor(t),r=this.isOpen(t);r||this.isPinned(t)||!(n in e)?this.setOpen(t,r||this.isPinned(t)):this.setOpen(t,e[n])})}sync(){this.wide&&this.shell?.dataset.sidebar===`collapsed`?this.enterRail():this.leaveRail()}enterRail(){this.parked===null&&(this.unfiltered!==null&&this.filter(``),this.parked=new Map,this.toggleTargets.forEach(e=>{this.isTopLevel(e)&&(this.parked.set(e,e.getAttribute(`aria-expanded`)===`true`),this.settle(this.panelFor(e)),e.setAttribute(`aria-expanded`,`false`))}),this.element.dataset.adminataMenuRail=``)}leaveRail(){this.parked!==null&&(this.popup(null),this.parked.forEach((e,t)=>t.setAttribute(`aria-expanded`,String(e))),this.parked=null,delete this.element.dataset.adminataMenuRail)}popup(e){e!==this.opened&&(this.opened!==null&&(this.opened.setAttribute(`aria-expanded`,`false`),this.unplace(this.panelFor(this.opened))),this.opened=e,e===null?this.unlisten():(e.setAttribute(`aria-expanded`,`true`),this.place(),this.listen()))}place(){let e=this.opened===null?null:this.panelFor(this.opened);if(e===null)return;let t=(this.element.closest(`aside`)??this.element).getBoundingClientRect(),n=this.opened.getBoundingClientRect(),r=e.getBoundingClientRect(),i=e.firstElementChild?.getBoundingClientRect()??r,a=n.top+n.height/2-(i.top-r.top+i.height/2),o=document.documentElement.clientHeight-G,s=Math.max(G,Math.min(a,o-r.height)),c=window.getComputedStyle(this.element).direction===`rtl`;e.style.setProperty(`--adm-menu-popup-top`,`${s}px`),e.style.setProperty(`--adm-menu-popup-start`,`${c?document.documentElement.clientWidth-t.left:t.right}px`)}unplace(e){e?.style.removeProperty(`--adm-menu-popup-top`),e?.style.removeProperty(`--adm-menu-popup-start`)}listen(){document.addEventListener(`click`,this.onOutsideClick),document.addEventListener(`keydown`,this.onKeydown),this.element.addEventListener(`focusout`,this.onFocusOut),window.addEventListener(`resize`,this.onReposition),document.addEventListener(`scroll`,this.onReposition,{capture:!0,passive:!0})}unlisten(){document.removeEventListener(`click`,this.onOutsideClick),document.removeEventListener(`keydown`,this.onKeydown),this.element.removeEventListener(`focusout`,this.onFocusOut),window.removeEventListener(`resize`,this.onReposition),document.removeEventListener(`scroll`,this.onReposition,{capture:!0})}holds(e){return this.opened===null||!(e instanceof Node)?!1:this.opened.contains(e)||!0===this.panelFor(this.opened)?.contains(e)}isOpen(e){return this.parked?.get(e)??e.getAttribute(`aria-expanded`)===`true`}setOpen(e,t,n={}){this.parked?.has(e)?this.parked.set(e,t):this.setExpanded(e,t,n)}isTopLevel(e){return e.parentElement?.closest(`.menu-dropdown`)===null}setExpanded(e,t,{animate:n=!1}={}){let r=e.getAttribute(`aria-expanded`)===`true`,i=this.panelFor(e),a=n&&i!==null&&t!==r,o=a?this.heightOf(i,r):0;e.setAttribute(`aria-expanded`,String(t)),a&&this.slide(i,t,o)}heightOf(e,t){return e.dataset.sliding===void 0?t?e.scrollHeight:0:e.getBoundingClientRect().height}panelFor(e){let t=e.nextElementSibling;return t instanceof HTMLElement&&t.classList.contains(`menu-dropdown`)?t:null}slide(e,t,n){e.style.removeProperty(`height`),t?e.style.removeProperty(`display`):e.style.display=`flex`;let r=t?e.scrollHeight:0;e.dataset.sliding=``,e.style.height=`${n}px`,e.offsetHeight,e.style.height=`${r}px`;let i=t=>{(t===void 0||t.propertyName===`height`)&&(e.removeEventListener(`transitionend`,i),this.settle(e))};e.addEventListener(`transitionend`,i),(n===r||window.matchMedia(`(prefers-reduced-motion: reduce)`).matches)&&i()}settle(e,{keepHidden:t=!1}={}){e!==null&&(delete e.dataset.sliding,e.style.removeProperty(`height`),t||e.style.removeProperty(`display`))}remember(){if(this.unfiltered!==null)return;let e={};this.toggleTargets.forEach(t=>{e[this.keyFor(t)]=this.isOpen(t)}),this.write(e)}keyFor(e){return(e.textContent??``).trim()}isPinned(e){return e.dataset.adminataMenuKeepOpen===`true`}read(){try{let e=JSON.parse(window.localStorage.getItem(this.storageKeyValue)??`{}`);return typeof e==`object`&&e?e:{}}catch{return{}}}write(e){try{window.localStorage.setItem(this.storageKeyValue,JSON.stringify(e))}catch{}}},_t=class extends B{static targets=[`input`,`empty`];static outlets=[`adminata-menu`];connect(){this.offer()}adminataMenuOutletConnected(){this.offer()}adminataMenuOutletDisconnected(){this.offer()}filter(){this.adminataMenuOutlets.forEach(e=>e.filter(this.inputTarget.value))}clear(e){this.inputTarget.value!==``&&(e.preventDefault(),this.inputTarget.value=``,this.filter())}follow(e){let t=this.firstLink();t!==null&&(e.preventDefault(),t.click())}focusFirst(e){let t=this.firstLink();t!==null&&(e.preventDefault(),t.focus())}sync({target:e,detail:t}){this.adminataMenuOutlets.some(t=>t.element===e)&&(!t.active&&this.inputTarget.value.trim()!==``&&(this.inputTarget.value=``),this.emptyTarget.hidden=!t.active||0e.visibleLinks())[0]??null}offer(){this.element.hidden=!this.adminataMenuOutlets.some(e=>e.element.querySelector(`a[href]`)!==null)}},q={sm:`adm-dialog-sm`,md:``,lg:`adm-dialog-lg`,list:`adm-dialog-list`},vt=class extends B{static targets=[`dialog`];static values={size:{type:String,default:`md`},closable:{type:Boolean,default:!0},backdrop:{type:Boolean,default:!0}};connect(){this.dialog=this.hasDialogTarget?this.dialogTarget:null,this.dialog!==null&&(this.dialog.classList.add(`adm-dialog`),this.applySize(),this.onClose=()=>this.dispatch(`closed`,{detail:{dialog:this.dialog}}),this.onCancel=e=>{this.closableValue||e.preventDefault()},this.onBackdropClick=e=>{this.closableValue&&this.backdropValue&&e.target===this.dialog&&this.dialog.close()},this.dialog.addEventListener(`close`,this.onClose),this.dialog.addEventListener(`cancel`,this.onCancel),this.dialog.addEventListener(`click`,this.onBackdropClick))}disconnect(){this.dialog&&(this.dialog.removeEventListener(`close`,this.onClose),this.dialog.removeEventListener(`cancel`,this.onCancel),this.dialog.removeEventListener(`click`,this.onBackdropClick))}open(e){e?.preventDefault(),this.dialog&&(this.dialog.showModal(),this.dispatch(`opened`,{detail:{dialog:this.dialog}}))}close(e){e?.preventDefault(),this.dialog?.close()}sizeValueChanged(){this.dialog&&this.applySize()}applySize(){Object.values(q).filter(Boolean).forEach(e=>this.dialog.classList.remove(e));let e=q[this.sizeValue];e&&this.dialog.classList.add(e)}},J=new WeakMap,yt=class extends B{static values={target:{type:String,default:`adminata-dialog`},title:String,text:String,content:String,size:String};open(e){e?.preventDefault();let t=document.getElementById(this.targetValue);if(!(t instanceof HTMLDialogElement))throw Error(`adminata-modal-trigger: there is no to open.`);this.fill(t);let n=this.application.getControllerForElementAndIdentifier(t,`adminata-modal`);if(n===null)t.showModal();else{if(this.hasSizeValue&&this.sizeValue!==``){let e=n.sizeValue;t.addEventListener(`close`,()=>n.sizeValue=e,{once:!0}),n.sizeValue=this.sizeValue}n.open()}}fill(e){let t=e.getAttribute(`aria-labelledby`),n=t===null?null:document.getElementById(t),r=e.querySelector(`.adm-dialog__body`);if(n!==null&&(J.has(n)||J.set(n,n.textContent),n.textContent=this.hasTitleValue&&this.titleValue!==``?this.titleValue:J.get(n)),r!==null){if(this.hasContentValue&&this.contentValue!==``){let e=document.getElementById(this.contentValue);if(e===null)throw Error(`adminata-modal-trigger: there is no element "${this.contentValue}" to take the content from.`);r.innerHTML=e.innerHTML}else r.textContent=this.hasTextValue?this.textValue:``}}},bt=class extends B{reload(){this.submitters.forEach(e=>{e.disabled=!0}),window.top.location.href=this.element.options[this.element.selectedIndex].value}get submitters(){return document.querySelectorAll(`input[type=submit], button[type=submit]`)}},Y=new WeakMap,xt=class extends B{static values={target:{type:String,default:`adminata-question-dialog`},text:String,title:String,confirm:String,cancel:String};ask(e){if(this.confirmed){this.confirmed=!1;return}e?.preventDefault(),this.submitter=e?.submitter instanceof HTMLElement?e.submitter:null;let t=document.getElementById(this.targetValue);if(!(t instanceof HTMLDialogElement))throw Error(`adminata-question: there is no to ask in.`);let n=t.querySelector(`[data-adminata-question-confirm]`);if(!(n instanceof HTMLButtonElement))throw Error(`adminata-question: has no confirm button.`);this.fill(t,n);let r=!1,i=()=>{r=!0,t.close(),this.dispatch(`confirmed`,{cancelable:!0}).defaultPrevented||this.follow()};n.addEventListener(`click`,i),t.addEventListener(`close`,()=>{n.removeEventListener(`click`,i),r||this.dispatch(`cancelled`)},{once:!0});let a=this.application.getControllerForElementAndIdentifier(t,`adminata-modal`);a===null?t.showModal():a.open(),n.focus()}fill(e,t){let n=e.getAttribute(`aria-labelledby`),r=n===null?null:document.getElementById(n),i=e.querySelector(`[data-adminata-question-text]`),a=e.querySelector(`[data-adminata-question-cancel]`);for(let[e,n]of[[r,this.hasTitleValue?this.titleValue:``],[t,this.hasConfirmValue?this.confirmValue:``],[a,this.hasCancelValue?this.cancelValue:``]])e!==null&&(Y.has(e)||Y.set(e,e.textContent),e.textContent=n===``?Y.get(e):n);i!==null&&(i.textContent=this.hasTextValue?this.textValue:``)}follow(){let e=this.element;if(e instanceof HTMLFormElement){let t=this.submitter?.form===e&&this.submitter.type===`submit`?this.submitter:void 0;this.confirmed=!0;try{e.requestSubmit(t)}finally{this.confirmed=!1}}else(e instanceof HTMLButtonElement||e instanceof HTMLInputElement)&&e.form?e.type===`submit`?e.form.requestSubmit(e):e.form.requestSubmit():e instanceof HTMLAnchorElement&&e.href!==``&&window.location.assign(e.href)}},X=new WeakMap,Z=new ResizeObserver(e=>{e.forEach(e=>{let t=X.get(e.target);t&&t.resize()})}),St=class extends B{static targets=[`content`,`button`];static values={collapsedHeight:Number,moreText:String,lessText:String};connect(){X.set(this.contentTarget,this),Z.observe(this.contentTarget),this.contentTarget.style.maxHeight=`${this.collapsedHeightValue}px`,this.buttonTarget.innerHTML=this.moreTextValue}disconnect(){X.delete(this.contentTarget),Z.unobserve(this.contentTarget)}resize(){this.contentTarget.scrollHeight>this.contentTarget.clientHeight?this.contentTarget.classList.add(`truncated`):this.contentTarget.classList.remove(`truncated`)}toggle(){this.contentTarget.classList.toggle(`expanded`),this.contentTarget.classList.contains(`expanded`)?this.buttonTarget.innerHTML=this.lessTextValue:this.buttonTarget.innerHTML=this.moreTextValue}},Ct=class extends B{static values={target:String,when:String};connect(){this.onChange=()=>this.apply(),this.element.addEventListener(`change`,this.onChange),this.apply()}disconnect(){this.element.removeEventListener(`change`,this.onChange)}apply(){let e=this.accepted(),t=this.current().some(t=>e.includes(t));for(let e of this.sections())e.hidden=!t,e.classList.remove(`hidden`)}accepted(){let e=this.whenValue.trim();if(e.startsWith(`[`))try{let t=JSON.parse(e);if(Array.isArray(t))return t.map(String)}catch{}return[e]}current(){let e=this.element;return e instanceof HTMLSelectElement?[...e.selectedOptions].map(e=>e.value):e instanceof HTMLTextAreaElement?[e.value]:e instanceof HTMLInputElement?e.type===`checkbox`||e.type===`radio`?e.checked?[e.value]:[]:[e.value]:[...e.querySelectorAll(`input:checked`)].filter(e=>e instanceof HTMLInputElement).map(e=>e.value)}sections(){if(this.targetValue===``)return[];let e=this.element.parentElement;for(;e!==null&&e.querySelector(this.targetValue)===null;)e=e.parentElement;return[...(e??document).querySelectorAll(this.targetValue)]}},wt=class extends B{static targets=[`preview`];showPreview(e){let t=e.currentTarget;if(!(t instanceof HTMLAnchorElement))return;let n={method:`GET`,headers:{"X-Requested-With":`XMLHttpRequest`}};this.previewTarget.innerHTML=``,fetch(t.href,n).then(e=>e.text()).then(e=>{this.previewTarget.innerHTML=e})}},Tt=`a, button, input, select, textarea, label, summary, [role="button"], [contenteditable]`,Et=`.adminata-list-field-batch, .adminata-list-field-select, .adminata-list-field-actions`,Dt=class extends B{open(e){if(e.button!==0&&e.button!==1)return;let t=e.target instanceof Element?e.target.closest(`tr[data-adminata-row-link-url]`):null;if(t===null||!this.element.contains(t)||e.target.closest(Tt)!==null||e.target.closest(Et)!==null||this.hasSelection)return;let n=t.dataset.adminataRowLinkUrl;e.preventDefault(),e.button===1||e.ctrlKey||e.metaKey||e.shiftKey?window.open(n,`_blank`,`noopener`):window.location.assign(n)}get hasSelection(){let e=window.getSelection();return e!==null&&!e.isCollapsed&&e.toString().trim()!==``}},Ot=class extends B{static targets=[`collapse`,`expand`];static outlets=[`adminata-menu`];connect(){this.sync()}adminataMenuOutletConnected(){this.sync()}adminataMenuOutletDisconnected(){this.sync()}collapseAll(){this.adminataMenuOutlets.forEach(e=>e.collapseAll())}expandAll(){this.adminataMenuOutlets.forEach(e=>e.expandAll())}sync(){let e=this.adminataMenuOutlets.some(e=>e.hasToggleTarget);[...this.collapseTargets,...this.expandTargets].forEach(t=>{t.hidden=!e})}},kt=class extends B{static targets=[`topNavbar`,`navbar`,`action`];static get shouldLoad(){return W.param(`USE_STICKYFORMS`)}connect(){this.resizeObserver=new ResizeObserver(this.resize.bind(this)),this.hasActionTarget&&this.resizeObserver.observe(this.actionTarget),this.hasNavbarTarget&&this.resizeObserver.observe(this.navbarTarget)}disconnect(){this.resizeObserver.disconnect()}resize(e){e.forEach(e=>{this.hasActionTarget&&e.target===this.actionTarget?this.actionIntersect():this.hasNavbarTarget&&e.target===this.navbarTarget&&this.navbarIntersect()})}actionIntersect(){let e=this.actionTarget.closest(`.action-sentinel`)||V(this.actionTarget);e.classList.add(`action-sentinel`),e.style.height=`${this.actionTarget.offsetHeight}px`,new IntersectionObserver(([e])=>{e.isIntersecting?this.actionTarget.classList.remove(`stuck`):this.actionTarget.classList.add(`stuck`)},{rootMargin:`0px 0px -${e.offsetHeight}px 0px`,threshold:[0,1]}).observe(e)}navbarIntersect(){let e=this.navbarTarget.closest(`.navbar-sentinel`)||V(this.navbarTarget);e.classList.add(`navbar-sentinel`),e.style.height=`${this.navbarTarget.offsetHeight}px`,new IntersectionObserver(([e])=>{e.isIntersecting?this.navbarTarget.classList.remove(`stuck`):this.navbarTarget.classList.add(`stuck`)},{rootMargin:`-${this.topNavbarTarget.offsetHeight+e.offsetHeight}px 0px 0px 0px`,threshold:[0,1]}).observe(e)}},At=class extends B{static targets=[`tab`,`panel`];connect(){this.onShow=e=>{let t=this.tabTargets.find(t=>t===e.target||t.contains(e.target));t&&this.show(t)},this.element.addEventListener(`adminata-tabs:show`,this.onShow);let e=this.selected??this.tabTargets[0];e&&this.show(e)}disconnect(){this.element.removeEventListener(`adminata-tabs:show`,this.onShow)}select(e){e.preventDefault(),this.show(e.currentTarget)}move(e){let t=this.tabTargets,n=t.indexOf(e.currentTarget);if(n===-1)return;let r={ArrowLeft:(n-1+t.length)%t.length,ArrowRight:(n+1)%t.length,Home:0,End:t.length-1};if(!(e.key in r))return;e.preventDefault();let i=t[r[e.key]];this.show(i),i.focus()}show(e){let t=e.getAttribute(`aria-controls`);for(let t of this.tabTargets){let n=t===e;t.setAttribute(`aria-selected`,n?`true`:`false`),t.setAttribute(`tabindex`,n?`0`:`-1`)}let n=null;for(let e of this.panelTargets){let r=e.id===t;e.hidden=!r,r&&(n=e)}this.dispatch(`shown`,{detail:{tab:e,panel:n}})}get selected(){return this.tabTargets.find(e=>e.getAttribute(`aria-selected`)===`true`)}},Q=[`light`,`dark`,`system`],jt={"adminata-autocomplete":nt,"adminata-batch":it,"adminata-collection":at,"adminata-confirm-exit":st,"adminata-dismiss":ct,"adminata-dropdown":lt,"adminata-edit":ut,"adminata-filter":dt,"adminata-filter-list":ft,"adminata-layout":pt,"adminata-masonry":mt,"adminata-menu":gt,"adminata-menu-filter":_t,"adminata-modal":vt,"adminata-modal-trigger":yt,"adminata-per-page":bt,"adminata-question":xt,"adminata-readmore":St,"adminata-reveal":Ct,"adminata-revision":wt,"adminata-row-link":Dt,"adminata-sidebar-toolbar":Ot,"adminata-sticky":kt,"adminata-tabs":At,"adminata-theme":class extends B{static targets=[`label`];static values={theme:{type:String,default:`system`},cookieName:{type:String,default:`adminata_theme`},labels:{type:Object,default:{}}};initialize(){this.query=window.matchMedia(`(prefers-color-scheme: dark)`),this.connected=!1}connect(){this.onSystemChange=()=>{this.themeValue===`system`&&this.paint()},this.query.addEventListener(`change`,this.onSystemChange),this.render(),this.connected=!0}disconnect(){this.query.removeEventListener(`change`,this.onSystemChange)}cycle(e){e?.preventDefault(),this.themeValue=Q[(Q.indexOf(this.themeValue)+1)%Q.length]}select(e){e?.preventDefault();let t=e?.params?.theme??e?.currentTarget?.dataset?.theme;Q.includes(t)&&(this.themeValue=t)}themeValueChanged(){this.render(),this.connected&&(this.writeCookie(),this.dispatch(`changed`,{detail:{theme:this.themeValue,dark:this.isDark()}}))}render(){this.paint(),this.element.setAttribute(`aria-label`,this.label()),this.element.title=this.label(),this.labelTargets.forEach(e=>{e.textContent=this.label()})}paint(){let e=document.documentElement;e.dataset.theme=this.themeValue,e.classList.toggle(`dark`,this.isDark())}isDark(){return this.themeValue===`dark`||this.themeValue===`system`&&this.query.matches}label(){let e=Q[(Q.indexOf(this.themeValue)+1)%Q.length];return this.labelsValue[e]??e}writeCookie(){let e=encodeURIComponent(this.cookieNameValue),t=window.location.protocol===`https:`?`; Secure`:``;document.cookie=`${e}=${this.themeValue}; path=/; max-age=31536000; SameSite=Lax${t}`}}};function Mt(e){for(let[t,n]of Object.entries(jt))e.register(t,n)}var $=Fe.start();$.debug=document.documentElement.dataset.adminataDebug===`true`,Mt($),window.adminataApplication=$,document.documentElement.classList.remove(`no-js`)})(); \ No newline at end of file diff --git a/versions.json b/versions.json index 73a9c897a..e4ed122cb 100644 --- a/versions.json +++ b/versions.json @@ -1,37 +1,37 @@ { "_comment": "Consumed by .github/workflows/versions-watch.yaml. Every entry is a dependency whose version PLAN/07 §2 pins deliberately; the job reports newer releases so the owner directive 'latest releases everywhere' can be re-checked. Keep the versions in step with PLAN/07 §2, composer.json and package.json.", "composer": { - "doctrine/doctrine-bundle": "3.3.1", - "doctrine/mongodb-odm-bundle": "5.6.0", - "doctrine/orm": "3.6.8", - "friendsofphp/php-cs-fixer": "3.95.24", - "infection/infection": "0.35.4", - "phpstan/phpstan": "2.2.13", - "phpunit/phpunit": "13.3.2", - "rector/rector": "2.6.6", - "symfony/framework-bundle": "8.1.6", + "doctrine/doctrine-bundle": "3.3.2", + "doctrine/mongodb-odm-bundle": "5.6.1", + "doctrine/orm": "3.7.5", + "friendsofphp/php-cs-fixer": "3.95.27", + "infection/infection": "0.35.8", + "phpstan/phpstan": "2.3.1", + "phpunit/phpunit": "13.4.3", + "rector/rector": "2.7.0", + "symfony/framework-bundle": "8.1.9", "symfony/panther": "2.4.0", - "symfony/stimulus-bundle": "3.4.0", + "symfony/stimulus-bundle": "3.6.0", "symfonycasts/tailwind-bundle": "1.0.0", - "twig/twig": "3.28.0" + "twig/twig": "3.30.0" }, "npm": { - "@axe-core/playwright": "4.13.0", + "@axe-core/playwright": "4.14.0", "@fontsource-variable/outfit": "5.3.0", "@fortawesome/fontawesome-free": "7.3.1", "@hotwired/stimulus": "3.2.2", - "@playwright/test": "1.62.1", - "@size-limit/file": "13.0.3", + "@playwright/test": "1.64.1", + "@size-limit/file": "14.3.0", "@tailwindcss/vite": "4.3.3", - "eslint": "10.10.0", - "html-validate": "11.13.0", - "jsdom": "30.0.1", - "prettier": "3.9.6", + "eslint": "10.13.0", + "html-validate": "11.17.0", + "jsdom": "30.1.3", + "prettier": "3.9.10", "prettier-plugin-tailwindcss": "0.8.1", - "qs": "6.16.0", - "stylelint": "17.15.0", + "qs": "6.16.1", + "stylelint": "17.16.0", "tailwindcss": "4.3.3", - "vite": "8.2.2", - "vitest": "5.0.0" + "vite": "8.3.5", + "vitest": "5.0.5" } } From 1ee2e5cfca212d84e4f6bf4d6d34bdb06a51769e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20Pacho=C5=82ek?= <3039162+bpacholek@users.noreply.github.com> Date: Fri, 23 Oct 2026 11:59:27 +0000 Subject: [PATCH 2/2] User menu: the button is named by its avatar, so its name holds the initials it shows (#5) axe-core 4.14 (the bump in the previous commit) enables label-content-name-mismatch by default, and it failed on every page of the demo, in every width and theme: the user menu's button showed the user's initials ("AD", aria-hidden) and was named by aria-label="admin", so the text it shows was not part of its name (WCAG 2.5.3 Label in Name; a speech user saying "click AD" reaches nothing). It was the rule's only node. The initials are now what they look like, the user's avatar: , and the button drops its aria-label and takes its name from that image. A screen reader still hears the identifier ("admin, button, collapsed"); the rule no longer applies, since neither the button nor an image names itself over visible text. Nothing changes on screen: the 84 Chromium screenshot baselines match as they are. - standard_layout.html.twig, adminata_top_nav_menu_user_block; its comment says why. - tests-adminata/fixtures/js/*.html re-dumped (make js-fixtures): the seven pages carrying the user menu. - CHANGELOG (Unreleased, Fixed). Tests, in mcr.microsoft.com/playwright:v1.64.1-noble: the axe, autocomplete and html-validate specs on Chromium 375 and 1280 px (98 passed; before the change 84 axe cases failed on this one node), the screenshot spec on all three Chromium widths (84 passed). Vitest 281 passed; adminata-functional, -contract and -unit pass apart from DashboardPantherTest (no geckodriver here). Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 6 ++++++ src/Resources/views/standard_layout.html.twig | 10 +++++++--- tests-adminata/fixtures/js/category-list.html | 3 +-- tests-adminata/fixtures/js/dashboard.html | 3 +-- tests-adminata/fixtures/js/dialog.html | 3 +-- tests-adminata/fixtures/js/product-create.html | 3 +-- tests-adminata/fixtures/js/product-edit.html | 3 +-- tests-adminata/fixtures/js/product-list.html | 3 +-- tests-adminata/fixtures/js/reveal.html | 3 +-- 9 files changed, 20 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e183d0a93..e7cbd3ef8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -732,6 +732,12 @@ mosaic and tree list modes, global search, the tab menu and four dashboard block ### Fixed +- The user menu's button is named by its avatar (2026-10-23, #5). It showed the signed-in user's + initials and was named by an `aria-label` with the user identifier, so its name did not contain + the text it shows (WCAG 2.5.3 Label in Name), which axe-core 4.14 now checks by default + (`label-content-name-mismatch`, on every page). The initials are an image named after the user + (`role="img"`, `aria-label`), and the button takes its name from it: still the identifier for a + screen reader, nothing changes on screen. - The document title was escaped twice (2026-09-29). `standard_layout` captures the `adminata_head_title` block — already escaped where it printed the page's `title` block and the crumbs — to collapse its whitespace, and `u.collapseWhitespace` hands back a plain string that diff --git a/src/Resources/views/standard_layout.html.twig b/src/Resources/views/standard_layout.html.twig index 4b2ea48f5..7f1facf6d 100644 --- a/src/Resources/views/standard_layout.html.twig +++ b/src/Resources/views/standard_layout.html.twig @@ -499,7 +499,12 @@ file that was distributed with this source code. signed in; `user_block` fills the list under it. Upstream hid the whole menu when that template was empty, which is its default, so nobody saw - a user menu until an application wrote one. -#} + a user menu until an application wrote one. + The initials are the user's avatar: an image + named after them, which names the button too. + An aria-label on the button would leave the + initials it shows out of its name (WCAG 2.5.3, + Label in Name). -#} {% set userBlock = include(get_global_template('user_block')) %} {% set userName = app.user.userIdentifier %}