diff --git a/.claude/skills/ckeditor5-plugin-development/references/review-checklist.md b/.claude/skills/ckeditor5-plugin-development/references/review-checklist.md index 686f3b7b2f..30dfeb269f 100644 --- a/.claude/skills/ckeditor5-plugin-development/references/review-checklist.md +++ b/.claude/skills/ckeditor5-plugin-development/references/review-checklist.md @@ -117,5 +117,5 @@ integration items at the end are specific to this monorepo. `ClassicEditor` (Decoupled), `PopupEditor` (Balloon + `BlockToolbar`). - [ ] Block widgets enforce structural invariants with `registerPostFixer` (admonition, collapsible) rather than relying on command-side cleanup. -- [ ] **Tests use the right environment**: happy-dom for unit/model logic; WebdriverIO +- [ ] **Tests use the right environment**: happy-dom for unit/model logic; Playwright (browser) only where real DOM/layout is required. diff --git a/.claude/skills/ckeditor5-plugin-development/references/tooling-and-packaging.md b/.claude/skills/ckeditor5-plugin-development/references/tooling-and-packaging.md index 205d5a3571..a2e0bb977a 100644 --- a/.claude/skills/ckeditor5-plugin-development/references/tooling-and-packaging.md +++ b/.claude/skills/ckeditor5-plugin-development/references/tooling-and-packaging.md @@ -188,9 +188,9 @@ pnpm --filter @triliumnext/ckeditor5- lint # eslint-config-ckedi pnpm --filter @triliumnext/ckeditor5- stylelint # theme CSS ``` -Tests run in a real headless Chrome that webdriverio downloads. Where that build cannot run — NixOS -being the case in point — set `CHROME_BIN` and `CHROMEDRIVER_PATH` to a matching system pair, which -`nix develop` already exports; don't start a driver by hand. +Tests run in a real headless Chromium that Playwright downloads (`pnpm exec playwright install +chromium`). Where that build cannot run — NixOS being the case in point — set `CHROME_BIN` to a +system browser, which `nix develop` already exports. For test setup, model/view assertions, and command/UI test patterns, use the separate **`ckeditor5-testing`** skill. diff --git a/.claude/skills/ckeditor5-reviewing/SKILL.md b/.claude/skills/ckeditor5-reviewing/SKILL.md index ab25fc540c..e5885c5399 100644 --- a/.claude/skills/ckeditor5-reviewing/SKILL.md +++ b/.claude/skills/ckeditor5-reviewing/SKILL.md @@ -23,7 +23,7 @@ the companion skills rather than duplicating them: - **`ckeditor5-plugin-development`** — its `references/review-checklist.md` (architecture, schema, conversion, commands, UI, a11y) and `references/conventions.md` (naming, imports, JSDoc, TS). - **`ckeditor5-testing`** — its review checklist and patterns for the test side (Vitest, browser-mode - vs. `@vitest/browser-webdriverio` browser mode, real `ClassicEditor.create`). + vs. `@vitest/browser-playwright` browser mode, real `ClassicEditor.create`). Use those for "does this follow the conventions"; use this skill for **how to drive the review** and **what subtle things tend to be wrong**. @@ -79,8 +79,8 @@ plugin; sanity-checking your own feature before opening a PR. For *writing* the `no-legacy-imports`) and `stylelint-config-ckeditor5` — a diff that breaks them fails lint. 5. **Run the tests for the affected package.** Use Vitest via `pnpm --filter @triliumnext/ckeditor5 test` (or `...-math`); the two run sequentially because - each spins up headless Chrome. Both use **`@vitest/browser-webdriverio` browser mode** (NOT - Playwright) and gate `src/**` at **100% coverage**. Coverage ≠ correctness: confirm + each spins up headless Chromium. Both use **`@vitest/browser-playwright` browser mode** and + gate `src/**` at **100% coverage**. Coverage ≠ correctness: confirm the *change itself* is tested, not just that lines are hit. A bug fix with no new/changed test is a red flag even when coverage stays green. 6. **Observe behavior.** Attach the CKEditor Inspector (model / view / schema / commands), then: diff --git a/.claude/skills/ckeditor5-reviewing/references/defect-patterns.md b/.claude/skills/ckeditor5-reviewing/references/defect-patterns.md index e70e910e04..c0336c7d8c 100644 --- a/.claude/skills/ckeditor5-reviewing/references/defect-patterns.md +++ b/.claude/skills/ckeditor5-reviewing/references/defect-patterns.md @@ -294,8 +294,8 @@ nothing loads it, no button shows, or lint/license/localization is off. expected to suppress native behaviour; an assertion made immediately after an event the browser dispatches asynchronously (`
` `toggle`, for one); or `preventDefault` used as proof that a handler ran when a CKEditor plugin also calls it. -- Why: both CKEditor packages run in **real headless Chrome** (`@vitest/browser-webdriverio`, NOT - Playwright). Tests ported from the old happy-dom setup relied on stubbed layout and synchronous +- Why: both CKEditor packages run in **real headless Chromium** (`@vitest/browser-playwright`). + Tests ported from the old happy-dom setup relied on stubbed layout and synchronous events, and pass or fail for the wrong reasons here. - Fix: make synthetic events cancelable, await the real event before asserting, and prove a handler ran by spying on `editor.execute` or asserting the model. diff --git a/.claude/skills/ckeditor5-testing/SKILL.md b/.claude/skills/ckeditor5-testing/SKILL.md index 91e9d01d87..e1971469c6 100644 --- a/.claude/skills/ckeditor5-testing/SKILL.md +++ b/.claude/skills/ckeditor5-testing/SKILL.md @@ -4,7 +4,7 @@ description: >- Testing CKEditor 5 plugins in the Trilium monorepo. Use when adding or reviewing unit tests for the packages/ckeditor5 aggregate (including its in-tree plugins under src/plugins/), debugging a - failing test, or setting up a package's test runner. Covers the WebdriverIO + failing test, or setting up a package's test runner. Covers the Playwright browser-mode Vitest setup, the vitest.config.ts, testing against a real ClassicEditor, the model/view helpers imported from 'ckeditor5' (_setModelData / _getModelData / _getViewData and their {}/[] selection syntax), vi spies/mocks, idiomatic @@ -40,10 +40,10 @@ Trilium testing (Preact components, jQuery widgets, server routes), use `writing - **Runner:** Vitest 4 or later. **No shared factory** — each package has its own `vitest.config.ts` built with `defineConfig` directly. -- **One environment: WebdriverIO browser mode** (`@vitest/browser-webdriverio`, headless Chrome), +- **One environment: Playwright browser mode** (`@vitest/browser-playwright`, headless Chromium), used by `ckeditor5`. Real DOM and real layout, so `getBoundingClientRect()`, `elementFromPoint()` and pointer events behave as in a browser. Gates - `src/**` coverage at 100% (lines/functions/branches/statements). This is **not Playwright**. + `src/**` coverage at 100% (lines/functions/branches/statements). - Trilium used to run some plugins on **happy-dom**; that is gone. If you are porting an old test, note the two differences that bite: happy-dom returned zeros from layout APIs (so measurement-dependent code silently "passed"), and it fired some DOM events synchronously @@ -87,21 +87,19 @@ run a filtered package suite instead (`pnpm --filter @triliumnext/ckeditor5 test leave the aggregates to CI. Each package exposes `"test": "vitest"` and `"test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false"`. -**When the downloaded browser cannot run** — on NixOS the Chrome for Testing build and chromedriver -webdriverio fetches into `/tmp` are linked against libraries no store path provides and die on a -missing `libxcb.so.1` — point the suite at a system pair instead: +Playwright downloads its own Chromium on demand; install it once with `pnpm exec playwright install +chromium` from the repo root. + +**When that build cannot run** — on NixOS it is linked against libraries no store path provides and +dies on a missing `libxcb.so.1` — point the suite at a system browser instead: ```bash -CHROME_BIN=/path/to/chromium CHROMEDRIVER_PATH=/path/to/chromedriver \ - pnpm --filter @triliumnext/ckeditor5 test +CHROME_BIN=/path/to/chromium pnpm --filter @triliumnext/ckeditor5 test ``` -`CHROMEDRIVER_PATH` is webdriverio's own variable and makes it spawn that driver on a free port; -`CHROME_BIN` is read by the package's `vitest.config.ts` and passed as `goog:chromeOptions.binary`, -which also stops the browser download (`setupPuppeteerBrowser` returns early for a string `binary`). -The two versions must match at least in their major. `nix develop` sets both from `pkgs.chromium` -and `pkgs.chromedriver`, so inside the dev shell the plain command works — **don't** start a driver -by hand or write a local override config. +`CHROME_BIN` is read by the package's `vitest.config.ts` and passed to the provider as +`launchOptions.executablePath`. `nix develop` sets it from `pkgs.chromium`, so inside the dev shell +the plain command works — **don't** write a local override config. Failed browser tests dump PNGs into a gitignored `__screenshots__` beside the spec; delete them afterwards. @@ -230,7 +228,7 @@ into later specs.) See `references/patterns.md` for the recipe. |------|-----------| | `references/test-utilities.md` | Testing against a real `ClassicEditor` (lifecycle, `licenseKey: 'GPL'`), and the `_setModelData`/`_getModelData`/`_getViewData` helpers from `'ckeditor5'` + the `[]`/`{}` selection syntax. | | `references/patterns.md` | Idiomatic recipes per concern (schema, conversion round-trips, commands, UI, keystrokes, events, async), all against a real editor; the `glob`/clipboard/jQuery-`$` stubbing recipe (via the globals kit's `installGlobMock`/`mockClipboard`); note on the 100% coverage gate for browser-mode packages. | -| `references/running-and-config.md` | The WebdriverIO `vitest.config.ts` shape, `pnpm --filter` commands, the debug command, `pnpm test:parallel`/`test:sequential` (ckeditor5 + math sequential), coverage thresholds, and troubleshooting a session that never starts (staged-Chrome/chromedriver version mismatch, the worktree dep-optimizer hang, orphaned headless Chrome). | +| `references/running-and-config.md` | The WebdriverIO `vitest.config.ts` shape, `pnpm --filter` commands, the debug command, `pnpm test:parallel`/`test:sequential` (ckeditor5 + math sequential), coverage thresholds, and troubleshooting a session that never starts (a missing Playwright browser build, the worktree dep-optimizer hang, orphaned headless Chromium). | | `references/test-conventions.md` | Trilium test **conventions & gotchas**: real-browser event timing, real-editor teardown, the both-assertion-styles note, unreachable code vs. the 100% gate, and the pointer to `writing-unit-tests`. | ## Quick review checklist diff --git a/.claude/skills/ckeditor5-testing/references/running-and-config.md b/.claude/skills/ckeditor5-testing/references/running-and-config.md index 5e879698d5..39bafed9a5 100644 --- a/.claude/skills/ckeditor5-testing/references/running-and-config.md +++ b/.claude/skills/ckeditor5-testing/references/running-and-config.md @@ -23,50 +23,51 @@ pnpm --filter @triliumnext/ckeditor5 test Or, from the package directory: `vitest run`. Add `-t "name"` to filter by test name, or a filename substring to filter by file. -### Supplying the browser and driver +### Supplying the browser -webdriverio downloads a Chrome for Testing build and a matching chromedriver into `/tmp` on first -run. Where those cannot execute — NixOS, where they are linked against libraries no store path -provides and abort on a missing `libxcb.so.1` — two variables hand it a system pair instead: +Playwright downloads its own Chromium into a per-user cache (`~/.cache/ms-playwright`, +`%LOCALAPPDATA%\ms-playwright` on Windows). Install it once with +`pnpm exec playwright install chromium`; CI does this in the test step. + +Where that build cannot execute — NixOS, where it is linked against libraries no store path +provides and aborts on a missing `libxcb.so.1` — `CHROME_BIN` hands Playwright a system browser +instead: | Variable | Read by | Effect | |---|---|---| -| `CHROMEDRIVER_PATH` | webdriverio (`@wdio/utils` `startWebDriver`) | Spawns that driver on a free port instead of downloading one. | -| `CHROME_BIN` | `packages/ckeditor5/vitest.config.ts` | Passed as `goog:chromeOptions.binary`; `setupPuppeteerBrowser` returns early for a string `binary`, so no browser is downloaded either. | +| `CHROME_BIN` | `packages/ckeditor5/vitest.config.ts` | Passed to the provider as `launchOptions.executablePath`, so Playwright launches that binary rather than its own download. | ```bash -CHROME_BIN=/path/to/chromium CHROMEDRIVER_PATH=/path/to/chromedriver \ - pnpm --filter @triliumnext/ckeditor5 test +CHROME_BIN=/path/to/chromium pnpm --filter @triliumnext/ckeditor5 test ``` -The versions must match at least in their major. `nix develop` exports both from `pkgs.chromium` -and `pkgs.chromedriver` (same nixpkgs revision, so they agree), which is why the plain command works -inside the dev shell. Starting a chromedriver by hand and writing a local config that connects to -its port does work, but it is strictly more setup — reach for the variables. +`nix develop` exports it from `pkgs.chromium`, which is why the plain command works inside the dev +shell. There is no separate driver to supply — Playwright speaks CDP to the browser directly, which +is what retired the old `CHROMEDRIVER_PATH` pairing. A failing browser test writes a PNG into a gitignored `__screenshots__` directory next to the spec. Clean those up when done. ## The config shape -Both packages run **WebdriverIO browser mode**: real headless Chrome via -`@vitest/browser-webdriverio` (**not** Playwright), with real DOM and layout, gating `src/**` -coverage at 100%. Trilium previously ran some plugins on happy-dom; no CKEditor package does now. +Both packages run **Playwright browser mode**: real headless Chromium via +`@vitest/browser-playwright`, with real DOM and layout, gating `src/**` coverage at 100%. Trilium +previously ran some plugins on happy-dom; no CKEditor package does now. ```ts import { defineConfig } from 'vitest/config'; import svg from 'vite-plugin-svgo'; -import { webdriverio } from '@vitest/browser-webdriverio'; +import { playwright } from '@vitest/browser-playwright'; export default defineConfig( { plugins: [ svg() ], test: { browser: { enabled: true, - provider: webdriverio(), + provider: playwright(), headless: true, ui: false, - instances: [ { browser: 'chrome' } ] + instances: [ { browser: 'chromium' } ] }, include: [ 'src/**/*.spec.ts' ], // math instead uses [ 'tests/**/*.[jt]s' ] setupFiles: [ './test/setup.ts' ], // aggregate only — wires the editor-kit teardown @@ -122,29 +123,19 @@ analyzer (`lcov.info`) and Codecov consume — keep them when adding coverage to Two failure modes look like a broken suite but are environmental. -### "This version of ChromeDriver only supports Chrome version N" +### "Executable doesn't exist at …/ms-playwright/chromium-NNNN" -webdriverio auto-manages the driver by detecting the installed Chrome's version. When Chrome has a -**staged update** — a `new_chrome.exe` and a new version folder sitting in the install directory, -waiting for a browser restart — detection reads the *staged* version and downloads that -chromedriver, while the `chrome.exe` that actually launches is still the old major. Every run then -dies at session start. +Playwright resolves a browser build keyed to its own version, so the cache is empty on a fresh +checkout and goes stale whenever the pinned `playwright` moves to a build that was never downloaded. +Both cases raise this at session start. -Restarting Chrome fixes it permanently. To run before then, point wdio at the matching driver -already in its cache (`%TEMP%\chromedriver\win64-\` on Windows) by editing -`packages/ckeditor5/vitest.config.ts` — at the **provider factory** level, because -`@vitest/browser-webdriverio` drops per-instance options and only the factory's reach `remote()`: - -```ts -provider: webdriverio({ - capabilities: { - "wdio:chromedriverOptions": { binary: "/chromedriver-win64/chromedriver.exe" } - } -}), +```bash +pnpm exec playwright install chromium ``` -**Revert that edit after the run — never commit it.** `browserVersion` pins do not help at either -level; wdio still resolves the local binary. +Run it from the repo root so the pinned `playwright` resolves. Where the downloaded build cannot +execute at all, supply a system browser through `CHROME_BIN` instead — see **Supplying the +browser** above. ### The run hangs at `[vite] [optimizer] bundling dependencies...` diff --git a/.claude/skills/ckeditor5-testing/references/test-conventions.md b/.claude/skills/ckeditor5-testing/references/test-conventions.md index 650f6a4df8..9411115a18 100644 --- a/.claude/skills/ckeditor5-testing/references/test-conventions.md +++ b/.claude/skills/ckeditor5-testing/references/test-conventions.md @@ -4,10 +4,10 @@ Trilium never used Karma/Mocha/Sinon — the plugin tests are Vitest from the st migration to do. This reference collects the Trilium-specific conventions and traps when writing CKEditor 5 plugin tests. -## The environment: WebdriverIO browser mode +## The environment: Playwright browser mode -`packages/ckeditor5` runs its tests in **real headless Chrome** via -`@vitest/browser-webdriverio`, so layout, `getBoundingClientRect()`, `elementFromPoint()` and +`packages/ckeditor5` runs its tests in **real headless Chromium** via +`@vitest/browser-playwright`, so layout, `getBoundingClientRect()`, `elementFromPoint()` and pointer events all behave as they do in a browser. Both gate `src/**` at 100% coverage. Trilium used to run some plugins on happy-dom. Nothing does now, but the difference matters when diff --git a/.claude/skills/writing-unit-tests/SKILL.md b/.claude/skills/writing-unit-tests/SKILL.md index 1654c14c71..c45509ce01 100644 --- a/.claude/skills/writing-unit-tests/SKILL.md +++ b/.claude/skills/writing-unit-tests/SKILL.md @@ -82,7 +82,7 @@ coverage: { - **`vi.resetModules()` drops `importOriginal`-based partial mocks.** The next dynamic import of the module gets the *real* dependency back, not your stub, and the symptom reads as "the mock isn't applying" rather than as a reset problem. Prefer registering singletons and IPC handlers **once** and ordering the tests instead — put the one that latches module-level state last. Where a reset is genuinely needed (a value cached on first call), mock with a full factory rather than an `importOriginal` partial. - **Don't assert on translated (i18n) strings** — assert structure/keys/behavior (classes, counts, ids), not human-readable English. - **happy-dom is not a browser:** `getBoundingClientRect()` returns zeros, `ResizeObserver`/layout/visibility are stubs. Anything pixel/size/scroll-based needs `@vitest/browser`, not happy-dom. -- **`@vitest/browser` real-browser mode IS configured** — the `packages/ckeditor5`, `-mermaid` and `-math` bundles run their co-located `src/**/*.spec.ts` in headless Chrome (`@vitest/browser-webdriverio`; see `packages/ckeditor5/vitest.config.ts`). These are the browser-mode `test:sequential` suites. Reserve real-browser mode for genuine layout/integration needs (CKEditor, Excalidraw, Modal transitions, size measurement); normal unit tests stay on happy-dom. +- **`@vitest/browser` real-browser mode IS configured** — the `packages/ckeditor5`, `-mermaid` and `-math` bundles run their co-located `src/**/*.spec.ts` in headless Chromium (`@vitest/browser-playwright`; see `packages/ckeditor5/vitest.config.ts`). These are the browser-mode `test:sequential` suites. Reserve real-browser mode for genuine layout/integration needs (CKEditor, Excalidraw, Modal transitions, size measurement); normal unit tests stay on happy-dom. - **WASM scrypt is ~10× slower** under the standalone suite (pure-JS `scrypt-js` under V8 coverage instrumentation, vs Node's native `scryptSync`) — enough to blow the 5s default. A core spec that hashes a password bumps the timeout for the standalone runtime only; copy the guard from `packages/trilium-core/src/routes/api/login.spec.ts:13`: ```ts const isBrowserRuntime = typeof window !== "undefined"; diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index f0651211ec..f6a7d2f435 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -429,22 +429,18 @@ jobs: if: env.AFFECTED == 'true' run: pnpm install --frozen-lockfile + - name: Install Playwright's Chromium + if: env.AFFECTED == 'true' + run: pnpm exec playwright install --with-deps chromium + - name: Run the CKEditor 5 aggregate tests id: test-ckeditor5 if: env.AFFECTED == 'true' - # The suite drives a real headless Chrome through webdriverio. When the browser session + # The suite drives a real headless Chromium through Playwright. When the browser session # fails to start, vitest waits on it rather than erroring, so cap the step instead of # letting it sit until the job's default timeout. timeout-minutes: 15 run: | - export CHROMEDRIVER_PATH=$(which chromedriver || find /usr/local/share -name chromedriver -type f 2>/dev/null | head -1) - echo "Using chromedriver at: $CHROMEDRIVER_PATH" - # A chromedriver whose major version does not match the installed Chrome fails the - # session handshake, which surfaces as a hang or a mid-run disconnect rather than a - # clear error — so record both up front. - "$CHROMEDRIVER_PATH" --version || echo "could not read the chromedriver version" - (google-chrome --version || chromium --version || chromium-browser --version) 2>/dev/null \ - || echo "could not read the Chrome version" # Browser mode keeps one page for the whole run, and v8 coverage data accumulates in it: # measured locally, the heap reaches ~850MB by the 100th spec file with --coverage against # ~240MB without it. That is where a CI runner's renderer gives out — the session either diff --git a/.gitignore b/.gitignore index cfec86f157..876a3ef946 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ vite.config.*.timestamp* vitest.config.*.timestamp* test-output .vitest-reports +.vitest __screenshots__ .vitest-attachments diff --git a/CLAUDE.md b/CLAUDE.md index 5949952d7f..a239843a87 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -203,7 +203,7 @@ Use `note.getOwnedAttribute()` for direct, `note.getAttribute()` for inherited. - **Core tests** (`packages/trilium-core/src/**/*.spec.ts`): `trilium-core` has no runner of its own — the **server and standalone suites both include** its specs (`apps/server/vite.config.mts`, `apps/standalone/vite.config.mts`) and run them against different platform providers (node + better-sqlite3 vs. happy-dom + sqlite-wasm). Green under `pnpm --filter server test` is **not** proof; run `pnpm --filter standalone test` as well. See the `writing-unit-tests` skill for the cross-runtime traps - **E2E tests** (`packages/trilium-e2e/`): Shared Playwright tests, run via `pnpm --filter server e2e` or `pnpm --filter standalone e2e` - **ETAPI tests** (`apps/server/spec/etapi/`): External API contract tests -- **Browser-mode tests** (`packages/ckeditor5`) drive a real headless Chrome via `@vitest/browser-webdriverio`; where its downloaded Chrome cannot run (NixOS), point `CHROME_BIN`/`CHROMEDRIVER_PATH` at a matching system pair — never start a chromedriver by hand or add a local override config. See the `ckeditor5-testing` skill +- **Browser-mode tests** (`packages/ckeditor5`) drive a real headless Chromium via `@vitest/browser-playwright` (`pnpm exec playwright install chromium` once); where that browser cannot run (NixOS), point `CHROME_BIN` at a system one — never add a local override config. See the `ckeditor5-testing` skill - **Build validation tests** check artifact integrity - **Write concise tests**: Group related assertions together in a single test case rather than creating many one-shot tests - **Extract and test business logic**: When adding pure business logic (e.g., data transformations, migrations, validations), extract it as a separate function and always write unit tests for it diff --git a/docs/Developer Guide/Developer Guide/Testing.md b/docs/Developer Guide/Developer Guide/Testing.md index 0521bbd0fb..77508ac347 100644 --- a/docs/Developer Guide/Developer Guide/Testing.md +++ b/docs/Developer Guide/Developer Guide/Testing.md @@ -70,17 +70,17 @@ Note that some integration tests rely on an in-memory database in order to funct ### Browser-mode tests for the text editor -`packages/ckeditor5` runs its tests in a real headless Chrome, through `@vitest/browser-webdriverio`, because the editor needs a real DOM and real selection handling. By default webdriverio downloads both a Chrome for Testing build and a matching chromedriver, which is what happens on a normal machine and needs no setup. +`packages/ckeditor5` runs its tests in a real headless Chromium, through `@vitest/browser-playwright`, because the editor needs a real DOM and real selection handling. Playwright downloads the browser itself; install it once with `pnpm exec playwright install chromium` from the repository root. -Where those downloaded binaries cannot run — NixOS being the case in point, since they are dynamically linked against libraries no store path provides and die on a missing `libxcb.so.1` — point the suite at a system browser and driver instead: +Where that downloaded browser cannot run — NixOS being the case in point, since it is dynamically linked against libraries no store path provides and dies on a missing `libxcb.so.1` — point the suite at a system browser instead: ``` -CHROME_BIN=/path/to/chromium CHROMEDRIVER_PATH=/path/to/chromedriver pnpm --filter @triliumnext/ckeditor5 test +CHROME_BIN=/path/to/chromium pnpm --filter @triliumnext/ckeditor5 test ``` -`CHROMEDRIVER_PATH` is webdriverio's own variable; `CHROME_BIN` is read by the package's `vitest.config.ts` and passed through as a capability, which also stops webdriverio from downloading a browser at all. The two versions have to match, at least in their major. +`CHROME_BIN` is read by the package's `vitest.config.ts` and passed to the provider as `launchOptions.executablePath`, so Playwright launches that binary rather than its own download. There is no separate driver to supply — Playwright speaks CDP to the browser directly. -The Nix dev shell (`nix develop`) sets both from `pkgs.chromium` and `pkgs.chromedriver`, so inside it the tests run unchanged. +The Nix dev shell (`nix develop`) sets it from `pkgs.chromium`, so inside it the tests run unchanged. ### REST API testing for the server diff --git a/flake.nix b/flake.nix index a5d93ada22..318e9a07d5 100644 --- a/flake.nix +++ b/flake.nix @@ -414,18 +414,16 @@ pnpm electron nodejs.python - # For the browser-mode tests (packages/ckeditor5). The Chrome and chromedriver - # webdriverio downloads for itself are dynamically linked against libraries no NixOS - # system provides, so they die on a missing libxcb.so.1; these come from the same - # nixpkgs revision, so their versions match. + # For the browser-mode tests (packages/ckeditor5). The Chromium Playwright downloads + # for itself is dynamically linked against libraries no NixOS system provides, so it + # dies on a missing libxcb.so.1. pkgs.chromium - pkgs.chromedriver ]; - # Read by packages/ckeditor5/vitest.config.ts and by webdriverio itself, respectively. - # Without them webdriverio downloads its own pair and the suite cannot start. + # Read by packages/ckeditor5/vitest.config.ts and passed to Playwright as + # `launchOptions.executablePath`. Without it Playwright launches its own Chromium and the + # suite cannot start. CHROME_BIN = "${pkgs.chromium}/bin/chromium"; - CHROMEDRIVER_PATH = "${pkgs.chromedriver}/bin/chromedriver"; }; } ); diff --git a/package.json b/package.json index 7c898fdad4..2135aa50f0 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "@types/express": "5.0.6", "@types/node": "24.13.3", "@typescript/native": "npm:typescript@7.0.2", - "@vitest/browser-webdriverio": "4.1.11", + "@vitest/browser-playwright": "5.0.0", "@vitest/coverage-v8": "5.0.0", "@vitest/ui": "5.0.0", "cross-env": "10.1.0", @@ -76,6 +76,7 @@ "http-server": "14.1.1", "jiti": "2.7.0", "js-yaml": "5.4.1", + "playwright": "1.62.1", "tslib": "2.8.1", "tsx": "4.23.13", "typescript": "6.0.3", diff --git a/packages/ckeditor5/package.json b/packages/ckeditor5/package.json index 5c65c9817c..2fc67f8067 100644 --- a/packages/ckeditor5/package.json +++ b/packages/ckeditor5/package.json @@ -10,8 +10,7 @@ }, "devDependencies": { "@vitest/browser": "5.0.0", - "vitest": "5.0.0", - "webdriverio": "9.31.5" + "vitest": "5.0.0" }, "dependencies": { "@triliumnext/commons": "workspace:*", diff --git a/packages/ckeditor5/src/plugins/footnotes/README.md b/packages/ckeditor5/src/plugins/footnotes/README.md index e240ef938e..238c1b1e56 100644 --- a/packages/ckeditor5/src/plugins/footnotes/README.md +++ b/packages/ckeditor5/src/plugins/footnotes/README.md @@ -92,7 +92,7 @@ this package. | `utils.ts` | Model/view tree query helpers | | `constants.ts` | Element, class, attribute and command name tables | -Tests sit beside each source as `*.spec.ts` and run in the aggregate's WebdriverIO browser-mode +Tests sit beside each source as `*.spec.ts` and run in the aggregate's Playwright browser-mode suite against a real `ClassicEditor`. Fixtures come from `test/footnotes-kit.ts` and build the document with a model writer rather than `_setModelData()` — the parser coerces numeric-looking attribute values (`data-footnote-index="1"`) to numbers where the plugin writes and compares diff --git a/packages/ckeditor5/src/plugins/format_painter/format_painter_ui.spec.ts b/packages/ckeditor5/src/plugins/format_painter/format_painter_ui.spec.ts index f93836c39f..c010f41a51 100644 --- a/packages/ckeditor5/src/plugins/format_painter/format_painter_ui.spec.ts +++ b/packages/ckeditor5/src/plugins/format_painter/format_painter_ui.spec.ts @@ -1,4 +1,4 @@ -import { userEvent } from "vitest/browser"; +import { cdp, userEvent } from "vitest/browser"; import { Bold, type ButtonView, @@ -157,8 +157,10 @@ describe("FormatPainterUI", () => { if (!(second instanceof HTMLElement) || !(third instanceof HTMLElement)) { throw new Error("target paragraphs are not attached"); } - // A real pointer press, move and release — i.e. a native text drag-select. - await userEvent.dragAndDrop(second, third); + // A real pointer press, move and release — i.e. a native text drag-select. Driven over + // CDP because `userEvent.dragAndDrop` turns on Playwright's drag interception, which + // reports a drag intent to the page instead of selecting any text. + await dragSelect(second, third); const selection = editor.model.document.selection; expect(selection.isCollapsed).toBe(false); @@ -208,3 +210,21 @@ describe("FormatPainterUI", () => { }); }); }); + +/** + * Presses at the start of `from`, drags to the middle of `to` and releases, the way a user selects + * text across two elements. + * + * `CDPSession` carries no methods of its own, so the one command this needs is named here. + */ +async function dragSelect(from: Element, to: Element) { + const session = cdp() as { send(method: string, params: Record): Promise }; + const start = from.getBoundingClientRect(); + const end = to.getBoundingClientRect(); + const press = { x: start.left + 2, y: start.top + start.height / 2 }; + const release = { x: end.left + end.width / 2, y: end.top + end.height / 2 }; + + await session.send("Input.dispatchMouseEvent", { type: "mousePressed", button: "left", buttons: 1, clickCount: 1, ...press }); + await session.send("Input.dispatchMouseEvent", { type: "mouseMoved", button: "left", buttons: 1, ...release }); + await session.send("Input.dispatchMouseEvent", { type: "mouseReleased", button: "left", buttons: 0, clickCount: 1, ...release }); +} diff --git a/packages/ckeditor5/vitest.config.ts b/packages/ckeditor5/vitest.config.ts index dfe3b013d5..03fdbddd08 100644 --- a/packages/ckeditor5/vitest.config.ts +++ b/packages/ckeditor5/vitest.config.ts @@ -1,14 +1,13 @@ import { resolve } from "node:path"; -import { webdriverio } from "@vitest/browser-webdriverio"; +import { playwright } from "@vitest/browser-playwright"; import { defineConfig } from "vitest/config"; /** - * The browser to drive, when the one webdriverio would fetch for itself cannot run — on NixOS the - * downloaded Chrome for Testing dies on a missing `libxcb.so.1`, since nothing outside the store - * provides it. Point `CHROME_BIN` at a system Chrome/Chromium and webdriverio skips the download - * altogether; pair it with `CHROMEDRIVER_PATH` (webdriverio's own variable) for the driver, which - * has the same problem. The Nix dev shell sets both. + * The browser to drive, when the one Playwright downloads for itself cannot run — on NixOS the + * bundled Chromium dies on a missing `libxcb.so.1`, since nothing outside the store provides it. + * Point `CHROME_BIN` at a system Chrome/Chromium and Playwright launches that instead. The Nix dev + * shell sets it. */ const systemChrome = process.env.CHROME_BIN; @@ -16,12 +15,15 @@ export default defineConfig({ test: { browser: { enabled: true, - provider: webdriverio(systemChrome - ? { capabilities: { browserName: "chrome", "goog:chromeOptions": { binary: systemChrome } } } - : {}), + provider: playwright({ + // Specs assert en-US number formatting (`toLocaleString()` renders 1,234 there and + // 1.234 under a European locale), so the host machine's locale must not decide. + contextOptions: { locale: "en-US" }, + ...(systemChrome ? { launchOptions: { executablePath: systemChrome } } : {}) + }), headless: true, ui: false, - instances: [{ browser: "chrome" }] + instances: [{ browser: "chromium" }] }, include: ["src/**/*.spec.ts"], setupFiles: ["./test/setup.ts"], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cea7d4d4a9..3f79c974dc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -111,12 +111,12 @@ importers: '@typescript/native': specifier: npm:typescript@7.0.2 version: typescript@7.0.2 - '@vitest/browser-webdriverio': - specifier: 4.1.11 - version: 4.1.11(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0)(webdriverio@9.31.5(supports-color@10.2.2)) + '@vitest/browser-playwright': + specifier: 5.0.0 + version: 5.0.0(playwright@1.62.1)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0) '@vitest/coverage-v8': specifier: 5.0.0 - version: 5.0.0(vitest@5.0.0) + version: 5.0.0(@vitest/browser@5.0.0)(vitest@5.0.0) '@vitest/ui': specifier: 5.0.0 version: 5.0.0(vitest@5.0.0) @@ -153,6 +153,9 @@ importers: js-yaml: specifier: 5.4.1 version: 5.4.1 + playwright: + specifier: 1.62.1 + version: 1.62.1 tslib: specifier: 2.8.1 version: 2.8.1 @@ -170,7 +173,7 @@ importers: version: 8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0) vitest: specifier: 5.0.0 - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) apps/build-docs: dependencies: @@ -422,7 +425,7 @@ importers: version: 9.6.0 vitest: specifier: 5.0.0 - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) apps/desktop: dependencies: @@ -1045,7 +1048,7 @@ importers: version: 8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0) vitest: specifier: 5.0.0 - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) packages/ckeditor5: dependencies: @@ -1070,10 +1073,7 @@ importers: version: 5.0.0(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0) vitest: specifier: 5.0.0 - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) - webdriverio: - specifier: 9.31.5 - version: 9.31.5(supports-color@10.2.2) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) packages/codemirror: dependencies: @@ -1356,7 +1356,7 @@ importers: version: 6.0.3 vitest: specifier: 5.0.0 - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.104.0)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.104.0)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) packages/splitjs: devDependencies: @@ -1368,7 +1368,7 @@ importers: version: 20.14.0 vitest: specifier: 5.0.0 - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) packages/trilium-backup-container: dependencies: @@ -1486,7 +1486,7 @@ importers: version: 1.12.2 vitest: specifier: 5.0.0 - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) packages: @@ -1712,9 +1712,6 @@ packages: '@blazediff/core@1.10.0': resolution: {integrity: sha512-AOQff0zgR7cGsZL+4E7hVkmujoPUpm0J9xzWGWZj5wCjd3gmxESXAPfKyuzs93VdpQNFhHlBhfOjrcZ+XTERtQ==} - '@blazediff/core@1.9.1': - resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} - '@borewit/text-codec@0.2.2': resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} @@ -3558,9 +3555,6 @@ packages: resolution: {integrity: sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==} engines: {node: '>= 20.19.0'} - '@nodable/entities@2.2.0': - resolution: {integrity: sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg==} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -3779,9 +3773,6 @@ packages: '@prefresh/babel-plugin': optional: true - '@promptbook/utils@0.69.5': - resolution: {integrity: sha512-xm5Ti/Hp3o4xHrsK9Yy3MS6KbDxYbq485hDsFvxqaNA7equHLPdo8H8faTitTeb14QCDfLW4iwCxdVYu5sn6YQ==} - '@protobufjs/aspromise@1.1.2': resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} @@ -3812,11 +3803,6 @@ packages: '@protobufjs/utf8@1.1.1': resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==} - '@puppeteer/browsers@2.13.2': - resolution: {integrity: sha512-5EUZSUIc37H6aIXyWO0Z4y8NlF8NnjgmqeQgOGiswAU7pY0HOo16ho4+alIWmSfdZnjqBRawMsP3I5YqLSn6kw==} - engines: {node: '>=18'} - hasBin: true - '@radix-ui/primitive@1.0.0': resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} @@ -4665,9 +4651,6 @@ packages: '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@topcli/prompts@4.0.0': resolution: {integrity: sha512-kkKYPb4k/6kRdnESt77B5vJrrYnYHIYczwv0P1c+tfN/IWEx3KZeKEHoUq7sImIyBEXWdA2uakIroD9pmRJziQ==} engines: {node: '>=22.0.0'} @@ -4920,9 +4903,6 @@ packages: '@types/node@16.9.1': resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} - '@types/node@20.19.43': - resolution: {integrity: sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==} - '@types/node@22.19.19': resolution: {integrity: sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==} @@ -4959,9 +4939,6 @@ packages: '@types/serve-static@2.2.0': resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==} - '@types/sinonjs__fake-timers@8.1.5': - resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} - '@types/slice-ansi@4.0.0': resolution: {integrity: sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==} @@ -4986,9 +4963,6 @@ packages: '@types/whatwg-mimetype@3.0.2': resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} - '@types/which@2.0.2': - resolution: {integrity: sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==} - '@types/wrap-ansi@3.0.0': resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} @@ -5758,16 +5732,11 @@ packages: resolution: {integrity: sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==} engines: {node: '>= 20'} - '@vitest/browser-webdriverio@4.1.11': - resolution: {integrity: sha512-utftie0XLjhATDCCRAaCZFVlosjQX6mF8UK+mo0q2yTn+XASUdz21tqvAA6fYRgLDiHAIVI06cBaKAklRp4UVA==} + '@vitest/browser-playwright@5.0.0': + resolution: {integrity: sha512-N+gED9y4/8pypaHjz/x0ah3CjoBr+N0hWWT+Gq4VXtMzyB+rUIdHni0ulzpD1j4H77iWy5Jg8PRMlVn6kjxo6g==} peerDependencies: - vitest: 4.1.11 - webdriverio: '*' - - '@vitest/browser@4.1.11': - resolution: {integrity: sha512-bwMovvAeuTFOK5kIFevw4VEf+1gVEICv4SYK4k3knJOxl6b1zEWud8mYKD73e1B0odAn174h1MofURy2TPWf3w==} - peerDependencies: - vitest: 4.1.11 + playwright: '*' + vitest: 5.0.0 '@vitest/browser@5.0.0': resolution: {integrity: sha512-JC9FG5xIRxPHXJPcdCaluIJcEoeM0IwGQ3xneuJk09LXKHRNs40BqWDWymQikbb20yOpYvzpKzmYgPRuSzKmvg==} @@ -5791,17 +5760,6 @@ packages: resolution: {integrity: sha512-1EOLRfsTMnyAr3+kEAsP4o9dhaDlGPpD7H5iLBBeq//YpNB1VIahkPhB+eRp9N2Dkfw8oySROjE3yf9XDeaIkQ==} engines: {node: '>=22'} - '@vitest/mocker@4.1.11': - resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==} - peerDependencies: - msw: ^2.4.9 - vite: '>=7.3.2' - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - '@vitest/mocker@5.0.0': resolution: {integrity: sha512-66PGTMIiVJP3t4a5yxU9qPtf7MdTBs8jmToMvy+HVflB3Yy13WJZTtPePdvU+wjRV02SKK5doLbSA6o9pwOmiA==} peerDependencies: @@ -5813,15 +5771,9 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.11': - resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==} - '@vitest/pretty-format@5.0.0': resolution: {integrity: sha512-PVRNuB3wpReb4SQEs4zTKM4KWFhQ5pw3spE8naoDJNB5T5aWRzGKHwXcLUllr0WeOTXpB6bSr3CJLo5+7XQSSQ==} - '@vitest/spy@4.1.11': - resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==} - '@vitest/spy@5.0.0': resolution: {integrity: sha512-uy+luWBAPw9XfthoHi5AkfHUnuPYEESjl0p/r+meoBnU8bxg5GDQ3Ey8MjcJ6sqahkL4PFyrvfMJJBw7LbU06g==} @@ -5830,38 +5782,12 @@ packages: peerDependencies: vitest: 5.0.0 - '@vitest/utils@4.1.11': - resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==} - '@vitest/utils@5.0.0': resolution: {integrity: sha512-dO++xL3vDfvhTAVimfkuQUA3k+JClIF1i1vAkPqpcGAthRmeWnXmHB7YPViPvgCwviX8u7Y5W1u2N//AaQr3fw==} '@vscode/sudo-prompt@9.3.2': resolution: {integrity: sha512-gcXoCN00METUNFeQOFJ+C9xUI0DKB+0EGMVg7wbVYRHBw2Eq3fKisDZOkRdOz3kqXRKOENMfShPOmypw1/8nOw==} - '@wdio/config@9.31.5': - resolution: {integrity: sha512-Xdjo6+Qxg31kMflG2uBp7oCOlr0/BGxjsNJXdz9gT6J3pkNwiQf2O5wSUuJYqOYnuYLAimAklC47/0L//+3H4w==} - engines: {node: '>=18.20.0'} - - '@wdio/logger@9.29.1': - resolution: {integrity: sha512-0ZAEIo6PNyMIJPlOGkIgyOJUjcd0pC8/QHlVAAe1c91/IcjZ1X+k0yidXHaboJdN7dq1XPUacmhRdtua0U5EZg==} - engines: {node: '>=18.20.0'} - - '@wdio/protocols@9.31.5': - resolution: {integrity: sha512-e4H5exl5xCcITF0y/3zd6pf9kX4TmV8/0nnWDGt4X0KbgDi/+tGqlquZ+YS4YBEPbv95yTqVhnazEsaBiH85Tw==} - - '@wdio/repl@9.16.2': - resolution: {integrity: sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==} - engines: {node: '>=18.20.0'} - - '@wdio/types@9.31.2': - resolution: {integrity: sha512-lQKaiQDCJJ6VC1K/cKzaAxCpwB9pL1U0VbmX2uGksMxO4EDbNuLvIxWryuUDJ7OaSYTjxILTKYFErdbT/xEikg==} - engines: {node: '>=18.20.0'} - - '@wdio/utils@9.31.5': - resolution: {integrity: sha512-wufYrRdz0Dr8Oa9OiaFsitQJsD8HWG5J4FQi/r3nZv/W3S+1h1lpBCAmDisH1Q6wN7Ed9v20E56ZU0UOaP5v3g==} - engines: {node: '>=18.20.0'} - '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -5955,10 +5881,6 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - '@zip.js/zip.js@2.8.26': - resolution: {integrity: sha512-RQ4h9F6DOiHxpdocUDrOl6xBM+yOtz+LkUol47AVWcfebGBDpZ7w7Xvz9PS24JgXvLGiXXzSAfdCdVy1tPlaFA==} - engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=18.0.0'} - abbrev@5.0.0: resolution: {integrity: sha512-/XrFJgzQQQHpti1raDJC6m4ws6aNktmjBlhk8Fdlk7LwCEuDoieEJJY9OFHjfiFJFFRM2tK+Ky/IsfbbmlMu1w==} engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} @@ -6014,10 +5936,6 @@ packages: aes-js@3.1.2: resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==} - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - agent-base@9.0.0: resolution: {integrity: sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==} engines: {node: '>= 20'} @@ -6096,9 +6014,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - anynum@1.0.1: - resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} - appdmg@0.6.6: resolution: {integrity: sha512-GRmFKlCG+PWbcYF4LUNonTYmy0GjguDy6Jh9WP8mpd0T6j80XIJyXBiWlD0U+MLNhqV9Nhx49Gl9GpVToulpLg==} engines: {node: '>=8.5'} @@ -6116,18 +6031,10 @@ packages: resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} engines: {node: '>= 10'} - archiver-utils@5.0.2: - resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} - engines: {node: '>= 14'} - archiver@5.3.2: resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} engines: {node: '>= 10'} - archiver@7.0.1: - resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} - engines: {node: '>= 14'} - archiver@8.0.0: resolution: {integrity: sha512-fV1orZfsnPn9BaSByR/qE67rJCLJEy2Ox5bq7nJh+jquWaNh6Sfec75kJ2T6PtdGUbPQlrVoSVCEOa5SdiTQ1g==} engines: {node: '>=18'} @@ -6139,10 +6046,6 @@ packages: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} @@ -6185,10 +6088,6 @@ packages: ast-metadata-inferer@0.8.1: resolution: {integrity: sha512-ht3Dm6Zr7SXv6t1Ra6gFo0+kLDglHGrEbYihTkcycrbHw7WCcuhBzPlJYHEsIpycaUwzsJHje+vUcxXUX4ztTA==} - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - ast-v8-to-istanbul@1.0.6: resolution: {integrity: sha512-fvpl29helSO2w/z7utIbrkNXILdrLwDwAMH2I/zPKlGf5244+gf+B4cyS1sANcrPY2h+hWCGSgC8N61s/+AF9A==} @@ -6265,14 +6164,6 @@ packages: bare-abort-controller: optional: true - bare-events@2.9.1: - resolution: {integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==} - peerDependencies: - bare-abort-controller: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - bare-fs@4.7.1: resolution: {integrity: sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==} engines: {bare: '>=1.16.0'} @@ -6282,29 +6173,13 @@ packages: bare-buffer: optional: true - bare-fs@4.7.3: - resolution: {integrity: sha512-xRgplks8SvcKkdlv2M6Z2LZmRsmqd+x0nXXGXeMEjwdibj1HSDrlnqBRLeYdMvsgCox7Bq0e+DHwfczOfsn6IA==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - bare-os@3.9.1: resolution: {integrity: sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==} engines: {bare: '>=1.14.0'} - bare-os@3.9.3: - resolution: {integrity: sha512-fF4Q7QsyKVF5Rj0qvI8BgUNjqzC2JvQlpTaPLjVJVxYVUX5Zr9un+y3w1HmA4nNKdFmRBT8z/WmrjvXzXVerKQ==} - engines: {bare: '>=1.14.0'} - bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-path@3.0.1: - resolution: {integrity: sha512-ghj2DSK/2e99a1anTVPCV4m4YIYtrbXhfM7V3D7XZLOTsybnYyaJloymGqssQc8l/or0UoDyRtNQkmkEF/ysgQ==} - bare-stream@2.13.1: resolution: {integrity: sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==} peerDependencies: @@ -6319,26 +6194,9 @@ packages: bare-events: optional: true - bare-stream@2.13.3: - resolution: {integrity: sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==} - peerDependencies: - bare-abort-controller: '*' - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - bare-buffer: - optional: true - bare-events: - optional: true - bare-url@2.4.3: resolution: {integrity: sha512-Kccpc7ACfXaxfeInfqKcZtW4pT5YBn1mesc4sCsun6sRwtbJ4h+sNOaksUpYEJUKfN65YWC6Bw2OJEFiKxq8nQ==} - bare-url@2.4.5: - resolution: {integrity: sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==} - base32-encode@1.2.0: resolution: {integrity: sha512-cHFU8XeRyx0GgmoWi5qHMCVRiqU6J3MHWxVgun7jggCBUpVzm1Ir7M9dYr2whjSNc3tFeXfQ/oZjQu/4u55h9A==} @@ -6363,10 +6221,6 @@ packages: resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} engines: {node: '>= 0.8'} - basic-ftp@6.0.1: - resolution: {integrity: sha512-3ilxa3n4276wGQp/ImRAuz4ALdsj/2Wd3FqoZBZlajDYnByCZ0JMb4+26Rde0wGXIbM0G2HWSfr/Fi8b21KX8g==} - engines: {node: '>=10.0.0'} - before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} @@ -6614,13 +6468,6 @@ packages: chardet@2.2.0: resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.2.0: - resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} - engines: {node: '>=20.18.1'} - chevrotain-allstar@0.3.1: resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==} peerDependencies: @@ -6833,10 +6680,6 @@ packages: resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} engines: {node: '>= 10'} - compress-commons@6.0.2: - resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} - engines: {node: '>= 14'} - compress-commons@7.0.1: resolution: {integrity: sha512-g0S8KAD8qf4+V//pr3BfB1aBnARLXNz2Gx+jmHU0LEriUuoQUOPOulVquHKTJ8+EAIIO7fhseNDr9wK5Q9FKBQ==} engines: {node: '>=18'} @@ -6949,10 +6792,6 @@ packages: resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} engines: {node: '>= 10'} - crc32-stream@6.0.0: - resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} - engines: {node: '>= 14'} - crc32-stream@7.0.1: resolution: {integrity: sha512-IBWsY8xznyQrcHn8h4bC8/4ErNke5elzgG8GcqF4RFPw6aHkWWRc7Tgw6upjaTX/CT/yQgqYENkxYsTYN+hW2g==} engines: {node: '>=18'} @@ -6995,9 +6834,6 @@ packages: css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - css-shorthand-properties@1.1.2: - resolution: {integrity: sha512-C2AugXIpRGQTxaCW0N7n5jD/p5irUmCrwl03TrnMFBHDbdq44CFWR2zO7rK9xPN4Eo3pUxC4vQzQgbIpzrD1PQ==} - css-tree@2.2.1: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -7006,9 +6842,6 @@ packages: resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css-value@0.0.1: - resolution: {integrity: sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==} - css-what@6.2.2: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} @@ -7194,10 +7027,6 @@ packages: dagre-d3-es@7.0.14: resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - data-urls@7.0.0: resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -7234,10 +7063,6 @@ packages: supports-color: optional: true - decamelize@6.0.1: - resolution: {integrity: sha512-G7Cqgaelq68XHJNGlZ7lrNQyhZGsFqpwtGFexqUv4IQdjKoSYF7ipZ9UuTJZUSQXFj/XaoBLuEVIVqr8EJngEQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} @@ -7251,10 +7076,6 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge-ts@7.1.5: - resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} - engines: {node: '>=16.0.0'} - deepmerge-ts@8.0.2: resolution: {integrity: sha512-uqbvqLUMrc6p0MO+WBRtTxY55hmyh94WRwI5a++PZe54X+bfVh59FSN7uWCBCW1CCVjzjnrwzfI8zidE2obMMw==} engines: {node: '>=16.9.0'} @@ -7285,10 +7106,6 @@ packages: defu@6.1.7: resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - delaunator@5.1.0: resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} @@ -7419,15 +7236,6 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - edge-paths@3.0.5: - resolution: {integrity: sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==} - engines: {node: '>=14.0.0'} - - edgedriver@6.3.0: - resolution: {integrity: sha512-ggEQL+oEyIcM4nP2QC3AtCQ04o4kDNefRM3hja0odvlPSnsaxiruMxEZ93v3gDCKWYW6BXUr51PPradb+3nffw==} - engines: {node: '>=20.0.0'} - hasBin: true - ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -7520,9 +7328,6 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - encoding-sniffer@0.2.1: - resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} - encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -7537,10 +7342,6 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - entities@7.0.1: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} @@ -7645,11 +7446,6 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - eslint-config-preact@2.0.0: resolution: {integrity: sha512-TFj70lEE7y3R9DQAFJ/clRfVmyaXdwE3q56gA9zm+iTmlpYjtZKtV1jv/jtgdF2LqgvJjlGlGE1rHVwE9yNdkg==} peerDependencies: @@ -7726,11 +7522,6 @@ packages: resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - esquery@1.7.0: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} @@ -7858,9 +7649,6 @@ packages: resolution: {integrity: sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==} engines: {node: '>=10.0.0'} - fast-deep-equal@2.0.1: - resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -7889,13 +7677,6 @@ packages: fast-uri@3.1.4: resolution: {integrity: sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==} - fast-xml-builder@1.2.1: - resolution: {integrity: sha512-tPb5TTWfgfVx5BNSi2xV0eLr89POeXXn0dXIsCJ9m1narrWxeIyx6je9d7Rce/3NyXLbvuQmLkxq+RuxMWejvw==} - - fast-xml-parser@5.9.3: - resolution: {integrity: sha512-brCNCeScma/kqa54J4PIDriSSSLssRkuYaUCpvHJulGc3HGI/xxKUCTDcYkAdqJsyb//ydpbxecjC3hB9+tb/g==} - hasBin: true - fastdom@1.0.12: resolution: {integrity: sha512-LB+xjSTEbjHE1cWsxu+tN2Xqr1kpi+V9aADI7sVM5ZMaXyYGPHULQMzpJMYqOTULK/73pUkWVzzObFRBkPr+hg==} @@ -8130,11 +7911,6 @@ packages: resolution: {integrity: sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - geckodriver@6.1.1: - resolution: {integrity: sha512-/AcCyc9o9o6hUbudaSJM2iOtXbxSLqQPOb4GrPvEN40cjraUeaX/j5kH3mSgwiroyMn7qzx2wM61AQ2XY8j3sA==} - engines: {node: '>=20.0.0'} - hasBin: true - generate-function@2.3.1: resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} @@ -8173,10 +7949,6 @@ packages: resolution: {integrity: sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw==} engines: {node: '>= 4.0'} - get-port@7.2.0: - resolution: {integrity: sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==} - engines: {node: '>=16'} - get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -8196,10 +7968,6 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-uri@6.0.5: - resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} - engines: {node: '>= 14'} - gifenc@1.0.3: resolution: {integrity: sha512-xdr6AdrfGBcfzncONUOlXMBuc5wJDtOueE3c5rdG0oNgtINLD+f2iFZltrBRZYzACRbKr+mSVU/x98zv2u3jmw==} @@ -8285,9 +8053,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - gridstack@13.2.0: resolution: {integrity: sha512-+ImmOx6qd1wiF0EagY7e/pPdngh/6s0FM+r9hh4d8AsXslO51iHEuoAF7CMrXCFr0Xqd0X4WS/bqRLXtEUThug==} @@ -8451,9 +8216,6 @@ packages: htmldiff-js@1.0.5: resolution: {integrity: sha512-rmow9353OK0elkub15Sbze8Nj7BYfduqoJJw4yEvHHjOcHeCazNPk0PoUbjE8SvxKgjymeRIFU/OnS8jtitRtA==} - htmlfy@0.8.1: - resolution: {integrity: sha512-xWROBw9+MEGwxpotll0h672KCaLrKKiCYzsyN8ZgL9cQbVumFnyvsk2JqiB9ELAV1GLj1GG/jxZUjV9OZZi/yQ==} - htmlparser2@10.1.0: resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} @@ -8472,10 +8234,6 @@ packages: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - http-proxy-agent@9.1.0: resolution: {integrity: sha512-2NxoveTT58mjYT4n3RPTEfCZGLMbidoO8XEieXfpSYxu+PQJ1qpx4ypwH6N+uF9twBPIvRRgvkvW5HUTYWENig==} engines: {node: '>= 20'} @@ -8493,10 +8251,6 @@ packages: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - https-proxy-agent@9.1.0: resolution: {integrity: sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==} engines: {node: '>= 20'} @@ -8784,10 +8538,6 @@ packages: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - is-stream@4.0.1: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} @@ -8816,9 +8566,6 @@ packages: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} - is-unsafe@1.0.1: - resolution: {integrity: sha512-CLK2+VdgERgD96EYm5lUQssZYlRg2tkZnbsxZoacmSiRxiFJ4Nk4SzjCl+Ur+v3kXIY9dTIdb3IH22y1mZ56LA==} - is-url@1.2.4: resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} @@ -9211,9 +8958,6 @@ packages: localforage@1.10.0: resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} - locate-app@2.5.0: - resolution: {integrity: sha512-xIqbzPMBYArJRmPGUZD9CzV9wOqmVtQnaAn3wrj3s6WYW0bQvPI7x+sPYUGmDTYMHefVK//zc6HEYZ1qnxIK+Q==} - locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -9228,9 +8972,6 @@ packages: lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.clonedeep@4.5.0: - resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} - lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -9290,9 +9031,6 @@ packages: lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - lodash.zip@4.2.0: - resolution: {integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==} - lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} @@ -9308,13 +9046,6 @@ packages: resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - loglevel-plugin-prefix@0.8.4: - resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} - - loglevel@1.9.2: - resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} - engines: {node: '>= 0.6.0'} - long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} @@ -9336,10 +9067,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} @@ -9666,9 +9393,6 @@ packages: resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -9681,10 +9405,6 @@ packages: mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} - modern-tar@0.7.6: - resolution: {integrity: sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg==} - engines: {node: '>=18.0.0'} - mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -9759,10 +9479,6 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - netmask@2.1.1: - resolution: {integrity: sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==} - engines: {node: '>= 0.4.0'} - ngraph.events@1.4.0: resolution: {integrity: sha512-NeDGI4DSyjBNBRtA86222JoYietsmCXbs8CEB0dZ51Xeh4lhVl1y3wpWLumczvnha8sFQIW4E0vvVWwgmX2mGw==} @@ -10027,14 +9743,6 @@ packages: resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} engines: {node: '>=4'} - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} - - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -10081,15 +9789,6 @@ packages: parse-srcset@1.0.2: resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - - parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - parse5@8.0.1: resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==} @@ -10115,10 +9814,6 @@ packages: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - path-expression-matcher@1.6.1: - resolution: {integrity: sha512-h7bxdzhHk8Knyc4Tj+jMaa7fEEoUJy7p1qtbVgkYg1Uhpe5Np5VuGXCRZnkZvU+Q42M1vStt0ifa3ueykRJPmQ==} - engines: {node: '>=14.0.0'} - path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -10373,13 +10068,6 @@ packages: kerberos: optional: true - proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - publish-browser-extension@5.1.0: resolution: {integrity: sha512-cRP5AV5UhXGheK//GwI3dCKPDtvStbcoqwerh6HZ7McB6RpepQmkHjSAWXmNGik0Eu0sRhPPuRUNmgvCn+cFrg==} engines: {node: '>=18.0.0'} @@ -10417,9 +10105,6 @@ packages: quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} - query-selector-shadow-dom@1.0.1: - resolution: {integrity: sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -10707,9 +10392,6 @@ packages: responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - resq@1.11.0: - resolution: {integrity: sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==} - restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -10722,10 +10404,6 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} - ret@0.5.0: - resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==} - engines: {node: '>=10'} - retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -10740,9 +10418,6 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rgb2hex@0.2.5: - resolution: {integrity: sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==} - rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -10793,10 +10468,6 @@ packages: rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - safaridriver@1.0.1: - resolution: {integrity: sha512-jkg4434cYgtrIF2AeY/X0Wmd2W73cK5qIEFE3hDrrQenJH/2SDJIXGvPAigfvQTcE9+H31zkiNHbUqcihEiMRA==} - engines: {node: '>=18.0.0'} - safe-array-concat@1.1.4: resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} engines: {node: '>=0.4'} @@ -10818,10 +10489,6 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} - safe-regex2@5.1.1: - resolution: {integrity: sha512-mOSBvHGDZMuIEZMdOz/aCEYDCv0E7nfcNsIhUF+/P+xC7Hyf3FkvymqgPbg9D1EdSGu+uKbJgy09K/RKKc7kJA==} - hasBin: true - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -10909,10 +10576,6 @@ packages: resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} - serialize-error@12.0.0: - resolution: {integrity: sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==} - engines: {node: '>=18'} - serialize-error@7.0.1: resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} engines: {node: '>=10'} @@ -11027,18 +10690,6 @@ packages: resolution: {integrity: sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==} deprecated: Unsupported - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.9: - resolution: {integrity: sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - sonner@2.0.7: resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} peerDependencies: @@ -11075,9 +10726,6 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - spacetrim@0.11.59: - resolution: {integrity: sha512-lLYsktklSRKprreOm7NXReW8YiX2VBjbgmXYEziOoGf/qsJqAEACaDvoTtUOycwjpaSh+bT8eu0KrJn7UNxiCg==} - spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -11137,9 +10785,6 @@ packages: streamx@2.25.0: resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} - streamx@2.28.0: - resolution: {integrity: sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==} - strictdom@1.0.1: resolution: {integrity: sha512-cEmp9QeXXRmjj/rVp9oyiqcvyocWab/HaoN4+bwFeZ7QzykJD6L3yD4v12K1x0tHpqRqVpJevN3gW7kyM39Bqg==} @@ -11213,9 +10858,6 @@ packages: striptags@3.2.0: resolution: {integrity: sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==} - strnum@2.4.1: - resolution: {integrity: sha512-M9eUSMT2dCB2cTNPG7UYj6KuK7RJR2SN2+yCV/fTW3xzTCS6EaGZ5pSMgDIjB7r8zSfTGk+dvvn9rTjpVS9Mwg==} - strtok3@10.3.5: resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} engines: {node: '>=18'} @@ -11299,9 +10941,6 @@ packages: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} - tar-fs@3.1.3: - resolution: {integrity: sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ==} - tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -11436,10 +11075,6 @@ packages: tinyqueue@3.0.0: resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==} - tinyrainbow@3.1.0: - resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} - engines: {node: '>=14.0.0'} - tinyrainbow@3.1.1: resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==} engines: {node: '>=14.0.0'} @@ -11572,14 +11207,6 @@ packages: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} - type-fest@4.26.0: - resolution: {integrity: sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==} - engines: {node: '>=16'} - - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -11822,9 +11449,6 @@ packages: url-join@4.0.1: resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} - urlpattern-polyfill@10.1.0: - resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} - use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -11853,10 +11477,6 @@ packages: user-agent-data-types@0.4.3: resolution: {integrity: sha512-Dn3fjwVgeM363mx1sEgOpOp9NNqHBj6Gn68dFbV1WoTr3s05CijKdxfH6A3Q5uzXnYNB6vdAfs/1HWFpObc7EQ==} - userhome@1.0.1: - resolution: {integrity: sha512-5cnLm4gseXjAclKowC4IjByaGsjtAoV6PrOQOljplNB54ReUYJP8HdAFq2muHinSDAh09PPX/uXDPfdxRHvuSA==} - engines: {node: '>= 0.8.0'} - username@5.1.0: resolution: {integrity: sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg==} engines: {node: '>=8'} @@ -12028,11 +11648,6 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} - wait-port@1.1.0: - resolution: {integrity: sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==} - engines: {node: '>=10'} - hasBin: true - warning@4.0.3: resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} @@ -12049,19 +11664,6 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - webdriver@9.31.5: - resolution: {integrity: sha512-ppQ3sKydQ59CVDsODri/pIdVfVp5nSP78qfwbK9LrrICbLkXktCd0pK/Nbc3EclbJ2hOfhfHpU8vuodJ73e4uA==} - engines: {node: '>=18.20.0'} - - webdriverio@9.31.5: - resolution: {integrity: sha512-XfbzuhqNcpdZeX70bEEmYCvpQ9fgfXVVOkQWF+rCZBkmqW4W61Ol4bqUnKLIhXI4vysSATi2S19vxPK+WTAeWA==} - engines: {node: '>=18.20.0'} - peerDependencies: - puppeteer-core: '>=22.x <=24.x' - peerDependenciesMeta: - puppeteer-core: - optional: true - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -12094,19 +11696,10 @@ packages: engines: {node: '>=12'} deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - whatwg-mimetype@5.0.0: resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} engines: {node: '>=20'} @@ -12150,11 +11743,6 @@ packages: engines: {node: '>= 8'} hasBin: true - which@6.0.1: - resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==} - engines: {node: ^20.17.0 || >=22.9.0} - hasBin: true - which@7.0.0: resolution: {integrity: sha512-RancgH2dmbLdHl6LRhEqvklWMgl/Hdnun0Y90KhBOLkMefg8Qa7/Zel8Sm+8HEcP6DEjzsWzpkuBQEZok58isA==} engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} @@ -12241,10 +11829,6 @@ packages: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} - xml-naming@0.1.0: - resolution: {integrity: sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==} - engines: {node: '>=16.0.0'} - xml-parse-from-string@1.0.1: resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} @@ -12337,10 +11921,6 @@ packages: resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} engines: {node: '>= 10'} - zip-stream@6.0.1: - resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} - engines: {node: '>= 14'} - zip-stream@7.0.5: resolution: {integrity: sha512-dSvYKdvLsAHCDqPOhIwk/q5CvuWtTB3Dgpoe0uVEFjTzIOAmsQpprX25InCvrvJsirEbu1OHyy67n/kAj1Sw/w==} engines: {node: '>=18'} @@ -12650,8 +12230,6 @@ snapshots: '@blazediff/core@1.10.0': {} - '@blazediff/core@1.9.1': {} - '@borewit/text-codec@0.2.2': {} '@braintree/sanitize-url@6.0.2': {} @@ -15417,8 +14995,6 @@ snapshots: '@noble/hashes@2.4.0': {} - '@nodable/entities@2.2.0': {} - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -15634,10 +15210,6 @@ snapshots: transitivePeerDependencies: - oxc-parser - '@promptbook/utils@0.69.5': - dependencies: - spacetrim: 0.11.59 - '@protobufjs/aspromise@1.1.2': {} '@protobufjs/base64@1.1.2': {} @@ -15660,21 +15232,6 @@ snapshots: '@protobufjs/utf8@1.1.1': {} - '@puppeteer/browsers@2.13.2(supports-color@10.2.2)': - dependencies: - debug: 4.4.3(supports-color@10.2.2) - extract-zip: 2.0.1(supports-color@10.2.2) - progress: 2.0.3 - proxy-agent: 6.5.0(supports-color@10.2.2) - semver: 7.8.5 - tar-fs: 3.1.3 - yargs: 17.7.3 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - supports-color - '@radix-ui/primitive@1.0.0': dependencies: '@babel/runtime': 7.29.7 @@ -16554,8 +16111,6 @@ snapshots: '@tokenizer/token@0.3.0': {} - '@tootallnate/quickjs-emscripten@0.23.0': {} - '@topcli/prompts@4.0.0': {} '@tweenjs/tween.js@25.0.0': {} @@ -16844,10 +16399,6 @@ snapshots: '@types/node@16.9.1': {} - '@types/node@20.19.43': - dependencies: - undici-types: 6.21.0 - '@types/node@22.19.19': dependencies: undici-types: 6.21.0 @@ -16889,8 +16440,6 @@ snapshots: '@types/http-errors': 2.0.5 '@types/node': 24.13.3 - '@types/sinonjs__fake-timers@8.1.5': {} - '@types/slice-ansi@4.0.0': {} '@types/superagent@8.1.9': @@ -16916,8 +16465,6 @@ snapshots: '@types/whatwg-mimetype@3.0.2': {} - '@types/which@2.0.2': {} - '@types/wrap-ansi@3.0.0': {} '@types/ws@8.18.1': @@ -18529,28 +18076,13 @@ snapshots: '@vercel/oidc@3.2.0': {} - '@vitest/browser-webdriverio@4.1.11(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0)(webdriverio@9.31.5(supports-color@10.2.2))': + '@vitest/browser-playwright@5.0.0(playwright@1.62.1)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0)': dependencies: - '@vitest/browser': 4.1.11(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0) - vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) - webdriverio: 9.31.5(supports-color@10.2.2) - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - - '@vitest/browser@4.1.11(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0)': - dependencies: - '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.11(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) - '@vitest/utils': 4.1.11 - magic-string: 0.30.21 - pngjs: 7.0.0 - sirv: 3.0.2 - tinyrainbow: 3.1.0 - vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) - ws: 8.21.0 + '@vitest/browser': 5.0.0(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0) + '@vitest/mocker': 5.0.0(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) + playwright: 1.62.1 + tinyrainbow: 3.1.1 + vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw @@ -18567,7 +18099,7 @@ snapshots: pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.1 - vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) + vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) ws: 8.21.3 transitivePeerDependencies: - bufferutil @@ -18575,7 +18107,7 @@ snapshots: - utf-8-validate - vite - '@vitest/coverage-v8@5.0.0(vitest@5.0.0)': + '@vitest/coverage-v8@5.0.0(@vitest/browser@5.0.0)(vitest@5.0.0)': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/istanbul-lib-coverage': 1.0.1 @@ -18585,7 +18117,9 @@ snapshots: obug: 2.1.4 std-env: 4.2.0 tinyrainbow: 3.1.1 - vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) + vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) + optionalDependencies: + '@vitest/browser': 5.0.0(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0) '@vitest/istanbul-lib-coverage@1.0.1': {} @@ -18593,14 +18127,6 @@ snapshots: dependencies: '@vitest/istanbul-lib-coverage': 1.0.1 - '@vitest/mocker@4.1.11(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))': - dependencies: - '@vitest/spy': 4.1.11 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0) - '@vitest/mocker@5.0.0(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))': dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -18619,16 +18145,10 @@ snapshots: optionalDependencies: vite: 8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.104.0)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0) - '@vitest/pretty-format@4.1.11': - dependencies: - tinyrainbow: 3.1.0 - '@vitest/pretty-format@5.0.0': dependencies: tinyrainbow: 3.1.1 - '@vitest/spy@4.1.11': {} - '@vitest/spy@5.0.0': {} '@vitest/ui@5.0.0(vitest@5.0.0)': @@ -18639,13 +18159,7 @@ snapshots: pathe: 2.0.3 sirv: 3.0.2 tinyrainbow: 3.1.1 - vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) - - '@vitest/utils@4.1.11': - dependencies: - '@vitest/pretty-format': 4.1.11 - convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 + vitest: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) '@vitest/utils@5.0.0': dependencies: @@ -18655,61 +18169,6 @@ snapshots: '@vscode/sudo-prompt@9.3.2': {} - '@wdio/config@9.31.5(supports-color@10.2.2)': - dependencies: - '@wdio/logger': 9.29.1 - '@wdio/types': 9.31.2 - '@wdio/utils': 9.31.5(supports-color@10.2.2) - deepmerge-ts: 7.1.5 - glob: 13.0.6 - import-meta-resolve: 4.2.0 - jiti: 2.7.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - supports-color - - '@wdio/logger@9.29.1': - dependencies: - chalk: 5.6.2 - loglevel: 1.9.2 - loglevel-plugin-prefix: 0.8.4 - safe-regex2: 5.1.1 - strip-ansi: 7.2.0 - - '@wdio/protocols@9.31.5': {} - - '@wdio/repl@9.16.2': - dependencies: - '@types/node': 20.19.43 - - '@wdio/types@9.31.2': - dependencies: - '@types/node': 20.19.43 - - '@wdio/utils@9.31.5(supports-color@10.2.2)': - dependencies: - '@puppeteer/browsers': 2.13.2(supports-color@10.2.2) - '@wdio/logger': 9.29.1 - '@wdio/types': 9.31.2 - decamelize: 6.0.1 - deepmerge-ts: 7.1.5 - edgedriver: 6.3.0(supports-color@10.2.2) - geckodriver: 6.1.1(supports-color@10.2.2) - get-port: 7.2.0 - import-meta-resolve: 4.2.0 - locate-app: 2.5.0 - mitt: 3.0.1 - safaridriver: 1.0.1 - split2: 4.2.0 - wait-port: 1.1.0(supports-color@10.2.2) - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - supports-color - '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -18835,8 +18294,6 @@ snapshots: '@xtuc/long@4.2.2': {} - '@zip.js/zip.js@2.8.26': {} - abbrev@5.0.0: {} abort-controller@3.0.0: @@ -18879,8 +18336,6 @@ snapshots: aes-js@3.1.2: {} - agent-base@7.1.4: {} - agent-base@9.0.0: {} ai@7.0.92(zod@4.5.4): @@ -18952,8 +18407,6 @@ snapshots: normalize-path: 3.0.0 picomatch: 4.0.5 - anynum@1.0.1: {} - appdmg@0.6.6: dependencies: async: 1.5.2 @@ -18997,16 +18450,6 @@ snapshots: normalize-path: 3.0.0 readable-stream: 3.6.2 - archiver-utils@5.0.2: - dependencies: - glob: 13.0.6 - graceful-fs: 4.2.11 - is-stream: 2.0.1 - lazystream: 1.0.1 - lodash: 4.18.1 - normalize-path: 3.0.0 - readable-stream: 4.7.0 - archiver@5.3.2: dependencies: archiver-utils: 2.1.0 @@ -19017,20 +18460,6 @@ snapshots: tar-stream: 2.2.0 zip-stream: 4.1.1 - archiver@7.0.1: - dependencies: - archiver-utils: 5.0.2 - async: 3.2.6 - buffer-crc32: 1.0.0 - readable-stream: 4.7.0 - readdir-glob: 1.1.3 - tar-stream: 3.2.0 - zip-stream: 6.0.1 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - archiver@8.0.0: dependencies: async: 3.2.6 @@ -19053,8 +18482,6 @@ snapshots: dependencies: tslib: 2.8.1 - aria-query@5.3.2: {} - array-buffer-byte-length@1.0.2: dependencies: call-bound: 1.0.4 @@ -19131,10 +18558,6 @@ snapshots: dependencies: '@mdn/browser-compat-data': 5.7.6 - ast-types@0.13.4: - dependencies: - tslib: 2.8.1 - ast-v8-to-istanbul@1.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -19186,9 +18609,6 @@ snapshots: bare-events@2.8.3: {} - bare-events@2.9.1: - optional: true - bare-fs@4.7.1: dependencies: bare-events: 2.8.3 @@ -19200,32 +18620,12 @@ snapshots: - bare-abort-controller - react-native-b4a - bare-fs@4.7.3: - dependencies: - bare-events: 2.9.1 - bare-path: 3.0.1 - bare-stream: 2.13.3(bare-events@2.9.1) - bare-url: 2.4.5 - fast-fifo: 1.3.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - bare-os@3.9.1: {} - bare-os@3.9.3: - optional: true - bare-path@3.0.0: dependencies: bare-os: 3.9.1 - bare-path@3.0.1: - dependencies: - bare-os: 3.9.3 - optional: true - bare-stream@2.13.1(bare-events@2.8.3): dependencies: streamx: 2.25.0 @@ -19235,26 +18635,10 @@ snapshots: transitivePeerDependencies: - react-native-b4a - bare-stream@2.13.3(bare-events@2.9.1): - dependencies: - b4a: 1.8.1 - streamx: 2.28.0 - teex: 1.0.1 - optionalDependencies: - bare-events: 2.9.1 - transitivePeerDependencies: - - react-native-b4a - optional: true - bare-url@2.4.3: dependencies: bare-path: 3.0.0 - bare-url@2.4.5: - dependencies: - bare-path: 3.0.1 - optional: true - base32-encode@1.2.0: dependencies: to-data-view: 1.1.0 @@ -19272,8 +18656,6 @@ snapshots: dependencies: safe-buffer: 5.1.2 - basic-ftp@6.0.1: {} - before-after-hook@4.0.0: {} better-sqlite3@13.0.3: @@ -19545,29 +18927,6 @@ snapshots: chardet@2.2.0: {} - cheerio-select@2.1.0: - dependencies: - boolbase: 1.0.0 - css-select: 5.2.2 - css-what: 6.2.2 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - - cheerio@1.2.0: - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.2.2 - encoding-sniffer: 0.2.1 - htmlparser2: 10.1.0 - parse5: 7.3.0 - parse5-htmlparser2-tree-adapter: 7.1.0 - parse5-parser-stream: 7.1.2 - undici: 8.9.0 - whatwg-mimetype: 4.0.0 - chevrotain-allstar@0.3.1(chevrotain@11.0.3): dependencies: chevrotain: 11.0.3 @@ -19836,14 +19195,6 @@ snapshots: normalize-path: 3.0.0 readable-stream: 3.6.2 - compress-commons@6.0.2: - dependencies: - crc-32: 1.2.2 - crc32-stream: 6.0.0 - is-stream: 2.0.1 - normalize-path: 3.0.0 - readable-stream: 4.7.0 - compress-commons@7.0.1: dependencies: crc-32: 1.2.2 @@ -19952,11 +19303,6 @@ snapshots: crc-32: 1.2.2 readable-stream: 3.6.2 - crc32-stream@6.0.0: - dependencies: - crc-32: 1.2.2 - readable-stream: 4.7.0 - crc32-stream@7.0.1: dependencies: crc-32: 1.2.2 @@ -20005,8 +19351,6 @@ snapshots: domutils: 3.2.2 nth-check: 2.1.1 - css-shorthand-properties@1.1.2: {} - css-tree@2.2.1: dependencies: mdn-data: 2.0.28 @@ -20018,8 +19362,6 @@ snapshots: mdn-data: 2.27.1 source-map-js: 1.2.1 - css-value@0.0.1: {} - css-what@6.2.2: {} cssesc@3.0.0: {} @@ -20229,8 +19571,6 @@ snapshots: d3: 7.9.0 lodash-es: 4.18.1 - data-uri-to-buffer@6.0.2: {} - data-urls@7.0.0(@noble/hashes@2.4.0): dependencies: whatwg-mimetype: 5.0.0 @@ -20270,8 +19610,6 @@ snapshots: optionalDependencies: supports-color: 10.2.2 - decamelize@6.0.1: {} - decimal.js@10.6.0: {} decode-named-character-reference@1.3.0: @@ -20284,8 +19622,6 @@ snapshots: deep-is@0.1.4: {} - deepmerge-ts@7.1.5: {} - deepmerge-ts@8.0.2: {} deepmerge@4.3.1: {} @@ -20312,12 +19648,6 @@ snapshots: defu@6.1.7: {} - degenerator@5.0.1: - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - delaunator@5.1.0: dependencies: robust-predicates: 3.0.3 @@ -20461,24 +19791,6 @@ snapshots: eastasianwidth@0.2.0: {} - edge-paths@3.0.5: - dependencies: - '@types/which': 2.0.2 - which: 2.0.2 - - edgedriver@6.3.0(supports-color@10.2.2): - dependencies: - '@wdio/logger': 9.29.1 - '@zip.js/zip.js': 2.8.26 - decamelize: 6.0.1 - edge-paths: 3.0.5 - fast-xml-parser: 5.9.3 - http-proxy-agent: 7.0.2(supports-color@10.2.2) - https-proxy-agent: 7.0.6(supports-color@10.2.2) - which: 6.0.1 - transitivePeerDependencies: - - supports-color - ee-first@1.1.1: {} ejs@6.0.1: {} @@ -20617,11 +19929,6 @@ snapshots: encodeurl@2.0.0: {} - encoding-sniffer@0.2.1: - dependencies: - iconv-lite: 0.6.3 - whatwg-encoding: 3.1.1 - encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -20638,8 +19945,6 @@ snapshots: entities@4.5.0: {} - entities@6.0.1: {} - entities@7.0.1: {} entities@8.0.0: {} @@ -20811,14 +20116,6 @@ snapshots: escape-string-regexp@5.0.0: {} - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - eslint-config-preact@2.0.0(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2): dependencies: '@babel/core': 7.29.0(supports-color@10.2.2) @@ -20949,8 +20246,6 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 5.0.1 - esprima@4.0.1: {} - esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -21130,8 +20425,6 @@ snapshots: '@fast-csv/format': 4.3.5 '@fast-csv/parse': 4.3.6 - fast-deep-equal@2.0.1: {} - fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -21156,20 +20449,6 @@ snapshots: fast-uri@3.1.4: {} - fast-xml-builder@1.2.1: - dependencies: - path-expression-matcher: 1.6.1 - xml-naming: 0.1.0 - - fast-xml-parser@5.9.3: - dependencies: - '@nodable/entities': 2.2.0 - fast-xml-builder: 1.2.1 - is-unsafe: 1.0.1 - path-expression-matcher: 1.6.1 - strnum: 2.4.1 - xml-naming: 0.1.0 - fastdom@1.0.12: dependencies: strictdom: 1.0.1 @@ -21443,17 +20722,6 @@ snapshots: gar@1.0.4: optional: true - geckodriver@6.1.1(supports-color@10.2.2): - dependencies: - '@wdio/logger': 9.29.1 - '@zip.js/zip.js': 2.8.26 - decamelize: 6.0.1 - http-proxy-agent: 7.0.2(supports-color@10.2.2) - https-proxy-agent: 7.0.6(supports-color@10.2.2) - modern-tar: 0.7.6 - transitivePeerDependencies: - - supports-color - generate-function@2.3.1: dependencies: is-property: 1.0.2 @@ -21502,8 +20770,6 @@ snapshots: transitivePeerDependencies: - supports-color - get-port@7.2.0: {} - get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -21525,14 +20791,6 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-uri@6.0.5(supports-color@10.2.2): - dependencies: - basic-ftp: 6.0.1 - data-uri-to-buffer: 6.0.2 - debug: 4.4.3(supports-color@10.2.2) - transitivePeerDependencies: - - supports-color - gifenc@1.0.3: {} gifwrap@0.10.1: @@ -21635,8 +20893,6 @@ snapshots: graceful-fs@4.2.11: {} - grapheme-splitter@1.0.4: {} - gridstack@13.2.0: {} hachure-fill@0.5.2: {} @@ -21852,8 +21108,6 @@ snapshots: htmldiff-js@1.0.5: {} - htmlfy@0.8.1: {} - htmlparser2@10.1.0: dependencies: domelementtype: 2.3.0 @@ -21886,13 +21140,6 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 - http-proxy-agent@7.0.2(supports-color@10.2.2): - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@10.2.2) - transitivePeerDependencies: - - supports-color - http-proxy-agent@9.1.0(supports-color@10.2.2): dependencies: agent-base: 9.0.0 @@ -21934,13 +21181,6 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - https-proxy-agent@7.0.6(supports-color@10.2.2): - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@10.2.2) - transitivePeerDependencies: - - supports-color - https-proxy-agent@9.1.0(supports-color@10.2.2): dependencies: agent-base: 9.0.0 @@ -22185,8 +21425,6 @@ snapshots: is-stream@1.1.0: {} - is-stream@2.0.1: {} - is-stream@4.0.1: {} is-string@1.1.1: @@ -22212,8 +21450,6 @@ snapshots: is-unicode-supported@2.1.0: {} - is-unsafe@1.0.1: {} - is-url@1.2.4: {} is-weakmap@2.0.2: {} @@ -22610,12 +21846,6 @@ snapshots: dependencies: lie: 3.1.1 - locate-app@2.5.0: - dependencies: - '@promptbook/utils': 0.69.5 - type-fest: 4.26.0 - userhome: 1.0.1 - locate-path@2.0.0: dependencies: p-locate: 2.0.0 @@ -22629,8 +21859,6 @@ snapshots: lodash.camelcase@4.3.0: {} - lodash.clonedeep@4.5.0: {} - lodash.debounce@4.0.8: {} lodash.defaults@4.2.0: {} @@ -22669,9 +21897,8 @@ snapshots: lodash.uniq@4.5.0: {} - lodash.zip@4.2.0: {} - - lodash@4.18.1: {} + lodash@4.18.1: + optional: true log-symbols@4.1.0: dependencies: @@ -22691,10 +21918,6 @@ snapshots: strip-ansi: 7.2.0 wrap-ansi: 8.1.0 - loglevel-plugin-prefix@0.8.4: {} - - loglevel@1.9.2: {} - long@5.3.2: {} longest-streak@3.1.0: {} @@ -22711,8 +21934,6 @@ snapshots: dependencies: yallist: 3.1.1 - lru-cache@7.18.3: {} - lunr@2.3.9: {} lz-string@1.5.0: {} @@ -23227,8 +22448,6 @@ snapshots: dependencies: minipass: 7.1.3 - mitt@3.0.1: {} - mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -23242,8 +22461,6 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.4 - modern-tar@0.7.6: {} - mrmime@2.0.1: {} ms@2.0.0: {} @@ -23316,8 +22533,6 @@ snapshots: neo-async@2.6.2: {} - netmask@2.1.1: {} - ngraph.events@1.4.0: {} nice-try@1.0.5: {} @@ -23601,24 +22816,6 @@ snapshots: p-try@1.0.0: {} - pac-proxy-agent@7.2.0(supports-color@10.2.2): - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.4 - debug: 4.4.3(supports-color@10.2.2) - get-uri: 6.0.5(supports-color@10.2.2) - http-proxy-agent: 7.0.2(supports-color@10.2.2) - https-proxy-agent: 7.0.6(supports-color@10.2.2) - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5(supports-color@10.2.2) - transitivePeerDependencies: - - supports-color - - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.1.1 - package-json-from-dist@1.0.1: {} package-manager-detector@1.6.0: {} @@ -23668,19 +22865,6 @@ snapshots: parse-srcset@1.0.2: {} - parse5-htmlparser2-tree-adapter@7.1.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.3.0 - - parse5-parser-stream@7.1.2: - dependencies: - parse5: 7.3.0 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - parse5@8.0.1: dependencies: entities: 8.0.0 @@ -23700,8 +22884,6 @@ snapshots: path-exists@5.0.0: {} - path-expression-matcher@1.6.1: {} - path-is-absolute@1.0.1: {} path-key@2.0.1: {} @@ -23934,21 +23116,6 @@ snapshots: proxy-agent-negotiate@1.1.0: {} - proxy-agent@6.5.0(supports-color@10.2.2): - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@10.2.2) - http-proxy-agent: 7.0.2(supports-color@10.2.2) - https-proxy-agent: 7.0.6(supports-color@10.2.2) - lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0(supports-color@10.2.2) - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5(supports-color@10.2.2) - transitivePeerDependencies: - - supports-color - - proxy-from-env@1.1.0: {} - publish-browser-extension@5.1.0: dependencies: cac: 6.7.14 @@ -23985,8 +23152,6 @@ snapshots: quansync@0.2.11: {} - query-selector-shadow-dom@1.0.1: {} - queue-microtask@1.2.3: {} quick-lru@5.1.1: {} @@ -24388,10 +23553,6 @@ snapshots: dependencies: lowercase-keys: 2.0.0 - resq@1.11.0: - dependencies: - fast-deep-equal: 2.0.1 - restore-cursor@3.1.0: dependencies: onetime: 5.1.2 @@ -24407,8 +23568,6 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 - ret@0.5.0: {} - retry@0.12.0: {} reusify@1.1.0: {} @@ -24417,8 +23576,6 @@ snapshots: rfdc@1.4.1: {} - rgb2hex@0.2.5: {} - rimraf@2.6.3: dependencies: glob: 7.2.3 @@ -24498,8 +23655,6 @@ snapshots: dependencies: tslib: 2.8.1 - safaridriver@1.0.1: {} - safe-array-concat@1.1.4: dependencies: call-bind: 1.0.9 @@ -24527,10 +23682,6 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 - safe-regex2@5.1.1: - dependencies: - ret: 0.5.0 - safer-buffer@2.1.2: {} sanitize-filename@1.6.4: @@ -24635,10 +23786,6 @@ snapshots: transitivePeerDependencies: - supports-color - serialize-error@12.0.0: - dependencies: - type-fest: 4.41.0 - serialize-error@7.0.1: dependencies: type-fest: 0.13.1 @@ -24801,21 +23948,6 @@ snapshots: sliced@1.0.1: {} - smart-buffer@4.2.0: {} - - socks-proxy-agent@8.0.5(supports-color@10.2.2): - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@10.2.2) - socks: 2.8.9 - transitivePeerDependencies: - - supports-color - - socks@2.8.9: - dependencies: - ip-address: 10.2.0 - smart-buffer: 4.2.0 - sonner@2.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 @@ -24844,8 +23976,6 @@ snapshots: space-separated-tokens@2.0.2: {} - spacetrim@0.11.59: {} - spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -24900,16 +24030,6 @@ snapshots: - bare-abort-controller - react-native-b4a - streamx@2.28.0: - dependencies: - events-universal: 1.0.1 - fast-fifo: 1.3.2 - text-decoder: 1.2.7 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - strictdom@1.0.1: {} string-width@4.2.3: @@ -25014,10 +24134,6 @@ snapshots: striptags@3.2.0: {} - strnum@2.4.1: - dependencies: - anynum: 1.0.1 - strtok3@10.3.5: dependencies: '@tokenizer/token': 0.3.0 @@ -25148,18 +24264,6 @@ snapshots: tapable@2.3.3: {} - tar-fs@3.1.3: - dependencies: - pump: 3.0.4 - tar-stream: 3.2.0 - optionalDependencies: - bare-fs: 4.7.3 - bare-path: 3.0.1 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - tar-stream@2.2.0: dependencies: bl: 4.1.0 @@ -25294,8 +24398,6 @@ snapshots: tinyqueue@3.0.0: {} - tinyrainbow@3.1.0: {} - tinyrainbow@3.1.1: {} tldts-core@7.4.6: {} @@ -25422,10 +24524,6 @@ snapshots: type-fest@1.4.0: {} - type-fest@4.26.0: {} - - type-fest@4.41.0: {} - type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -25714,8 +24812,6 @@ snapshots: url-join@4.0.1: {} - urlpattern-polyfill@10.1.0: {} - use-callback-ref@1.3.3(react@18.3.1): dependencies: react: 18.3.1 @@ -25748,8 +24844,6 @@ snapshots: user-agent-data-types@0.4.3: {} - userhome@1.0.1: {} - username@5.1.0: dependencies: execa: 1.0.0 @@ -25846,7 +24940,7 @@ snapshots: tsx: 4.23.13 yaml: 2.9.0 - vitest@5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)): + vitest@5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)): dependencies: '@types/chai': 5.2.3 '@vitest/mocker': 5.0.0(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) @@ -25865,15 +24959,15 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.1 '@types/node': 24.13.3 - '@vitest/browser-webdriverio': 4.1.11(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0)(webdriverio@9.31.5(supports-color@10.2.2)) - '@vitest/coverage-v8': 5.0.0(vitest@5.0.0) + '@vitest/browser-playwright': 5.0.0(playwright@1.62.1)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0) + '@vitest/coverage-v8': 5.0.0(@vitest/browser@5.0.0)(vitest@5.0.0) '@vitest/ui': 5.0.0(vitest@5.0.0) happy-dom: 20.14.0 jsdom: 30.0.1(@noble/hashes@2.4.0) transitivePeerDependencies: - msw - vitest@5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-webdriverio@4.1.11)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.104.0)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)): + vitest@5.0.0(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.0)(jsdom@30.0.1(@noble/hashes@2.4.0))(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.104.0)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)): dependencies: '@types/chai': 5.2.3 '@vitest/mocker': 5.0.0(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.104.0)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0)) @@ -25892,8 +24986,8 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.1 '@types/node': 24.13.3 - '@vitest/browser-webdriverio': 4.1.11(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0)(webdriverio@9.31.5(supports-color@10.2.2)) - '@vitest/coverage-v8': 5.0.0(vitest@5.0.0) + '@vitest/browser-playwright': 5.0.0(playwright@1.62.1)(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.47.1)(tsx@4.23.13)(yaml@2.9.0))(vitest@5.0.0) + '@vitest/coverage-v8': 5.0.0(@vitest/browser@5.0.0)(vitest@5.0.0) '@vitest/ui': 5.0.0(vitest@5.0.0) happy-dom: 20.14.0 jsdom: 30.0.1(@noble/hashes@2.4.0) @@ -25923,14 +25017,6 @@ snapshots: dependencies: xml-name-validator: 5.0.0 - wait-port@1.1.0(supports-color@10.2.2): - dependencies: - chalk: 4.1.2 - commander: 9.5.0 - debug: 4.4.3(supports-color@10.2.2) - transitivePeerDependencies: - - supports-color - warning@4.0.3: dependencies: loose-envify: 1.4.0 @@ -25948,62 +25034,6 @@ snapshots: web-namespaces@2.0.1: {} - webdriver@9.31.5(supports-color@10.2.2): - dependencies: - '@types/node': 20.19.43 - '@types/ws': 8.18.1 - '@wdio/config': 9.31.5(supports-color@10.2.2) - '@wdio/logger': 9.29.1 - '@wdio/protocols': 9.31.5 - '@wdio/types': 9.31.2 - '@wdio/utils': 9.31.5(supports-color@10.2.2) - deepmerge-ts: 7.1.5 - https-proxy-agent: 7.0.6(supports-color@10.2.2) - undici: 6.27.0 - ws: 8.21.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - bufferutil - - react-native-b4a - - supports-color - - utf-8-validate - - webdriverio@9.31.5(supports-color@10.2.2): - dependencies: - '@types/node': 20.19.43 - '@types/sinonjs__fake-timers': 8.1.5 - '@wdio/config': 9.31.5(supports-color@10.2.2) - '@wdio/logger': 9.29.1 - '@wdio/protocols': 9.31.5 - '@wdio/repl': 9.16.2 - '@wdio/types': 9.31.2 - '@wdio/utils': 9.31.5(supports-color@10.2.2) - archiver: 7.0.1 - aria-query: 5.3.2 - cheerio: 1.2.0 - css-shorthand-properties: 1.1.2 - css-value: 0.0.1 - grapheme-splitter: 1.0.4 - htmlfy: 0.8.1 - is-plain-obj: 4.1.0 - jszip: 3.10.1 - lodash.clonedeep: 4.5.0 - lodash.zip: 4.2.0 - query-selector-shadow-dom: 1.0.1 - resq: 1.11.0 - rgb2hex: 0.2.5 - serialize-error: 12.0.0 - urlpattern-polyfill: 10.1.0 - webdriver: 9.31.5(supports-color@10.2.2) - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - bufferutil - - react-native-b4a - - supports-color - - utf-8-validate - webidl-conversions@3.0.1: {} webidl-conversions@8.0.1: {} @@ -26058,14 +25088,8 @@ snapshots: dependencies: iconv-lite: 0.6.3 - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - whatwg-mimetype@3.0.0: {} - whatwg-mimetype@4.0.0: {} - whatwg-mimetype@5.0.0: {} whatwg-url@16.0.1(@noble/hashes@2.4.0): @@ -26140,10 +25164,6 @@ snapshots: dependencies: isexe: 2.0.0 - which@6.0.1: - dependencies: - isexe: 4.0.0 - which@7.0.0: dependencies: isexe: 4.0.0 @@ -26237,8 +25257,6 @@ snapshots: xml-name-validator@5.0.0: {} - xml-naming@0.1.0: {} - xml-parse-from-string@1.0.1: {} xml2js@0.5.0: @@ -26328,12 +25346,6 @@ snapshots: compress-commons: 4.1.2 readable-stream: 3.6.2 - zip-stream@6.0.1: - dependencies: - archiver-utils: 5.0.2 - compress-commons: 6.0.2 - readable-stream: 4.7.0 - zip-stream@7.0.5: dependencies: compress-commons: 7.0.1