diff --git a/.github/actions/bench-diff/README.md b/.github/actions/bench-diff/README.md index 67aca6f65..e4028a35e 100644 --- a/.github/actions/bench-diff/README.md +++ b/.github/actions/bench-diff/README.md @@ -33,10 +33,10 @@ A browser suite, which needs a browser downloaded first: - uses: actions/checkout@v4 - uses: ./.github/actions/bench-diff with: - id: v4-mount - title: v4 mount benchmarks + id: mount + title: mount benchmarks unit: component - working-directory: packages/v4 + working-directory: packages/js-toolkit prepare: npx playwright install --with-deps chromium bench: npm exec vitest bench -- --config vitest.bench.config.js --run --outputJson "$BENCH_JSON" rounds: '3' @@ -49,9 +49,9 @@ A Node suite, which needs nothing extra — the only difference is the command: ```yaml - uses: ./.github/actions/bench-diff with: - id: v3 - title: v3 benchmarks - working-directory: packages/js-toolkit + id: utils + title: utils benchmarks + working-directory: packages/some-node-package bench: npm exec vitest bench -- --config vitest.bench.config.ts --run --outputJson "$BENCH_JSON" ``` diff --git a/.github/workflows/benchmarks-v3.yml b/.github/workflows/benchmarks-v3.yml deleted file mode 100644 index d65238e38..000000000 --- a/.github/workflows/benchmarks-v3.yml +++ /dev/null @@ -1,83 +0,0 @@ -name: benchmarks-v3 - -# v3's benchmarks used to run under CodSpeed, in Node with happy-dom. Both -# halves of that are gone. -# -# CodSpeed went because it did not work: on the last twelve merged pull -# requests, none of which touched `packages/js-toolkit/`, it failed five times -# and every one merged anyway. On #829 alone it read fail, fail, pass, fail, -# pass while that package's content never changed. A check that fails on an -# unchanged package is not a signal, and a signal everyone has learned to -# ignore is worse than none. -# -# happy-dom went because the numbers were not comparable to anything. v4's -# suite runs in Chromium, and the two must share an environment before a -# v3-against-v4 figure means anything — and the browser is the honest one -# regardless: v3's `SmartQueue` yields through `setTimeout`, whose clamping, -# and the `longtask` accounting that goes with it, exist only in a browser. -# -# A separate file rather than a job in `benchmarks-v4.yml`, for the reason the -# bench-diff README gives: two suites in one job would share a base checkout, -# and only a workflow-level `paths:` filter can keep each one off the pull -# requests that do not concern it. - -on: - pull_request: - branches: - - main - paths: - - 'packages/js-toolkit/**' - # The cross-version benchmark imports v4's sources and reuses its SWC - # decorator plugin, so a v4-only change moves half of what this suite - # measures. Without these, the one comparison that can catch a v4 - # mounting regression against v3 would skip the pull requests most - # likely to cause one. - - 'packages/v4/src/**' - - 'packages/v4/vite-plugin-decorators.js' - - 'package-lock.json' - - '.github/actions/bench-diff/**' - - '.github/workflows/benchmarks-v3.yml' - -permissions: - contents: read - pull-requests: write - -jobs: - bench_diff: - name: Compare against the base commit - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - uses: actions/checkout@v4 - - uses: ./.github/actions/bench-diff - with: - id: v3-mount - title: v3 mount benchmarks - unit: component - working-directory: packages/js-toolkit - # No build: vitest runs the browser suite straight from TypeScript. - prepare: npx playwright install --with-deps chromium - # The at-scale file only, and one size. - # - # The other ten benchmark files are micro-benchmarks that were - # readable under CodSpeed's instruction counting and are not readable - # on a wall clock: Chromium clamps `performance.now()` to 100 us, so a - # benchmark whose whole body costs a microsecond reports zero. They - # stay in the suite for local use — `npm run bench` — and are not - # tracked here. - # - # The full size matrix is 100/1 000. CI samples 1 000, the size above - # the timer's resolution floor. 5 000 is deliberately not sampled: - # v3's queue drains with `Array#shift`, which V8 turns quadratic past - # ~16 000 entries, so one v3 swap there costs over five seconds. - # - # Set on the command rather than as step `env:`, which a composite - # action's steps do not reliably inherit. - bench: V3_BENCH_SIZES=1000 npm exec vitest bench -- --config vitest.bench.config.ts --run src/__benchmarks__/mount-at-scale.bench.ts --outputJson "$BENCH_JSON" - rounds: '3' - # The action's measured same-commit noise floor: 4.5 % median, 12.5 % - # p90. 25 % leaves room for a shared runner being noisier than a - # developer machine, and `floor` drops anything the clock cannot - # resolve. - threshold: '25' - floor: '5' diff --git a/.github/workflows/benchmarks-v4.yml b/.github/workflows/benchmarks.yml similarity index 57% rename from .github/workflows/benchmarks-v4.yml rename to .github/workflows/benchmarks.yml index ae36b7c8a..0349a0c90 100644 --- a/.github/workflows/benchmarks-v4.yml +++ b/.github/workflows/benchmarks.yml @@ -1,28 +1,23 @@ -name: benchmarks-v4 +name: benchmarks -# v4's benchmarks run in a real Chromium, so they cannot share the v3 job in -# `benchmarks.yml`: CodSpeed's simulation mode instruments the Node process, -# while a browser-mode benchmark body runs in the browser over CDP, so it -# would measure the driver. This job compares the base and the head commit on -# one runner instead, which removes cross-machine noise without an account, a -# token or a stored baseline. +# The benchmarks run in a real Chromium, which rules out CodSpeed: its +# simulation mode instruments the Node process, while a browser-mode benchmark +# body runs in the browser over CDP, so it would measure the driver. This job +# compares the base and the head commit on one runner instead, which removes +# cross-machine noise without an account, a token or a stored baseline. # # It comments; it never blocks. The hard gate is `src/mount-at-scale.spec.ts` # in the normal test job, whose thresholds do not depend on runner speed. -# -# Separate file rather than a job in `benchmarks.yml` because only a -# workflow-level `paths:` filter can keep it off pull requests that do not -# touch v4, and `benchmarks.yml` must keep running for v3. on: pull_request: branches: - main paths: - - 'packages/v4/**' + - 'packages/js-toolkit/**' - 'package-lock.json' - '.github/actions/bench-diff/**' - - '.github/workflows/benchmarks-v4.yml' + - '.github/workflows/benchmarks.yml' permissions: contents: read @@ -38,16 +33,15 @@ jobs: - uses: ./.github/actions/bench-diff with: # Identity, not configuration: the action knows nothing about - # browsers or about v4. A second suite — v3's Node and happy-dom - # benchmarks, say — is another step with another `id`, not a branch - # inside the action. - id: v4-mount - title: v4 mount benchmarks + # browsers or about this package. A second suite is another step with + # another `id`, not a branch inside the action. + id: mount + title: mount benchmarks unit: component - working-directory: packages/v4 + working-directory: packages/js-toolkit # No build: vitest runs the browser suite straight from TypeScript. prepare: npx playwright install --with-deps chromium - # The at-scale file only. Adding the other three v4 benchmark files + # The at-scale file only. Adding the other three benchmark files # costs ~55 s per run, so ~5.5 min across six runs, for micro- # benchmarks a wall-clock diff can barely resolve. # @@ -56,7 +50,7 @@ jobs: # near 1 ms, where Chromium's 100 us clamp makes a percentage # meaningless. It is set on the command rather than as step `env:`, # which a composite action's steps do not reliably inherit. - bench: V4_BENCH_SIZES=1000,5000 npm exec vitest bench -- --config vitest.bench.config.js --run src/mount-at-scale.bench.ts --outputJson "$BENCH_JSON" + bench: BENCH_SIZES=1000,5000 npm exec vitest bench -- --config vitest.bench.config.js --run src/mount-at-scale.bench.ts --outputJson "$BENCH_JSON" rounds: '3' # Same-commit noise floor, three interleaved rounds per side: 4.5 % # median, 12.5 % p90, 33 % worst — and every case above 13 % is a diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index d59bd91bb..0a94f0083 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,5 +1,13 @@ name: docs +# The 4.x documentation, served at js-toolkit-v4.studiometa.dev. +# +# It keeps that domain for as long as 4.x is a prerelease: `latest` on npm is +# still 3.x, so js-toolkit.studiometa.dev must keep answering with the 3.x +# pages. Those are built and deployed from the `3.x` branch, which is also the +# production branch of the `js-toolkit` Cloudflare Pages project. The two +# domains swap when 4.0.0 ships. + on: push: branches: [main] @@ -8,7 +16,7 @@ on: - main jobs: - deploy-v3: + deploy: runs-on: ubuntu-latest permissions: contents: read @@ -23,37 +31,11 @@ jobs: - run: npm ci - - name: Build docs - run: npm run docs:build - - - name: Deploy to Cloudflare Pages - uses: cloudflare/wrangler-action@v3 - with: - apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} - accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} - gitHubToken: ${{ secrets.GITHUB_TOKEN }} - command: pages deploy packages/docs/.vitepress/dist --project-name=js-toolkit - - deploy-v4: - runs-on: ubuntu-latest - permissions: - contents: read - deployments: write - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-node@v4 - with: - node-version: 24 - cache: 'npm' - - - run: npm ci - - # Twoslash resolves the package types out of `dist`, since the v4 exports + # Twoslash resolves the package types out of `dist`, since the exports # map has no `typescript` condition. The docs build below ignores the # committed caches, so this is what it reads. - - name: Build the v4 package - run: npm run build:v4 + - name: Build the package + run: npm run build:js-toolkit # Regenerate every twoslash hover instead of trusting the committed caches. # @@ -63,11 +45,11 @@ jobs: # cache was first written. That is invisible: the build passes and the page # renders, only the tooltip is out of date. # - # The committed caches stay useful — they keep a local `docs:v4:dev` fast. + # The committed caches stay useful — they keep a local `docs:dev` fast. # What is published is regenerated, so it cannot drift from the source. # Costs about 50s: a 32s build becomes 83s for ~200 samples. - - name: Build v4 docs - run: npm run docs:v4:build + - name: Build the docs + run: npm run docs:build env: TWOSLASH_INLINE_CACHE_IGNORE: '1' @@ -77,4 +59,4 @@ jobs: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} gitHubToken: ${{ secrets.GITHUB_TOKEN }} - command: pages deploy packages/v4/docs/.vitepress/dist --project-name=js-toolkit-v4 + command: pages deploy packages/js-toolkit/docs/.vitepress/dist --project-name=js-toolkit-v4 diff --git a/.github/workflows/export-size.yml b/.github/workflows/export-size.yml index 514cc4a91..aab374579 100644 --- a/.github/workflows/export-size.yml +++ b/.github/workflows/export-size.yml @@ -6,7 +6,6 @@ on: - main paths: - 'packages/js-toolkit/**' - - 'packages/v4/**' - 'package-lock.json' - '.github/workflows/export-size.yml' @@ -22,10 +21,8 @@ jobs: - uses: weareikko/export-size@1 with: # `packages/js-toolkit/` is the folder npm publishes, so the report - # measures exactly what a consumer installs. Both packages resolve to - # their own `dist/`, which `npm run build` produces, so both appear in - # the same report and can be compared export by export. + # measures exactly what a consumer installs. It resolves to its own + # `dist/`, which `npm run build` produces below. packages: | @studiometa/js-toolkit:packages/js-toolkit - @studiometa/js-toolkit-v4:packages/v4 - build: npm run build && npm run check:constant-subpaths -w @studiometa/js-toolkit-v4 + build: npm run build && npm run check:constant-subpaths -w @studiometa/js-toolkit diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 96d6411b8..f33159d35 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -41,12 +41,12 @@ jobs: - name: Run types tests run: npm run lint:types - v4: - name: unit (v4) + js-toolkit: + name: unit (js-toolkit) runs-on: ubuntu-latest defaults: run: - working-directory: packages/v4 + working-directory: packages/js-toolkit steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -56,9 +56,9 @@ jobs: - name: Install dependencies run: npm ci --no-audit --no-progress --no-fund working-directory: . - # The v4 specs run in a real browser: they cover native view - # transitions, frame-aligned scheduling and DOM lifecycle, none of - # which a DOM emulation can answer for. + # The specs run in a real browser: they cover native view transitions, + # frame-aligned scheduling and DOM lifecycle, none of which a DOM + # emulation can answer for. - name: Install Playwright Chromium run: npx playwright install --with-deps chromium - name: Run tests @@ -68,23 +68,12 @@ jobs: - name: Check the packed package run: npm run check:package - unit: + eslint-plugin: + name: unit (eslint-plugin-js-toolkit) runs-on: macos-latest - strategy: - matrix: - include: - - package: js-toolkit - working-directory: packages/js-toolkit - test-command: npm test -- --retry=3 --coverage.enabled - coverage-file: packages/js-toolkit/coverage/clover.xml - - package: eslint-plugin-js-toolkit - working-directory: packages/eslint-plugin - test-command: npm test -- --retry=3 --coverage.enabled - coverage-file: packages/eslint-plugin/coverage/clover.xml - name: unit (${{ matrix.package }}) defaults: run: - working-directory: ${{ matrix.working-directory }} + working-directory: packages/eslint-plugin steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -95,12 +84,12 @@ jobs: run: npm ci --no-audit --no-progress --no-fund working-directory: . - name: Run tests - run: ${{ matrix.test-command }} + run: npm test -- --retry=3 --coverage.enabled - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 with: - files: ${{ matrix.coverage-file }} - flags: ${{ matrix.package }} + files: packages/eslint-plugin/coverage/clover.xml + flags: eslint-plugin-js-toolkit fail_ci_if_error: false verbose: true env: diff --git a/.gitignore b/.gitignore index f02dfddd8..34d8359a6 100644 --- a/.gitignore +++ b/.gitignore @@ -26,18 +26,16 @@ yarn-error.log* # Build files packages/*/dist/ -packages/demo/dist/ -/packages/v4/test/.runtime/ +/packages/js-toolkit/demo/dist/ +/packages/js-toolkit/test/.runtime/ # Module graph reports written by `npm run measure -- --json ` .measure-*.json -# Benchmark output written by `npm run bench:v4` +# Benchmark output written by `npm run bench` .bench-report.json -/packages/docs/.vitepress/cache -/packages/docs/.vitepress/dist -/packages/v4/docs/.vitepress/cache -/packages/v4/docs/.vitepress/dist +/packages/js-toolkit/docs/.vitepress/cache +/packages/js-toolkit/docs/.vitepress/dist coverage/ /full.d.ts /index.d.ts diff --git a/.oxfmtrc.json b/.oxfmtrc.json index bb5940202..d36845398 100644 --- a/.oxfmtrc.json +++ b/.oxfmtrc.json @@ -16,18 +16,7 @@ "packages/*/dist/", "packages/js-toolkit/README.md", "packages/js-toolkit/src/subpaths/", - "packages/docs/guide/recipes/counter-component/Counter.html", - "packages/docs/guide/recipes/scroll-linked-animation/ScrollLinkedAnimation.html", - "packages/docs/.vitepress/cache", - "packages/docs/.vitepress/dist", - "packages/v4/src/subpaths/" - ], - "overrides": [ - { - "files": ["packages/docs/**/*.md"], - "options": { - "printWidth": 78 - } - } + "packages/js-toolkit/docs/.vitepress/cache", + "packages/js-toolkit/docs/.vitepress/dist" ] } diff --git a/.oxlintrc.json b/.oxlintrc.json index 539e01f2e..fb60a5821 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -1,5 +1,5 @@ { - "ignorePatterns": ["packages/js-toolkit/src/subpaths/", "packages/v4/src/subpaths/"], + "ignorePatterns": ["packages/js-toolkit/src/subpaths/"], "jsPlugins": [ { "name": "js-toolkit", @@ -28,7 +28,7 @@ } }, { - "files": ["packages/v4/**/*.ts"], + "files": ["packages/js-toolkit/**/*.ts"], "plugins": ["import"], "rules": { "import/extensions": [ @@ -91,21 +91,23 @@ } }, { - "files": ["packages/js-toolkit/src/**/*.ts", "packages/demo/**/*.{ts,js}"], + // The component-authoring rules, on the two places this repository + // writes components rather than framework: the ported `@studiometa/ui` + // families and the demo application. + // + // `require-config` and `async-lifecycle-methods` are deliberately absent. + // Both encode a v3 shape: v4 lets an abstract base declare no config, and + // `mounted()` returns its cleanup function, so making it `async` is the + // mistake rather than the rule. + "files": ["packages/js-toolkit/migration/**/*.ts", "packages/js-toolkit/demo/**/*.{ts,js}"], "rules": { - "js-toolkit/require-config": "error", "js-toolkit/require-config-name-pascal-case": "error", "js-toolkit/refs-camel-case": "error", "js-toolkit/refs-plural-multiple": "error", "js-toolkit/options-camel-case": "error", - "js-toolkit/async-lifecycle-methods": "error", "js-toolkit/on-handler-naming": "error", "js-toolkit/on-global-handler-prefix": "warn", - "js-toolkit/no-deprecated-properties": "error", - "js-toolkit/no-dispatch-event": "warn", - "js-toolkit/no-shadow-dom": "error", - "js-toolkit/no-create-app": "warn", - "js-toolkit/no-event-listener-methods": "error" + "js-toolkit/no-create-app": "warn" } }, { @@ -113,9 +115,9 @@ "**/*.spec.ts", "**/*.bench.ts", "**/__benchmarks__/**", - "packages/v4/test/**", - "packages/v4/scripts/**", - "packages/v4/docs/**" + "packages/js-toolkit/test/**", + "packages/js-toolkit/scripts/**", + "packages/js-toolkit/docs/**" ], "rules": { "complexity": "off", diff --git a/CHANGELOG.md b/CHANGELOG.md index 3dafcf946..cb8d5620a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ All notable changes to this project will be documented in this file. The format ### Removed - Drop the dedicated subpaths of the 89 type-only symbols, such as `@studiometa/js-toolkit/BaseConfig`. Import types from `@studiometa/js-toolkit` or `@studiometa/js-toolkit/utils` instead ([#777](https://github.com/studiometa/js-toolkit/pull/777)) -- **Breaking:** drop `createLocalStorageProvider` and `createSessionStorageProvider` from the published surface of `@studiometa/js-toolkit-v4`, root entry and subpaths alike. Both returned an adapter behaving exactly like the `localStorageProvider` and `sessionStorageProvider` instances the package already exports — the adapter holds no state — so use those instances instead ([#841](https://github.com/studiometa/js-toolkit/pull/841)) +- **Breaking:** drop `createLocalStorageProvider` and `createSessionStorageProvider` from the published surface of `@studiometa/js-toolkit`, root entry and subpaths alike. Both returned an adapter behaving exactly like the `localStorageProvider` and `sessionStorageProvider` instances the package already exports — the adapter holds no state — so use those instances instead ([#841](https://github.com/studiometa/js-toolkit/pull/841)) ### Changed diff --git a/README.md b/README.md index 55f1c1ce2..ad723995b 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,16 @@ Its main objectives are: - Initializing components in the right place at the right time - Defining dependencies between components -Visit [js-toolkit.studiometa.dev](https://js-toolkit.studiometa.dev) to learn more, jump to [ui.studiometa.dev](https://ui.studiometa.dev) to discover existing components, or open [the playground](https://ui.studiometa.dev/-/play/) to test it live. +Visit [js-toolkit-v4.studiometa.dev](https://js-toolkit-v4.studiometa.dev) to learn more, jump to [ui.studiometa.dev](https://ui.studiometa.dev) to discover existing components, or open [the playground](https://ui.studiometa.dev/-/play/) to test it live. + +## Branches + +| Branch | Line | npm | Documentation | +| ---------------------------------------------------------- | ------------------- | -------- | -------------------------------------------------------------------- | +| `main` | 4.x | `next` | [js-toolkit-v4.studiometa.dev](https://js-toolkit-v4.studiometa.dev) | +| [`3.x`](https://github.com/studiometa/js-toolkit/tree/3.x) | 3.x, in maintenance | `latest` | [js-toolkit.studiometa.dev](https://js-toolkit.studiometa.dev) | + +4.0 is a breaking major and is currently an alpha, so `latest` still installs 3.x. The two domains swap when 4.0.0 ships. Open a fix for the 3.x line against the `3.x` branch, and anything about 4.x against `main`. ## Packages @@ -57,18 +66,17 @@ Visit [js-toolkit.studiometa.dev](https://js-toolkit.studiometa.dev) to learn mo | ------------------------------------------------------------------- | -------------------------------------------------------------------------------- | | [`@studiometa/js-toolkit`](./packages/js-toolkit/) | The framework and its utility functions. | | [`@studiometa/eslint-plugin-js-toolkit`](./packages/eslint-plugin/) | Oxlint/ESLint rules enforcing the framework's best practices. | -| [`packages/v4`](./packages/v4/) | The v4 prototype, private and not published. | -| [`packages/docs`](./packages/docs/) | Sources of [js-toolkit.studiometa.dev](https://js-toolkit.studiometa.dev). | -| [`packages/v4/docs`](./packages/v4/docs/) | Sources of [js-toolkit-v4.studiometa.dev](https://js-toolkit-v4.studiometa.dev). | -| [`packages/demo`](./packages/demo/) | A playground application used during development. | +| [`packages/js-toolkit/docs`](./packages/js-toolkit/docs/) | Sources of [js-toolkit-v4.studiometa.dev](https://js-toolkit-v4.studiometa.dev). | +| [`packages/js-toolkit/demo`](./packages/js-toolkit/demo/) | A playground application used during development. | +| [`packages/js-toolkit/migration`](./packages/js-toolkit/migration/) | `@studiometa/ui` families ported onto v4 to measure what a migration costs. | ## Installation ```bash -npm install @studiometa/js-toolkit +npm install @studiometa/js-toolkit@next ``` -See the [package README](./packages/js-toolkit/README.md) for a longer introduction, or the [Getting Started guide](https://js-toolkit.studiometa.dev/guide/). +See the [package README](./packages/js-toolkit/README.md) for a longer introduction, or the [Getting Started guide](https://js-toolkit-v4.studiometa.dev/guide/). ## Contributing diff --git a/package-lock.json b/package-lock.json index af72a70c6..c4e664ce1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,18 @@ { "name": "@studiometa/js-toolkit-workspace", - "version": "3.9.0", + "version": "4.0.0-alpha.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@studiometa/js-toolkit-workspace", - "version": "3.9.0", + "version": "4.0.0-alpha.0", "hasInstallScript": true, "workspaces": [ "packages/*" ], "devDependencies": { "@types/node": "22.19.0", - "focus-trap": "^7.8.0", "oxfmt": "0.62.0", "oxlint": "1.77.0", "oxlint-tsgolint": "7.0.2001", @@ -22,21 +21,6 @@ "vite": "8.2.1" } }, - "node_modules/@babel/code-frame": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", - "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.29.7", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", @@ -73,31 +57,6 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/runtime": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", - "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", - "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/types": { "version": "7.29.8", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", @@ -129,1530 +88,919 @@ "dev": true, "license": "MIT" }, - "node_modules/@bufbuild/protobuf": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.13.0.tgz", - "integrity": "sha512-acq7c49vxfm1ggJ95P70TX7ABDM0vxr1SYD3BB0o0jnBLB4OAqeHyKuN+cD3w80gXEDQ2zxHpR6CUeA+O/aU9g==", + "node_modules/@docsearch/css": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.7.0.tgz", + "integrity": "sha512-Sk5xkdRFeE7PeWjG9l4AfTwdvMfr9wHiwNNCpHXT4v4SNyNMKdHGvEILc31BgaVFGDDNbv5u/a73tofRiwbEZw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@docsearch/js": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-4.7.0.tgz", + "integrity": "sha512-x5lCqu1tetgsJFkjQ6VSocbHldsRkGEgwg5N98Vx21sq/V5wcmj4u226PY9k+TEpIgQ772zlYbPLTPicWyGnpA==", "dev": true, - "license": "(Apache-2.0 AND BSD-3-Clause)" + "license": "MIT" }, - "node_modules/@cacheable/memory": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.2.0.tgz", - "integrity": "sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==", + "node_modules/@docsearch/sidepanel-js": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@docsearch/sidepanel-js/-/sidepanel-js-4.7.0.tgz", + "integrity": "sha512-A8r34jCU8kcIk2viECEn2msA28ojUF1BLi/3v5OWWc5G2N3jOuuumBXoeYjfr8dA0UxgFSy5R2bt12dnFJQSyA==", "dev": true, - "license": "MIT", - "dependencies": { - "@cacheable/utils": "^2.5.0", - "@keyv/bigmap": "^1.3.1", - "hookified": "^1.15.1", - "keyv": "^5.6.0" - } + "license": "MIT" }, - "node_modules/@cacheable/memory/node_modules/@keyv/bigmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", - "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", "dev": true, "license": "MIT", "dependencies": { - "hashery": "^1.4.0", - "hookified": "^1.15.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">= 18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" }, "peerDependencies": { - "keyv": "^5.6.0" + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@cacheable/memory/node_modules/keyv": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", - "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "MIT", - "dependencies": { - "@keyv/serialize": "^1.1.1" + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@cacheable/utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.5.0.tgz", - "integrity": "sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", - "dependencies": { - "hashery": "^1.5.1", - "keyv": "^5.6.0" + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@cacheable/utils/node_modules/keyv": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", - "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "node_modules/@eslint/config-array": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@keyv/serialize": "^1.1.1" + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@colordx/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@colordx/core/-/core-5.5.0.tgz", - "integrity": "sha512-3PxTH8itZzltK0U9jTwVVnjLXvnDYuq3m+QXsHkENxWiPRh4WaoLcs1SQjqgZ55kS+QyirpH5BVwzP2gMVG6EQ==", + "node_modules/@eslint/config-array/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, - "node_modules/@csstools/cascade-layer-name-parser": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", - "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">=18" + "node": ">=6.0" }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@csstools/color-helpers": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", - "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "node_modules/@eslint/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", + "license": "MIT" + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@csstools/css-color-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", - "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@csstools/color-helpers": "^5.1.0", - "@csstools/css-calc": "^2.1.4" + "@types/json-schema": "^7.0.15" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "node_modules/@eslint/eslintrc": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz", + "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", + "dependencies": { + "ajv": "^6.14.0", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.3.0", + "minimatch": "^3.1.5", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.7.tgz", - "integrity": "sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "peerDependencies": { - "css-tree": "^3.2.1" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "peerDependenciesMeta": { - "css-tree": { - "optional": true - } + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "node_modules/@eslint/eslintrc/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@csstools/media-query-list-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", - "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">=18" + "node": ">=6.0" }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@csstools/postcss-alpha-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.1.tgz", - "integrity": "sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" - }, + "license": "MIT", "engines": { "node": ">=18" }, - "peerDependencies": { - "postcss": "^8.4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz", - "integrity": "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==", + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "*" } }, - "node_modules/@csstools/postcss-color-function": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.12.tgz", - "integrity": "sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA==", + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" - }, + "license": "MIT" + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@csstools/postcss-color-function-display-p3-linear": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.1.tgz", - "integrity": "sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg==", + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "Apache-2.0", "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.12.tgz", - "integrity": "sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag==", + "node_modules/@floating-ui/core": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz", + "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "MIT", "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "@floating-ui/utils": "^0.2.12" } }, - "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.2.tgz", - "integrity": "sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ==", + "node_modules/@floating-ui/dom": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.1.tgz", + "integrity": "sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "MIT", "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "@floating-ui/core": "^1.1.0" } }, - "node_modules/@csstools/postcss-content-alt-text": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.8.tgz", - "integrity": "sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q==", + "node_modules/@floating-ui/utils": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz", + "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "MIT" + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" + "@humanfs/types": "^0.15.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": ">=18.18.0" } }, - "node_modules/@csstools/postcss-contrast-color-function": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-contrast-color-function/-/postcss-contrast-color-function-2.0.12.tgz", - "integrity": "sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA==", + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "Apache-2.0", "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": ">=18.18.0" } }, - "node_modules/@csstools/postcss-exponential-functions": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", - "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, + "license": "Apache-2.0", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": ">=18.18.0" } }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", - "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=12.22" }, - "peerDependencies": { - "postcss": "^8.4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@csstools/postcss-gamut-mapping": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz", - "integrity": "sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw==", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=18.18" }, - "peerDependencies": { - "postcss": "^8.4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.12.tgz", - "integrity": "sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow==", + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.93", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.93.tgz", + "integrity": "sha512-/XhANjfGYOuqvSR3TmUnkQkINvQ4GVjVuukvymRbxtVFBvIq/yiXJqCDycKcQPT401OYT9H2vIY6ihAlz1QIAw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "CC0-1.0", "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "@iconify/types": "*" } }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.12.tgz", - "integrity": "sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA==", + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "MIT" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.4.tgz", - "integrity": "sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "MIT", "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@csstools/postcss-initial": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", - "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "MIT", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": ">=6.0.0" } }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", - "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.11.tgz", - "integrity": "sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "MIT", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": ">= 8" } }, - "node_modules/@csstools/postcss-logical-float-and-clear": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", - "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "MIT", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": ">= 8" } }, - "node_modules/@csstools/postcss-logical-overflow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", - "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, - "peerDependencies": { - "postcss": "^8.4" + "engines": { + "node": ">= 8" } }, - "node_modules/@csstools/postcss-logical-overscroll-behavior": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", - "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", + "node_modules/@oxc-project/types": { + "version": "0.143.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.143.0.tgz", + "integrity": "sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@oxfmt/binding-android-arm-eabi": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.62.0.tgz", + "integrity": "sha512-pdsv0C4gPjJ8H1+sd8u0BDx+yLACTL+rgeMIOL1ln4ihSnhw8CWXtYWgvcSkyTfgGBIzFKab+d8rx9Xl4en/Kw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" ], - "license": "MIT-0", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-logical-resize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", - "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", + "node_modules/@oxfmt/binding-android-arm64": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.62.0.tgz", + "integrity": "sha512-WC3YQ7uS/KtDrjmqwBviwFKe9qeoi+eXx8aX1z/ffG23Md75myjrJaQqTuJvdOLPoa4EYTjDWH0dHXfwulCVog==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "android" ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", - "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "node_modules/@oxfmt/binding-darwin-arm64": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.62.0.tgz", + "integrity": "sha512-GM8Yf3LjjaR1I8PD0SfeoIlwhsh9GvSF+cQ8sf624Yxnjsyumn95aFzYfKJVefblfDIiOAnZ7QVm2sa21Er/0Q==", + "cpu": [ + "arm64" ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-minmax": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", - "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", - "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", + "node_modules/@oxfmt/binding-darwin-x64": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.62.0.tgz", + "integrity": "sha512-d5THp7F8bCxLqNogEXDORRsQD6dosf3EyFtnXfBer6v+8tGdcWIjoDX9WaXrrF/26zOmL8qHpPTKCEvpBDmZkQ==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "darwin" ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", - "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", + "node_modules/@oxfmt/binding-freebsd-x64": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.62.0.tgz", + "integrity": "sha512-1DnrtXGZooOZ0fHgAXZUaDQzBVh1CM2MNW4oBXyQ2aWKvCHjyljvT9fgBkOM0fEOb96X5eqtcfJ0YUVt9jj66g==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "freebsd" ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", - "integrity": "sha512-TQUGBuRvxdc7TgNSTevYqrL8oItxiwPDixk20qCB5me/W8uF7BPbhRrAvFuhEoywQp/woRsUZ6SJ+sU5idZAIA==", + "node_modules/@oxfmt/binding-linux-arm-gnueabihf": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.62.0.tgz", + "integrity": "sha512-4pQDHOYRH+Huqe0StIaWyvk2CVl/aTaqSrbZpA3/pLS2xH24ME7lBgYprhQF2fRkHBzhGGGKliwxFsDdHwx59g==", + "cpu": [ + "arm" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.12.tgz", - "integrity": "sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg==", + "node_modules/@oxfmt/binding-linux-arm-musleabihf": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.62.0.tgz", + "integrity": "sha512-X0jAaZJFMCVKhB6YyWVTQ/wN2DLsBcZKSMqTS76bF6riT+XZdtg2FPEdjDvdVbunO9cG+tWiVaEs4Zs38lxYog==", + "cpu": [ + "arm" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-position-area-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-position-area-property/-/postcss-position-area-property-1.0.0.tgz", - "integrity": "sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q==", + "node_modules/@oxfmt/binding-linux-arm64-gnu": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.62.0.tgz", + "integrity": "sha512-682Z8T5s8T5ATArYtsejKvbIfd8LEAXyyDkKkoZVq8HND7Vx8TYLlrDjDSeYfodMeVwHOgkj13lJYR8cj6vUSg==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "license": "MIT-0", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz", - "integrity": "sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==", + "node_modules/@oxfmt/binding-linux-arm64-musl": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.62.0.tgz", + "integrity": "sha512-lk25fAl7KWaLWVJcW0CHEXB7QlQZtx5eDkjpaGMK0hzXTjUe0Wmlu8IKuFHoviSOcEJedRTs4VE/506VqGxGew==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-property-rule-prelude-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-property-rule-prelude-list/-/postcss-property-rule-prelude-list-1.0.0.tgz", - "integrity": "sha512-IxuQjUXq19fobgmSSvUDO7fVwijDJaZMvWQugxfEUxmjBeDCVaDuMpsZ31MsTm5xbnhA+ElDi0+rQ7sQQGisFA==", + "node_modules/@oxfmt/binding-linux-ppc64-gnu": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.62.0.tgz", + "integrity": "sha512-SFyNqHQLwySceWNLhiSldx7wPXRAzP0L0WcW9GegP3uWrpZGJiZlQO85NbHAFPEfxR9PhZ9qSnZryEh7+v+4Gw==", + "cpu": [ + "ppc64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-random-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", - "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", + "node_modules/@oxfmt/binding-linux-riscv64-gnu": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.62.0.tgz", + "integrity": "sha512-KYj55C1ywJfHo6+aKDuEmUtVEdJALsC5GwayDGsI6FGz2GxFqNr/mA8nxVsNbJzm7sE5MRqTQ9ziImSzhYXysA==", + "cpu": [ + "riscv64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.12.tgz", - "integrity": "sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw==", + "node_modules/@oxfmt/binding-linux-riscv64-musl": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.62.0.tgz", + "integrity": "sha512-BhZDNo5GOU5nC378RhD0/XpvaEBHsH3HLgJp8YZX3A0InC7oivzA63HsRmiXFLtLSHAstEVrDf6fbC7Rs8Jh/A==", + "cpu": [ + "riscv64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "libc": [ + "musl" ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", - "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-sign-functions": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", - "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "node_modules/@oxfmt/binding-linux-s390x-gnu": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.62.0.tgz", + "integrity": "sha512-UyAFmyHkgSgUJ/wOM4p3U8AC2yAFvRH5PNBs7TnK0fObTT/XSWcdr/lAzPSWaekHaZFaMeFZyk9n93Joq3J93A==", + "cpu": [ + "s390x" ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", - "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "libc": [ + "glibc" ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-syntax-descriptor-syntax-production": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-syntax-descriptor-syntax-production/-/postcss-syntax-descriptor-syntax-production-1.0.1.tgz", - "integrity": "sha512-GneqQWefjM//f4hJ/Kbox0C6f2T7+pi4/fqTqOFGTL3EjnvOReTqO1qUQ30CaUjkwjYq9qZ41hzarrAxCc4gow==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-tokenizer": "^3.0.4" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-system-ui-font-family": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-system-ui-font-family/-/postcss-system-ui-font-family-1.0.0.tgz", - "integrity": "sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "node_modules/@oxfmt/binding-linux-x64-gnu": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.62.0.tgz", + "integrity": "sha512-1iYMP0leytWazFubD/WnINJuIrzRPuoL1aWEJdlGezEzDbTxcd29R4r8IUzP2oWeKst5V02uMJgR2NILlPlG6w==", + "cpu": [ + "x64" ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz", - "integrity": "sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "license": "MIT-0", - "dependencies": { - "@csstools/color-helpers": "^5.1.0", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", - "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", + "node_modules/@oxfmt/binding-linux-x64-musl": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.62.0.tgz", + "integrity": "sha512-4rA/URtJSTVNVAQz6Q8wf7SaRvOXVy+TizriT9hs/Y1XhLR/R+92uWKRQG8yFWRAIEBbFHJ6WevQcl/G9SXEfw==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/postcss-unset-value": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", - "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", + "node_modules/@oxfmt/binding-openharmony-arm64": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.62.0.tgz", + "integrity": "sha512-mSZuFHU2ar1KLUjXpI2QBQcJ1VsOB3mOCgQXuXCpKs19dgh4u+OaovNfrWDfiJb+ihJ2+f7YFcaO9bS2dlTCXA==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "openharmony" ], - "license": "MIT-0", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/selector-resolve-nested": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", - "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", + "node_modules/@oxfmt/binding-win32-arm64-msvc": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.62.0.tgz", + "integrity": "sha512-OfwuhkcjDlqC4EgDojtiV9mzpLqeB9KqTOWPOjLEYBVdDCVSxqW3qzp/xcIxsbtI0UgGCnKvAqYKyY25kf5JZw==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" ], - "license": "MIT-0", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "node_modules/@oxfmt/binding-win32-ia32-msvc": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.62.0.tgz", + "integrity": "sha512-P9uDDNFRzghO3X8QAzhkjKhK7JvtABsVn8UYtFX7uor12IAnwNt8nNIctvfWj1JkQU/kE+fmLRPiw7XlrIHsZw==", + "cpu": [ + "ia32" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" ], - "license": "MIT-0", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@csstools/utilities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", - "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", + "node_modules/@oxfmt/binding-win32-x64-msvc": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.62.0.tgz", + "integrity": "sha512-dlI5SY7XYQCiCBafntWagCR6HcAJB/NpsLtdlPx8x08+Osz8Ok1HHz1GZuusegCe/VoJ6pAnF5a4pd5OZAq7qQ==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" ], - "license": "MIT-0", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.7.0.tgz", - "integrity": "sha512-Sk5xkdRFeE7PeWjG9l4AfTwdvMfr9wHiwNNCpHXT4v4SNyNMKdHGvEILc31BgaVFGDDNbv5u/a73tofRiwbEZw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@docsearch/js": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-4.7.0.tgz", - "integrity": "sha512-x5lCqu1tetgsJFkjQ6VSocbHldsRkGEgwg5N98Vx21sq/V5wcmj4u226PY9k+TEpIgQ772zlYbPLTPicWyGnpA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@docsearch/sidepanel-js": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@docsearch/sidepanel-js/-/sidepanel-js-4.7.0.tgz", - "integrity": "sha512-A8r34jCU8kcIk2viECEn2msA28ojUF1BLi/3v5OWWc5G2N3jOuuumBXoeYjfr8dA0UxgFSy5R2bt12dnFJQSyA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@dual-bundle/import-meta-resolve": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz", - "integrity": "sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==", + "node_modules/@oxlint-tsgolint/darwin-arm64": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-arm64/-/darwin-arm64-7.0.2001.tgz", + "integrity": "sha512-CUJEdbSZ54+Xy9OXqOhWLTKZKV0BBiV7C2i/ygyVmXtkUNXx5YCzN8DpSSshTAKktoL7S+tnQ/ftFG/i7X896w==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/JounQin" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.52.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.52.0.tgz", - "integrity": "sha512-BXuN7BII+8AyNtn57euU2Yxo9yA/KUDNzrpXyi3pfqKmBhhysR6ZWOebFh3vyPoqA3/j1SOvGgucElMGwlXing==", + "node_modules/@oxlint-tsgolint/darwin-x64": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-x64/-/darwin-x64-7.0.2001.tgz", + "integrity": "sha512-pXfBb5BqONCcgrXQNUZWXgiYmRSWJzd97S8i41VVOh6ut0tyo+cJ5FKFpczDHxiVNfj/3e7c9B4MtztNdpIVCw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.8", - "@typescript-eslint/types": "^8.34.1", - "comment-parser": "1.4.1", - "esquery": "^1.6.0", - "jsdoc-type-pratt-parser": "~4.1.0" - }, - "engines": { - "node": ">=20.11.0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz", - "integrity": "sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==", + "node_modules/@oxlint-tsgolint/linux-arm64": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-arm64/-/linux-arm64-7.0.2001.tgz", + "integrity": "sha512-roP7zujb/QDPzDwEKsFFpzNHHy91/Y7oX9vQXk78ekyZtcQj1QXDIMH33gjDdHBfRl4K9pZ36xhRgrP4Zr+R8A==", "cpu": [ - "ppc64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } + "linux" + ] }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz", - "integrity": "sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==", + "node_modules/@oxlint-tsgolint/linux-x64": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-x64/-/linux-x64-7.0.2001.tgz", + "integrity": "sha512-UDezNqdECVmngu2TPnjaS1YoAmcTaBoI5lV9vk3VahBxoi+I5r9k3iJTT7qZoYWOXTD/7T7bNcwRgrocR6BscQ==", "cpu": [ - "arm" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "android" - ], - "engines": { - "node": ">=18" - } + "linux" + ] }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz", - "integrity": "sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==", + "node_modules/@oxlint-tsgolint/win32-arm64": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-arm64/-/win32-arm64-7.0.2001.tgz", + "integrity": "sha512-uJZhqB6pdXLuN+AD1F5082byyQti/NPmJA77GtcFlmT2HzRelqbNls3SaIqxpjdFgvSBF9g0yOKGBkGFg7kX8Q==", "cpu": [ "arm64" ], @@ -1660,33 +1008,44 @@ "license": "MIT", "optional": true, "os": [ - "android" - ], - "engines": { - "node": ">=18" - } + "win32" + ] }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz", - "integrity": "sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==", + "node_modules/@oxlint-tsgolint/win32-x64": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-x64/-/win32-x64-7.0.2001.tgz", + "integrity": "sha512-FkDRm8hx9OwzGQqyWG1tO5QrTLRApff9DzSgpz9QZau37BR8d1VYKOxMLGf6shPZntJFoTwIIJYT68VndYDCog==", "cpu": [ "x64" ], "dev": true, "license": "MIT", "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint/binding-android-arm-eabi": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.77.0.tgz", + "integrity": "sha512-E06sKWS6PiI6HRxS1wyQg22HvApt01hI7fV+T3wUk3OSbaaP4a3hYGY/MIQDmASqCiRjBdpRQYkgMkqH82cWmQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, "os": [ "android" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz", - "integrity": "sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==", + "node_modules/@oxlint/binding-android-arm64": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.77.0.tgz", + "integrity": "sha512-NvsKz0KZxTp9cYWPLf+FXaSZwB3oO3peAjtukpOMBgse2vhQSoIIVqeO1yR0lEo/UcdZIDL18uq+kL0LzQ0ytA==", "cpu": [ "arm64" ], @@ -1694,18 +1053,18 @@ "license": "MIT", "optional": true, "os": [ - "darwin" + "android" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz", - "integrity": "sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==", + "node_modules/@oxlint/binding-darwin-arm64": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.77.0.tgz", + "integrity": "sha512-bgjTn6nW4bQCFBvSvuHCpDD+sONvmpo4lGI4PxzMt1quBA+xYxhczk6RiCn3GZ9gY8uhaBbwhj9MdKGfu6T9DA==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", @@ -1714,30 +1073,30 @@ "darwin" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz", - "integrity": "sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==", + "node_modules/@oxlint/binding-darwin-x64": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.77.0.tgz", + "integrity": "sha512-aotaIttH1R6j1Rwhx0M0htgeZyGtVQqYNTVEYMN/UcgHPquGA6kmk9OyuDc3a2GKUQBC+3C3GVQCcrRPMYqAFA==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" + "darwin" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz", - "integrity": "sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==", + "node_modules/@oxlint/binding-freebsd-x64": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.77.0.tgz", + "integrity": "sha512-nNx/wta7ksRAdYvq+l4AWjXkLxEXHALhENxjj2cYbQAIR4ybaA5L+hCbE63HOmft5czQ6ks+hb8vmEAnn7YGPg==", "cpu": [ "x64" ], @@ -1748,13 +1107,13 @@ "freebsd" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz", - "integrity": "sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==", + "node_modules/@oxlint/binding-linux-arm-gnueabihf": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.77.0.tgz", + "integrity": "sha512-tMLLjM7xXtzXisVCzkOTXNCy9bZVId2wteNwjohlFDR/jY6WagpEDA1c1wu4xRc20Hojaxj+V6DSR7gbKxijWA==", "cpu": [ "arm" ], @@ -1765,15 +1124,15 @@ "linux" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz", - "integrity": "sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==", + "node_modules/@oxlint/binding-linux-arm-musleabihf": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.77.0.tgz", + "integrity": "sha512-MiAFDFaqR0tmHTAyo0YDcZ5hyLREdYw/RQhc2R3cbT+8O3tB+zqPM2th9TTQ+Uo3jn/embS+DO+HyX9ztCPkOQ==", "cpu": [ - "arm64" + "arm" ], "dev": true, "license": "MIT", @@ -1782,166 +1141,190 @@ "linux" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz", - "integrity": "sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==", + "node_modules/@oxlint/binding-linux-arm64-gnu": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.77.0.tgz", + "integrity": "sha512-/xqQ3B16i1T4cyt/9Mn+4CpzhUXoBXp7kVpIwzOXNFLj5JmK1bIjsbSnX296Gg8A/o7oDtKWikFgBx0SLwztkw==", "cpu": [ - "ia32" + "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz", - "integrity": "sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==", + "node_modules/@oxlint/binding-linux-arm64-musl": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.77.0.tgz", + "integrity": "sha512-LSbwuRKiNCenPDcbARqAZ5RfBy7gmj7vOvfJRLeCDU3gFtSxWbhv/+VTlaUqzUhNj1gFLHB8h7ALnxa/Az6z6g==", "cpu": [ - "loong64" + "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz", - "integrity": "sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==", + "node_modules/@oxlint/binding-linux-ppc64-gnu": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.77.0.tgz", + "integrity": "sha512-QWdcH31mXEUe5Nq1s0CfCpceaKjIo9uZtwDjAuL681g1axf+5x8xrg/eXWaw//4NCxYZ4V4e5Hu5tvdR+pTBlg==", "cpu": [ - "mips64el" + "ppc64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz", - "integrity": "sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==", + "node_modules/@oxlint/binding-linux-riscv64-gnu": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.77.0.tgz", + "integrity": "sha512-GnOfYgJxbcElOiPZaDFDl406ONddwvOWk2jvAAAEjwAl4GofNoHF+/HHUIBYa6bFCArlcGPi0XjC4cU1pkgF/Q==", "cpu": [ - "ppc64" + "riscv64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz", - "integrity": "sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==", + "node_modules/@oxlint/binding-linux-riscv64-musl": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.77.0.tgz", + "integrity": "sha512-AyEMTUCf0xY+hHF+IxqXFQIX0yQOIR8ykpY0lJNOw9xYqOzUX8dyZfRvlG0RfXwuQn2eonf/8NrMmDSZJjdqsA==", "cpu": [ "riscv64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz", - "integrity": "sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==", + "node_modules/@oxlint/binding-linux-s390x-gnu": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.77.0.tgz", + "integrity": "sha512-sPLzEcNvxd/oyVQ5oZo92CiHkFkpBeRop13E/P3TPY+hZfXHKCOWKI70TE2RYwMKFJDc20EMjH16L7NZICtKTw==", "cpu": [ "s390x" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz", - "integrity": "sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==", + "node_modules/@oxlint/binding-linux-x64-gnu": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.77.0.tgz", + "integrity": "sha512-1Oh2ssH2L7lwyvkdSqaMUfsGfwU2Wfvew+obBUYjRVqhpBcUpwnsPSEr1IzVi9XqkuY10geiLsNKecqaZC34Dw==", "cpu": [ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz", - "integrity": "sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==", + "node_modules/@oxlint/binding-linux-x64-musl": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.77.0.tgz", + "integrity": "sha512-0j/2wRgNGO+Qj/M1uu/p57h/hFTTWWcfie0ufkbabeus2s5+/QqkCflnMOwLLN5m2GsNeWp4xdl4cPa4n7QCOQ==", "cpu": [ - "arm64" + "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ - "netbsd" + "linux" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz", - "integrity": "sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==", + "node_modules/@oxlint/binding-openharmony-arm64": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.77.0.tgz", + "integrity": "sha512-BJ/j54qS0usEnyDkLYURMj2iiD9h5Cyy+ppzeMSXBGRXaGRNWnj1Mw14NqWMR5E/PzdgB30OOCCzLzbRoduafw==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "netbsd" + "openharmony" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz", - "integrity": "sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==", + "node_modules/@oxlint/binding-win32-arm64-msvc": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.77.0.tgz", + "integrity": "sha512-Yh8w+g2Lpx7StrvtYkoz9JJvXjB9wxgFChFNb85nrXm/wj/XTwGWS1hve9+900HL7llrntYB3YP+y32E3tRqzA==", "cpu": [ "arm64" ], @@ -1949,67 +1332,99 @@ "license": "MIT", "optional": true, "os": [ - "openbsd" + "win32" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz", - "integrity": "sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==", + "node_modules/@oxlint/binding-win32-ia32-msvc": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.77.0.tgz", + "integrity": "sha512-zja5b7+6a7UsRFgAQSrnax5vrzliEyNPLCjfXONu/vTWswaIVZGFajJZptaeRvPE4LghtFdAzVFlexTm7MVTGA==", "cpu": [ - "x64" + "ia32" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "openbsd" + "win32" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz", - "integrity": "sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==", + "node_modules/@oxlint/binding-win32-x64-msvc": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.77.0.tgz", + "integrity": "sha512-+teyvPDZ2RjUvo+SuCqS/UhaJl1QtdW5fWT5NJTV61V5MIuIS90Db9LixmtEGvXixyttiK62P96MSu3UlpviBw==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "openharmony" + "win32" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/plugins": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@oxlint/plugins/-/plugins-1.77.0.tgz", + "integrity": "sha512-6KtPXskPgpt+0Kyl2nNSxNnYXt7lbkxW1C7vi2L7xwtq/AisZlsmV+hnzOTEyM5tU1TxPv1GpTqpUBbZfPzBLg==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@quansync/fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@quansync/fs/-/fs-1.0.0.tgz", + "integrity": "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "quansync": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz", - "integrity": "sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==", + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.3.tgz", + "integrity": "sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "sunos" + "android" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz", - "integrity": "sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.3.tgz", + "integrity": "sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA==", "cpu": [ "arm64" ], @@ -2017,33 +1432,33 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz", - "integrity": "sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==", + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.3.tgz", + "integrity": "sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA==", "cpu": [ - "ia32" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz", - "integrity": "sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.3.tgz", + "integrity": "sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg==", "cpu": [ "x64" ], @@ -2051,1334 +1466,1238 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "freebsd" ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", - "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.3.tgz", + "integrity": "sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.3.tgz", + "integrity": "sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.3.tgz", + "integrity": "sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q==", + "cpu": [ + "arm64" + ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/config-array": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", - "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.3.tgz", + "integrity": "sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.5" - }, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/config-array/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.3.tgz", + "integrity": "sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg==", + "cpu": [ + "s390x" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/config-array/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.3.tgz", + "integrity": "sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w==", + "cpu": [ + "x64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/config-array/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/config-helpers": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.3.tgz", + "integrity": "sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/core": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.3.tgz", + "integrity": "sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz", - "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==", + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.3.tgz", + "integrity": "sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "ajv": "^6.14.0", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.3.0", - "minimatch": "^3.1.5", - "strip-json-comments": "^3.1.1" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.3.tgz", + "integrity": "sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/eslintrc/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "dev": true, "license": "MIT" }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "node_modules/@rollup/plugin-swc": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-swc/-/plugin-swc-0.4.1.tgz", + "integrity": "sha512-widfnT1TbDc4hsV37PQ61ZoLGPJ7STZE4lQzA3gWKbcMfzjOgiGsoTYfSsq21H4J2UY1y3MKwejXTMkwN2tEtQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@rollup/pluginutils": "^5.0.1", + "smob": "^1.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@swc/core": "^1.3.0", + "rollup": "^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=6.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { - "supports-color": { + "rollup": { "optional": true } } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "node_modules/@shikijs/core": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.0.2.tgz", + "integrity": "sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "@shikijs/primitive": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=20" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/@shikijs/engine-javascript": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.0.2.tgz", + "integrity": "sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.4" }, "engines": { - "node": "*" + "node": ">=20" } }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/js": { - "version": "9.39.5", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz", - "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==", + "node_modules/@shikijs/engine-oniguruma": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.0.2.tgz", + "integrity": "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==", "dev": true, "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "dependencies": { + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2" }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", - "dev": true, - "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=20" } }, - "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "node_modules/@shikijs/langs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.0.2.tgz", + "integrity": "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@eslint/core": "^0.15.2", - "levn": "^0.4.1" + "@shikijs/types": "4.0.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=20" } }, - "node_modules/@floating-ui/core": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz", - "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.12" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.1.tgz", - "integrity": "sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==", + "node_modules/@shikijs/primitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.0.2.tgz", + "integrity": "sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==", "dev": true, "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.1.0" + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" } }, - "node_modules/@floating-ui/utils": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz", - "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==", - "dev": true, - "license": "MIT" - }, - "node_modules/@happy-dom/global-registrator": { - "version": "20.8.8", - "resolved": "https://registry.npmjs.org/@happy-dom/global-registrator/-/global-registrator-20.8.8.tgz", - "integrity": "sha512-2NE+gfUX092su6oZYw6yOfgPYAfx9NBLFdMLNdZZtkupCP9oZfz6qFRYf1o8la2Le7Tyb94O5TONzcozENx2xg==", + "node_modules/@shikijs/themes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.0.2.tgz", + "integrity": "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": ">=20.0.0", - "happy-dom": "^20.8.8" + "@shikijs/types": "4.0.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=20" } }, - "node_modules/@humanfs/core": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", - "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "node_modules/@shikijs/transformers": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-4.4.2.tgz", + "integrity": "sha512-d81PJ9KkR1tVP95FH/9296HTtDo0mh76wv10u9T1YmsZq/UcXgt0OLdBszfUQ1i+umkRMCjDnFbFZU7/tCODTQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@humanfs/types": "^0.15.0" + "@shikijs/core": "4.4.2", + "@shikijs/types": "4.4.2" }, "engines": { - "node": ">=18.18.0" + "node": ">=20" } }, - "node_modules/@humanfs/node": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", - "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "node_modules/@shikijs/transformers/node_modules/@shikijs/core": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.2.tgz", + "integrity": "sha512-StyzbAyxg2/tBGf78gwbBkGyeQ73lf8UiJArFaQhTQIDqQOCKPCQFanvrs4/Yv3Yfyc+ONInJM6K+FMIf+P+kA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@humanfs/core": "^0.19.2", - "@humanfs/types": "^0.15.0", - "@humanwhocodes/retry": "^0.4.0" + "@shikijs/primitive": "4.4.2", + "@shikijs/types": "4.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5", + "hast-util-to-html": "^9.0.5" }, "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/types": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", - "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" + "node": ">=20" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@shikijs/transformers/node_modules/@shikijs/primitive": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.2.tgz", + "integrity": "sha512-l6fQQKsOMlz72n38fztmSgZ76MO6KSWuw8o+GJ+FhmqrpC9pIOJNQNXGgbb5yX2AwpzlEHwsaLPnk/8o4Fm+rA==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=20" } }, - "node_modules/@iconify-json/simple-icons": { - "version": "1.2.93", - "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.93.tgz", - "integrity": "sha512-/XhANjfGYOuqvSR3TmUnkQkINvQ4GVjVuukvymRbxtVFBvIq/yiXJqCDycKcQPT401OYT9H2vIY6ihAlz1QIAw==", + "node_modules/@shikijs/transformers/node_modules/@shikijs/types": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.2.tgz", + "integrity": "sha512-PFYitV4vpDr/iPCIhnHp+Q4ftic5N5VeNJ3KQ1O8gn3h2ar8qgwMAXF7tq4m1CWaMS60fV4VqF6vfnWH4F7vqQ==", "dev": true, - "license": "CC0-1.0", + "license": "MIT", "dependencies": { - "@iconify/types": "*" - } - }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", - "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", - "dev": true, - "license": "BlueOak-1.0.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" + }, "engines": { - "node": ">=18" + "node": ">=20" } }, - "node_modules/@jest/diff-sequences": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.4.0.tgz", - "integrity": "sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g==", + "node_modules/@shikijs/twoslash": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-4.0.2.tgz", + "integrity": "sha512-yHRudhirlMxOwDO6Q4OFU9hJMvUqNkY8hwtUfbaSEoG7A2cYicdO4c8fdDaDtyJ50HK7I8vTokrkIHTK3DCkLQ==", "dev": true, "license": "MIT", + "dependencies": { + "@shikijs/core": "4.0.2", + "@shikijs/types": "4.0.2", + "twoslash": "^0.3.6" + }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20" + }, + "peerDependencies": { + "typescript": ">=5.5.0" } }, - "node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "node_modules/@shikijs/twoslash/node_modules/twoslash": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.3.9.tgz", + "integrity": "sha512-rDclk+OtzuTX+tnea7DYLCkqGQ3eP0IyfD+kzUJ7t46X/NzlaxwrhecmEBNuSCuEn3V+n1PhcjUUQQ7gUJzX5Q==", "dev": true, "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "dependencies": { + "@typescript/vfs": "^1.6.4", + "twoslash-protocol": "0.3.9" + }, + "peerDependencies": { + "typescript": "^5.5.0 || ^6.0.0" } }, - "node_modules/@jest/pattern": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", - "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", + "node_modules/@shikijs/types": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.0.2.tgz", + "integrity": "sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.4.0" + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20" } }, - "node_modules/@jest/schemas": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", - "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", + "node_modules/@shikijs/vitepress-twoslash": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-4.0.2.tgz", + "integrity": "sha512-Bk01fAYDDiTffRPLHNJdNlYwzExXIVcrHUVNciD931SMlKZArvteKib6mM3mWAUhcy78RW1llT3fczjKIgQHBA==", "dev": true, "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.34.0" + "@shikijs/twoslash": "4.0.2", + "floating-vue": "^5.2.2", + "lz-string": "^1.5.0", + "magic-string": "^0.30.21", + "markdown-it": "^14.1.1", + "mdast-util-from-markdown": "^2.0.3", + "mdast-util-gfm": "^3.1.0", + "mdast-util-to-hast": "^13.2.1", + "ohash": "^2.0.11", + "shiki": "4.0.2", + "twoslash": "^0.3.6", + "twoslash-vue": "^0.3.6", + "vue": "^3.5.29" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=20" } }, - "node_modules/@jest/types": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", - "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", + "node_modules/@shikijs/vitepress-twoslash/node_modules/twoslash": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.3.9.tgz", + "integrity": "sha512-rDclk+OtzuTX+tnea7DYLCkqGQ3eP0IyfD+kzUJ7t46X/NzlaxwrhecmEBNuSCuEn3V+n1PhcjUUQQ7gUJzX5Q==", "dev": true, "license": "MIT", "dependencies": { - "@jest/pattern": "30.4.0", - "@jest/schemas": "30.4.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" + "@typescript/vfs": "^1.6.4", + "twoslash-protocol": "0.3.9" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "peerDependencies": { + "typescript": "^5.5.0 || ^6.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@shikijs/vitepress-twoslash/node_modules/twoslash-vue": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/twoslash-vue/-/twoslash-vue-0.3.9.tgz", + "integrity": "sha512-2zO1u4iPhZz9k7ysuDaJL1FUn4SHzm78ZF6/0Q4yFR2VP3NW0JwRpw/4cWqEM6ye3pDf8Zr9lVPBvsX4uK315A==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@vue/language-core": "^3.2.6", + "twoslash": "0.3.9", + "twoslash-protocol": "0.3.9" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "typescript": "^5.5.0 || ^6.0.0" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@shikijs/vitepress-twoslash/node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=14.17" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } + "license": "MIT" }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } + "license": "MIT" }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } + "node_modules/@studiometa/eslint-plugin-js-toolkit": { + "resolved": "packages/eslint-plugin", + "link": true }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" + "node_modules/@studiometa/js-toolkit": { + "resolved": "packages/js-toolkit", + "link": true }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "node_modules/@studiometa/tailwind-config": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@studiometa/tailwind-config/-/tailwind-config-3.0.0.tgz", + "integrity": "sha512-SauwUlgEcptxMMyy1TGL7Xod22654RncBT6whdefvUbgYw/46tnnXLDKVJ9vDb1QylWVkSxBUAUHzTov2AM9KQ==", "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", - "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node": ">=20.0.0" }, "peerDependencies": { - "tslib": "2" + "postcss": "^8.5.6", + "tailwindcss": "^4.1.16" } }, - "node_modules/@jsonjoy.com/buffers": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", - "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "node_modules/@swc/core": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.47.tgz", + "integrity": "sha512-FbsO5JcfOjfH38W/rohBRBweJeERsAuIP4f377lmkmxTcq9exjtx4SkRuZY5CdfhR2CBVwDIJegBpJDffwNsOg==", "dev": true, + "hasInstallScript": true, "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.27" }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/codegen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", - "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", - "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=10.0" + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.15.47", + "@swc/core-darwin-x64": "1.15.47", + "@swc/core-linux-arm-gnueabihf": "1.15.47", + "@swc/core-linux-arm64-gnu": "1.15.47", + "@swc/core-linux-arm64-musl": "1.15.47", + "@swc/core-linux-ppc64-gnu": "1.15.47", + "@swc/core-linux-s390x-gnu": "1.15.47", + "@swc/core-linux-x64-gnu": "1.15.47", + "@swc/core-linux-x64-musl": "1.15.47", + "@swc/core-win32-arm64-msvc": "1.15.47", + "@swc/core-win32-ia32-msvc": "1.15.47", + "@swc/core-win32-x64-msvc": "1.15.47" }, "peerDependencies": { - "tslib": "2" + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } } }, - "node_modules/@jsonjoy.com/fs-core": { - "version": "4.68.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.68.0.tgz", - "integrity": "sha512-OAioDU3UGV34ECVTB4pt641OfUzuyDuyUmgrlVM+Fp9g4YyavZrB4xxWuupYrU66+81+um9D0DAzYhjXto5ysQ==", + "node_modules/@swc/core-darwin-arm64": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.47.tgz", + "integrity": "sha512-GsoMtan3ojGGMGFbl31mmRu5ctZ56re8grGE8mO/OHJ8O+JRkzod02fe7X6ZQ8JvamA3imkEkx/h3u+vsOgPgA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.68.0", - "@jsonjoy.com/fs-node-utils": "4.68.0", - "thingies": "^2.5.0" - }, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.68.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.68.0.tgz", - "integrity": "sha512-dC6VeW8uqXMF9Hkqb7qYST/t165XCHG+bNwwMzRetoNZRxJC8anr5XCJSAk5B+YLHGn6SP+noNltU6OFg/oa7A==", + "node_modules/@swc/core-darwin-x64": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.47.tgz", + "integrity": "sha512-leTi7Rx3KF4zcC637iqWgk9SoV8VXAD8ppQYXsep63px5A/UftOcxLN1pmr8Z1si/YvX90ompP/rHgpYkgwXWg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-core": "4.68.0", - "@jsonjoy.com/fs-node-builtins": "4.68.0", - "@jsonjoy.com/fs-node-utils": "4.68.0", - "thingies": "^2.5.0" - }, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-node": { - "version": "4.68.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.68.0.tgz", - "integrity": "sha512-xYDlpSk3UDHjcI0kiz6kNJ/oVTEzlS7kUzAoAsgJh2/+yOtYV/eZW7M8O9Fj+ED3BDONYKt7+8OiPlWl6xpFeA==", + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.47.tgz", + "integrity": "sha512-hBqHuoWKKIsKmDBn9qVeWqj5GWZhtlcczVaqQmNRXsDfq+voR5CxKRfamA367QjJXtceYuliLFfEL8QsskRM2g==", + "cpu": [ + "arm" + ], "dev": true, "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-core": "4.68.0", - "@jsonjoy.com/fs-node-builtins": "4.68.0", - "@jsonjoy.com/fs-node-utils": "4.68.0", - "@jsonjoy.com/fs-print": "4.68.0", - "@jsonjoy.com/fs-snapshot": "4.68.0", - "glob-to-regex.js": "^1.0.0", - "thingies": "^2.5.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.68.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.68.0.tgz", - "integrity": "sha512-j3bb+k4NuqpqXQzinCLeagS7LGLCUvPqA6TnpaBkBqhnPjbzETYiQFpD7pWaV8cGOhhZcAv9dmpzk5mxNb1qsg==", + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.47.tgz", + "integrity": "sha512-TBxvRz+B4K205TWHHZxWVxkC2RFNP/Mz3PNcECBos5PsKwxjg3QSJzdoebr0VCf0Bfh8HOPldKxAP/8XkFe9gA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.68.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.68.0.tgz", - "integrity": "sha512-dtLpmLQxw3IBcGxoK9tVvftwmQLl9qmQyivt8DZpeEwDUcQkxk2CLMZERXtmOlF1mWXfT9CqtjjMiswkb03rKw==", + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.47.tgz", + "integrity": "sha512-3Yu3Uq/VgytqsPjTMbkPU1ExADytbdWbruJYhA584E9jrpE2Ki+R6VVPoZCeAVk1Cb7QxcRTgblw6bSa6a/R+w==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-fsa": "4.68.0", - "@jsonjoy.com/fs-node-builtins": "4.68.0", - "@jsonjoy.com/fs-node-utils": "4.68.0" - }, + "libc": [ + "musl" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.68.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.68.0.tgz", - "integrity": "sha512-Q84pogSfRaz0WNrBBy+HzBmhNu4m6tWoM0po8bLwW4pKvrwrSadOgFpm1sku08sfg0QAtUubkWuZEBDpNI3toQ==", + "node_modules/@swc/core-linux-ppc64-gnu": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.47.tgz", + "integrity": "sha512-wfdMi5IaOaNtmh2/6geRoxIdNfqylUZFdtzTKS655y1axWfIWyx7As74vv0wVdjeCIZ3WmCI9odDd4rUttXOSQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.68.0", - "glob-to-regex.js": "^1.0.1" - }, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-print": { - "version": "4.68.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.68.0.tgz", - "integrity": "sha512-sdy9F6N9QEcyAcU8OxEQmB91mlgiyuMphTFeijQ+qFgigCOeT16lW3X1dCWNzD7wwKLOKXnnYqsFyeq4LWSlYQ==", + "node_modules/@swc/core-linux-s390x-gnu": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.47.tgz", + "integrity": "sha512-3hHYBY0yx8Ez7GMRrkhXHQzMdR5IZA6Wq5Ee4svlgwvSECLpnAJ9+0AimEGUFDvuLwE7nV/2+PYe8+Nm4rvNcQ==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.68.0", - "tree-dump": "^1.1.0" - }, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.68.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.68.0.tgz", - "integrity": "sha512-eV44t9KY9LH47aPR1a4Nv4xYxM1vQ+OKEw9Mx/3zkuxGOILwmtFddlh5HakdMFpFHwuFNPw1s+NGq2eVYFpQRA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.68.0", - "@jsonjoy.com/json-pack": "^17.65.0", - "@jsonjoy.com/util": "^17.65.0" - }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.47.tgz", + "integrity": "sha512-TjfhjgP/jGCfFHYC3JQPhJA1HwErbIJ9JfREDc1KNkvY6P0LodCgKVIlQ5deeTbkG7ih3bF5PHJLuLpaZjdRyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", - "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.47.tgz", + "integrity": "sha512-CQpS8Ge/avfjZd0UEwG/sds83Uu32deQXcV1Jo3jD0mmvQQqtYAjpsDZXugmheeAwmt+YIuoVtVHro8LMYHqsQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", + "libc": [ + "musl" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", - "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.47.tgz", + "integrity": "sha512-0W8IKHsUTYiT7G2RqtOoVWk+89yzZikIiDUb/sCK6BmQDBhN91hQSfyUtW12jhEWLzYgcfmisfsZrmZE+84U1A==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", - "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.47.tgz", + "integrity": "sha512-ZIp49d2Z4/ka2jO9otOg4hDvTdPmp86kVOgS2M5FCPI7eKKZ1W0boxWn+8XeZrfERtFGW0AlMRm4JhlJa7l3NA==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/base64": "17.67.0", - "@jsonjoy.com/buffers": "17.67.0", - "@jsonjoy.com/codegen": "17.67.0", - "@jsonjoy.com/json-pointer": "17.67.0", - "@jsonjoy.com/util": "17.67.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" - }, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", - "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.15.47", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.47.tgz", + "integrity": "sha512-2h8Iek95vnixkBRCo+H8p09+Q5ll2NgSMFrWTy0iKt7+/t+8/T5mBpiT6c0ZxSS7wcWjwZ9sGZkK70tTSYHdDw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/util": "17.67.0" - }, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", - "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.28.tgz", + "integrity": "sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/buffers": "17.67.0", - "@jsonjoy.com/codegen": "17.67.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", + "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.2" } }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", - "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "node_modules/@tailwindcss/node/node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", "dev": true, - "license": "Apache-2.0", + "license": "MPL-2.0", "dependencies": { - "@jsonjoy.com/base64": "^1.1.2", - "@jsonjoy.com/buffers": "^1.2.0", - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/json-pointer": "^1.0.2", - "@jsonjoy.com/util": "^1.9.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" + "detect-libc": "^2.0.3" }, "engines": { - "node": ">=10.0" + "node": ">= 12.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "type": "opencollective", + "url": "https://opencollective.com/parcel" }, - "peerDependencies": { - "tslib": "2" + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" } }, - "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", - "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "node_modules/@tailwindcss/node/node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=10.0" + "node": ">= 12.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@jsonjoy.com/json-pointer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", - "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "node_modules/@tailwindcss/node/node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/util": "^1.9.0" - }, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10.0" + "node": ">= 12.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@jsonjoy.com/util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", - "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "node_modules/@tailwindcss/node/node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0" - }, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10.0" + "node": ">= 12.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", - "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "node_modules/@tailwindcss/node/node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=10.0" + "node": ">= 12.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@keyv/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@motionone/easing": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.18.0.tgz", - "integrity": "sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg==", - "license": "MIT", - "dependencies": { - "@motionone/utils": "^10.18.0", - "tslib": "^2.3.1" - } - }, - "node_modules/@motionone/types": { - "version": "10.17.1", - "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.17.1.tgz", - "integrity": "sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A==", - "license": "MIT" - }, - "node_modules/@motionone/utils": { - "version": "10.18.0", - "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.18.0.tgz", - "integrity": "sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==", - "license": "MIT", - "dependencies": { - "@motionone/types": "^10.17.1", - "hey-listen": "^1.0.8", - "tslib": "^2.3.1" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@oxc-project/types": { - "version": "0.143.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.143.0.tgz", - "integrity": "sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" - } - }, - "node_modules/@oxfmt/binding-android-arm-eabi": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.62.0.tgz", - "integrity": "sha512-pdsv0C4gPjJ8H1+sd8u0BDx+yLACTL+rgeMIOL1ln4ihSnhw8CWXtYWgvcSkyTfgGBIzFKab+d8rx9Xl4en/Kw==", + "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "android" + "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@oxfmt/binding-android-arm64": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.62.0.tgz", - "integrity": "sha512-WC3YQ7uS/KtDrjmqwBviwFKe9qeoi+eXx8aX1z/ffG23Md75myjrJaQqTuJvdOLPoa4EYTjDWH0dHXfwulCVog==", + "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "MPL-2.0", "optional": true, "os": [ - "android" + "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@oxfmt/binding-darwin-arm64": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.62.0.tgz", - "integrity": "sha512-GM8Yf3LjjaR1I8PD0SfeoIlwhsh9GvSF+cQ8sf624Yxnjsyumn95aFzYfKJVefblfDIiOAnZ7QVm2sa21Er/0Q==", + "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "libc": [ + "musl" + ], + "license": "MPL-2.0", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@oxfmt/binding-darwin-x64": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.62.0.tgz", - "integrity": "sha512-d5THp7F8bCxLqNogEXDORRsQD6dosf3EyFtnXfBer6v+8tGdcWIjoDX9WaXrrF/26zOmL8qHpPTKCEvpBDmZkQ==", + "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "MPL-2.0", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@oxfmt/binding-freebsd-x64": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.62.0.tgz", - "integrity": "sha512-1DnrtXGZooOZ0fHgAXZUaDQzBVh1CM2MNW4oBXyQ2aWKvCHjyljvT9fgBkOM0fEOb96X5eqtcfJ0YUVt9jj66g==", + "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "libc": [ + "musl" + ], + "license": "MPL-2.0", "optional": true, "os": [ - "freebsd" + "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@oxfmt/binding-linux-arm-gnueabihf": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.62.0.tgz", - "integrity": "sha512-4pQDHOYRH+Huqe0StIaWyvk2CVl/aTaqSrbZpA3/pLS2xH24ME7lBgYprhQF2fRkHBzhGGGKliwxFsDdHwx59g==", + "node_modules/@tailwindcss/node/node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", "cpu": [ - "arm" + "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" + "win32" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@oxfmt/binding-linux-arm-musleabihf": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.62.0.tgz", - "integrity": "sha512-X0jAaZJFMCVKhB6YyWVTQ/wN2DLsBcZKSMqTS76bF6riT+XZdtg2FPEdjDvdVbunO9cG+tWiVaEs4Zs38lxYog==", + "node_modules/@tailwindcss/node/node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", "cpu": [ - "arm" + "x64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" + "win32" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@oxfmt/binding-linux-arm64-gnu": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.62.0.tgz", - "integrity": "sha512-682Z8T5s8T5ATArYtsejKvbIfd8LEAXyyDkKkoZVq8HND7Vx8TYLlrDjDSeYfodMeVwHOgkj13lJYR8cj6vUSg==", + "node_modules/@tailwindcss/oxide": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", + "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-arm64": "4.2.2", + "@tailwindcss/oxide-darwin-x64": "4.2.2", + "@tailwindcss/oxide-freebsd-x64": "4.2.2", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", + "@tailwindcss/oxide-linux-x64-musl": "4.2.2", + "@tailwindcss/oxide-wasm32-wasi": "4.2.2", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", + "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", "cpu": [ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" + "android" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@oxfmt/binding-linux-arm64-musl": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.62.0.tgz", - "integrity": "sha512-lk25fAl7KWaLWVJcW0CHEXB7QlQZtx5eDkjpaGMK0hzXTjUe0Wmlu8IKuFHoviSOcEJedRTs4VE/506VqGxGew==", + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", + "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", "cpu": [ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ - "linux" + "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@oxfmt/binding-linux-ppc64-gnu": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.62.0.tgz", - "integrity": "sha512-SFyNqHQLwySceWNLhiSldx7wPXRAzP0L0WcW9GegP3uWrpZGJiZlQO85NbHAFPEfxR9PhZ9qSnZryEh7+v+4Gw==", - "cpu": [ - "ppc64" + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", + "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", + "cpu": [ + "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" + "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@oxfmt/binding-linux-riscv64-gnu": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.62.0.tgz", - "integrity": "sha512-KYj55C1ywJfHo6+aKDuEmUtVEdJALsC5GwayDGsI6FGz2GxFqNr/mA8nxVsNbJzm7sE5MRqTQ9ziImSzhYXysA==", + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", + "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", "cpu": [ - "riscv64" + "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ - "linux" + "freebsd" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@oxfmt/binding-linux-riscv64-musl": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.62.0.tgz", - "integrity": "sha512-BhZDNo5GOU5nC378RhD0/XpvaEBHsH3HLgJp8YZX3A0InC7oivzA63HsRmiXFLtLSHAstEVrDf6fbC7Rs8Jh/A==", + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", + "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", "cpu": [ - "riscv64" + "arm" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@oxfmt/binding-linux-s390x-gnu": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.62.0.tgz", - "integrity": "sha512-UyAFmyHkgSgUJ/wOM4p3U8AC2yAFvRH5PNBs7TnK0fObTT/XSWcdr/lAzPSWaekHaZFaMeFZyk9n93Joq3J93A==", + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", + "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", "cpu": [ - "s390x" + "arm64" ], "dev": true, "libc": [ @@ -3390,19 +2709,19 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@oxfmt/binding-linux-x64-gnu": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.62.0.tgz", - "integrity": "sha512-1iYMP0leytWazFubD/WnINJuIrzRPuoL1aWEJdlGezEzDbTxcd29R4r8IUzP2oWeKst5V02uMJgR2NILlPlG6w==", + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", + "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", "cpu": [ - "x64" + "arm64" ], "dev": true, "libc": [ - "glibc" + "musl" ], "license": "MIT", "optional": true, @@ -3410,19 +2729,19 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@oxfmt/binding-linux-x64-musl": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.62.0.tgz", - "integrity": "sha512-4rA/URtJSTVNVAQz6Q8wf7SaRvOXVy+TizriT9hs/Y1XhLR/R+92uWKRQG8yFWRAIEBbFHJ6WevQcl/G9SXEfw==", + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", + "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", "cpu": [ "x64" ], "dev": true, "libc": [ - "musl" + "glibc" ], "license": "MIT", "optional": true, @@ -3430,49 +2749,65 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@oxfmt/binding-openharmony-arm64": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.62.0.tgz", - "integrity": "sha512-mSZuFHU2ar1KLUjXpI2QBQcJ1VsOB3mOCgQXuXCpKs19dgh4u+OaovNfrWDfiJb+ihJ2+f7YFcaO9bS2dlTCXA==", + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", + "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", "cpu": [ - "arm64" + "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", "optional": true, "os": [ - "openharmony" + "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@oxfmt/binding-win32-arm64-msvc": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.62.0.tgz", - "integrity": "sha512-OfwuhkcjDlqC4EgDojtiV9mzpLqeB9KqTOWPOjLEYBVdDCVSxqW3qzp/xcIxsbtI0UgGCnKvAqYKyY25kf5JZw==", + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", + "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], "cpu": [ - "arm64" + "wasm32" ], "dev": true, "license": "MIT", "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=14.0.0" } }, - "node_modules/@oxfmt/binding-win32-ia32-msvc": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.62.0.tgz", - "integrity": "sha512-P9uDDNFRzghO3X8QAzhkjKhK7JvtABsVn8UYtFX7uor12IAnwNt8nNIctvfWj1JkQU/kE+fmLRPiw7XlrIHsZw==", + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", + "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", "cpu": [ - "ia32" + "arm64" ], "dev": true, "license": "MIT", @@ -3481,13 +2816,13 @@ "win32" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@oxfmt/binding-win32-x64-msvc": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.62.0.tgz", - "integrity": "sha512-dlI5SY7XYQCiCBafntWagCR6HcAJB/NpsLtdlPx8x08+Osz8Ok1HHz1GZuusegCe/VoJ6pAnF5a4pd5OZAq7qQ==", + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", + "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", "cpu": [ "x64" ], @@ -3498,15314 +2833,1735 @@ "win32" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@oxlint-tsgolint/darwin-arm64": { - "version": "7.0.2001", - "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-arm64/-/darwin-arm64-7.0.2001.tgz", - "integrity": "sha512-CUJEdbSZ54+Xy9OXqOhWLTKZKV0BBiV7C2i/ygyVmXtkUNXx5YCzN8DpSSshTAKktoL7S+tnQ/ftFG/i7X896w==", - "cpu": [ - "arm64" - ], + "node_modules/@tailwindcss/vite": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.2.tgz", + "integrity": "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "@tailwindcss/node": "4.2.2", + "@tailwindcss/oxide": "4.2.2", + "tailwindcss": "4.2.2" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } }, - "node_modules/@oxlint-tsgolint/darwin-x64": { - "version": "7.0.2001", - "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-x64/-/darwin-x64-7.0.2001.tgz", - "integrity": "sha512-pXfBb5BqONCcgrXQNUZWXgiYmRSWJzd97S8i41VVOh6ut0tyo+cJ5FKFpczDHxiVNfj/3e7c9B4MtztNdpIVCw==", - "cpu": [ - "x64" - ], + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } }, - "node_modules/@oxlint-tsgolint/linux-arm64": { - "version": "7.0.2001", - "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-arm64/-/linux-arm64-7.0.2001.tgz", - "integrity": "sha512-roP7zujb/QDPzDwEKsFFpzNHHy91/Y7oX9vQXk78ekyZtcQj1QXDIMH33gjDdHBfRl4K9pZ36xhRgrP4Zr+R8A==", - "cpu": [ - "arm64" - ], + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@types/ms": "*" + } }, - "node_modules/@oxlint-tsgolint/linux-x64": { - "version": "7.0.2001", - "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-x64/-/linux-x64-7.0.2001.tgz", - "integrity": "sha512-UDezNqdECVmngu2TPnjaS1YoAmcTaBoI5lV9vk3VahBxoi+I5r9k3iJTT7qZoYWOXTD/7T7bNcwRgrocR6BscQ==", - "cpu": [ - "x64" - ], + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@oxlint-tsgolint/win32-arm64": { - "version": "7.0.2001", - "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-arm64/-/win32-arm64-7.0.2001.tgz", - "integrity": "sha512-uJZhqB6pdXLuN+AD1F5082byyQti/NPmJA77GtcFlmT2HzRelqbNls3SaIqxpjdFgvSBF9g0yOKGBkGFg7kX8Q==", - "cpu": [ - "arm64" - ], + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@types/unist": "*" + } }, - "node_modules/@oxlint-tsgolint/win32-x64": { - "version": "7.0.2001", - "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-x64/-/win32-x64-7.0.2001.tgz", - "integrity": "sha512-FkDRm8hx9OwzGQqyWG1tO5QrTLRApff9DzSgpz9QZau37BR8d1VYKOxMLGf6shPZntJFoTwIIJYT68VndYDCog==", - "cpu": [ - "x64" - ], + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } }, - "node_modules/@oxlint/binding-android-arm-eabi": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.77.0.tgz", - "integrity": "sha512-E06sKWS6PiI6HRxS1wyQg22HvApt01hI7fV+T3wUk3OSbaaP4a3hYGY/MIQDmASqCiRjBdpRQYkgMkqH82cWmQ==", - "cpu": [ - "arm" - ], + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/@oxlint/binding-android-arm64": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.77.0.tgz", - "integrity": "sha512-NvsKz0KZxTp9cYWPLf+FXaSZwB3oO3peAjtukpOMBgse2vhQSoIIVqeO1yR0lEo/UcdZIDL18uq+kL0LzQ0ytA==", + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.0.tgz", + "integrity": "sha512-xpr/lmLPQEj+TUnHmR+Ab91/glhJvsqcjB+yY0Ix9GO70H6Lb4FHH5GeqdOE5btAx7eIMwuHkp4H2MSkLcqWbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", "cpu": [ - "arm64" + "ppc64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "android" + "aix" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-darwin-arm64": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.77.0.tgz", - "integrity": "sha512-bgjTn6nW4bQCFBvSvuHCpDD+sONvmpo4lGI4PxzMt1quBA+xYxhczk6RiCn3GZ9gY8uhaBbwhj9MdKGfu6T9DA==", + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-darwin-x64": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.77.0.tgz", - "integrity": "sha512-aotaIttH1R6j1Rwhx0M0htgeZyGtVQqYNTVEYMN/UcgHPquGA6kmk9OyuDc3a2GKUQBC+3C3GVQCcrRPMYqAFA==", + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ "darwin" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-freebsd-x64": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.77.0.tgz", - "integrity": "sha512-nNx/wta7ksRAdYvq+l4AWjXkLxEXHALhENxjj2cYbQAIR4ybaA5L+hCbE63HOmft5czQ6ks+hb8vmEAnn7YGPg==", + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ "freebsd" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-linux-arm-gnueabihf": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.77.0.tgz", - "integrity": "sha512-tMLLjM7xXtzXisVCzkOTXNCy9bZVId2wteNwjohlFDR/jY6WagpEDA1c1wu4xRc20Hojaxj+V6DSR7gbKxijWA==", + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", "cpu": [ - "arm" + "x64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "linux" + "freebsd" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-linux-arm-musleabihf": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.77.0.tgz", - "integrity": "sha512-MiAFDFaqR0tmHTAyo0YDcZ5hyLREdYw/RQhc2R3cbT+8O3tB+zqPM2th9TTQ+Uo3jn/embS+DO+HyX9ztCPkOQ==", + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-linux-arm64-gnu": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.77.0.tgz", - "integrity": "sha512-/xqQ3B16i1T4cyt/9Mn+4CpzhUXoBXp7kVpIwzOXNFLj5JmK1bIjsbSnX296Gg8A/o7oDtKWikFgBx0SLwztkw==", + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", "cpu": [ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-linux-arm64-musl": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.77.0.tgz", - "integrity": "sha512-LSbwuRKiNCenPDcbARqAZ5RfBy7gmj7vOvfJRLeCDU3gFtSxWbhv/+VTlaUqzUhNj1gFLHB8h7ALnxa/Az6z6g==", + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", "cpu": [ - "arm64" + "loong64" ], "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-linux-ppc64-gnu": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.77.0.tgz", - "integrity": "sha512-QWdcH31mXEUe5Nq1s0CfCpceaKjIo9uZtwDjAuL681g1axf+5x8xrg/eXWaw//4NCxYZ4V4e5Hu5tvdR+pTBlg==", + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", "cpu": [ - "ppc64" + "mips64el" ], "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-linux-riscv64-gnu": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.77.0.tgz", - "integrity": "sha512-GnOfYgJxbcElOiPZaDFDl406ONddwvOWk2jvAAAEjwAl4GofNoHF+/HHUIBYa6bFCArlcGPi0XjC4cU1pkgF/Q==", + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", "cpu": [ - "riscv64" + "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-linux-riscv64-musl": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.77.0.tgz", - "integrity": "sha512-AyEMTUCf0xY+hHF+IxqXFQIX0yQOIR8ykpY0lJNOw9xYqOzUX8dyZfRvlG0RfXwuQn2eonf/8NrMmDSZJjdqsA==", + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", "cpu": [ "riscv64" ], "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-linux-s390x-gnu": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.77.0.tgz", - "integrity": "sha512-sPLzEcNvxd/oyVQ5oZo92CiHkFkpBeRop13E/P3TPY+hZfXHKCOWKI70TE2RYwMKFJDc20EMjH16L7NZICtKTw==", + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", "cpu": [ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-linux-x64-gnu": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.77.0.tgz", - "integrity": "sha512-1Oh2ssH2L7lwyvkdSqaMUfsGfwU2Wfvew+obBUYjRVqhpBcUpwnsPSEr1IzVi9XqkuY10geiLsNKecqaZC34Dw==", + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", "cpu": [ "x64" ], "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-linux-x64-musl": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.77.0.tgz", - "integrity": "sha512-0j/2wRgNGO+Qj/M1uu/p57h/hFTTWWcfie0ufkbabeus2s5+/QqkCflnMOwLLN5m2GsNeWp4xdl4cPa4n7QCOQ==", + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", "cpu": [ - "x64" + "arm64" ], "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "linux" + "netbsd" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-openharmony-arm64": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.77.0.tgz", - "integrity": "sha512-BJ/j54qS0usEnyDkLYURMj2iiD9h5Cyy+ppzeMSXBGRXaGRNWnj1Mw14NqWMR5E/PzdgB30OOCCzLzbRoduafw==", + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", "cpu": [ - "arm64" + "x64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "openharmony" + "netbsd" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-win32-arm64-msvc": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.77.0.tgz", - "integrity": "sha512-Yh8w+g2Lpx7StrvtYkoz9JJvXjB9wxgFChFNb85nrXm/wj/XTwGWS1hve9+900HL7llrntYB3YP+y32E3tRqzA==", + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "win32" + "openbsd" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-win32-ia32-msvc": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.77.0.tgz", - "integrity": "sha512-zja5b7+6a7UsRFgAQSrnax5vrzliEyNPLCjfXONu/vTWswaIVZGFajJZptaeRvPE4LghtFdAzVFlexTm7MVTGA==", + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", "cpu": [ - "ia32" + "x64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "win32" + "openbsd" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">=16.20.0" } }, - "node_modules/@oxlint/binding-win32-x64-msvc": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.77.0.tgz", - "integrity": "sha512-+teyvPDZ2RjUvo+SuCqS/UhaJl1QtdW5fWT5NJTV61V5MIuIS90Db9LixmtEGvXixyttiK62P96MSu3UlpviBw==", + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "win32" + "sunos" ], "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@oxlint/plugins": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/@oxlint/plugins/-/plugins-1.77.0.tgz", - "integrity": "sha512-6KtPXskPgpt+0Kyl2nNSxNnYXt7lbkxW1C7vi2L7xwtq/AisZlsmV+hnzOTEyM5tU1TxPv1GpTqpUBbZfPzBLg==", - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/Boshen" + "node": ">=16.20.0" } }, - "node_modules/@parcel/watcher": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz", - "integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.3", - "is-glob": "^4.0.3", - "node-addon-api": "^7.0.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.6.0", - "@parcel/watcher-darwin-arm64": "2.6.0", - "@parcel/watcher-darwin-x64": "2.6.0", - "@parcel/watcher-freebsd-x64": "2.6.0", - "@parcel/watcher-linux-arm-glibc": "2.6.0", - "@parcel/watcher-linux-arm-musl": "2.6.0", - "@parcel/watcher-linux-arm64-glibc": "2.6.0", - "@parcel/watcher-linux-arm64-musl": "2.6.0", - "@parcel/watcher-linux-x64-glibc": "2.6.0", - "@parcel/watcher-linux-x64-musl": "2.6.0", - "@parcel/watcher-win32-arm64": "2.6.0", - "@parcel/watcher-win32-x64": "2.6.0" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", - "integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==", + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "android" + "win32" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=16.20.0" } }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", - "integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==", + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", "cpu": [ - "arm64" + "x64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": ">=16.20.0" } }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", - "integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==", - "cpu": [ - "x64" - ], + "node_modules/@typescript/vfs": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.4.tgz", + "integrity": "sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "debug": "^4.4.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "peerDependencies": { + "typescript": "*" } }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", - "integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==", - "cpu": [ - "x64" - ], + "node_modules/@typescript/vfs/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=6.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", - "integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==", - "cpu": [ - "arm" - ], + "node_modules/@typescript/vfs/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.8.tgz", + "integrity": "sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew==", "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, "engines": { - "node": ">= 10.0.0" + "node": "^20.19.0 || >=22.12.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" } }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", - "integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==", - "cpu": [ - "arm" - ], + "node_modules/@vitest/browser": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.10.tgz", + "integrity": "sha512-UDwuWGwXj646CBx/bQHOaJSX7np0I8JL/UKQYa1e4QrVHH8VdWtx8eaOuf8sy0ShwDgR6NjJAsp5eF6vjF6qng==", "dev": true, - "libc": [ - "musl" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "@blazediff/core": "1.9.1", + "@vitest/mocker": "4.1.10", + "@vitest/utils": "4.1.10", + "magic-string": "^0.30.21", + "pngjs": "^7.0.0", + "sirv": "^3.0.2", + "tinyrainbow": "^3.1.0", + "ws": "^8.19.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "4.1.10" } }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", - "integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==", - "cpu": [ - "arm64" - ], + "node_modules/@vitest/browser-playwright": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.10.tgz", + "integrity": "sha512-nMoXGEiRpT7m3W7NsbvrM2aKNwiNHZf+zEpUCvMteGjZFvfT96Q9fh7QyB98dvDWXiKvrLxA7bJ1mCOOv+JQPw==", "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "@vitest/browser": "4.1.10", + "@vitest/mocker": "4.1.10", + "tinyrainbow": "^3.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "playwright": "*", + "vitest": "4.1.10" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": false + } } }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", - "integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==", - "cpu": [ - "arm64" - ], + "node_modules/@vitest/coverage-v8": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.10.tgz", + "integrity": "sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==", "dev": true, - "libc": [ - "musl" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "@bcoe/v8-coverage": "^1.0.2", + "@vitest/utils": "4.1.10", + "ast-v8-to-istanbul": "^1.0.0", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.2.0", + "magicast": "^0.5.2", + "obug": "^2.1.1", + "std-env": "^4.0.0-rc.1", + "tinyrainbow": "^3.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "4.1.10", + "vitest": "4.1.10" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } } }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", - "integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==", - "cpu": [ - "x64" - ], + "node_modules/@vitest/expect": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz", + "integrity": "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==", "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.10", + "@vitest/utils": "4.1.10", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", - "integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==", - "cpu": [ - "x64" - ], + "node_modules/@vitest/mocker": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz", + "integrity": "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==", "dev": true, - "libc": [ - "musl" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "@vitest/spy": "4.1.10", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } } }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", - "integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==", - "cpu": [ - "arm64" - ], + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz", + "integrity": "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", - "integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==", - "cpu": [ - "x64" - ], + "node_modules/@vitest/runner": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz", + "integrity": "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "@vitest/utils": "4.1.10", + "pathe": "^2.0.3" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@pkgr/core": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", - "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", + "node_modules/@vitest/snapshot": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz", + "integrity": "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==", "dev": true, "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.0.0" + "dependencies": { + "@vitest/pretty-format": "4.1.10", + "@vitest/utils": "4.1.10", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" }, "funding": { - "url": "https://opencollective.com/pkgr" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "node_modules/@vitest/spy": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz", + "integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==", "dev": true, - "license": "MIT" + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } }, - "node_modules/@quansync/fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@quansync/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==", + "node_modules/@vitest/utils": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz", + "integrity": "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==", "dev": true, "license": "MIT", "dependencies": { - "quansync": "^1.0.0" + "@vitest/pretty-format": "4.1.10", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" }, "funding": { - "url": "https://github.com/sponsors/sxzz" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.3.tgz", - "integrity": "sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw==", - "cpu": [ - "arm64" - ], + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@volar/source-map": "2.4.28" } }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.3.tgz", - "integrity": "sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA==", - "cpu": [ - "arm64" - ], + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.41.tgz", + "integrity": "sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/shared": "3.5.41", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" } }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.3.tgz", - "integrity": "sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA==", - "cpu": [ - "x64" - ], + "node_modules/@vue/compiler-dom": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.41.tgz", + "integrity": "sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@vue/compiler-core": "3.5.41", + "@vue/shared": "3.5.41" } }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.3.tgz", - "integrity": "sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg==", - "cpu": [ - "x64" - ], + "node_modules/@vue/compiler-sfc": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.41.tgz", + "integrity": "sha512-XJhip7R2wy6vX3knCxdZN4KracFaZUef58s1KYewqluedHIJaPIVfXoYT7MF1F8nCvv6k8bWWxDC8opMkg1VTQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@babel/parser": "^7.29.8", + "@vue/compiler-core": "3.5.41", + "@vue/compiler-dom": "3.5.41", + "@vue/compiler-ssr": "3.5.41", + "@vue/shared": "3.5.41", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.19", + "source-map-js": "^1.2.1" } }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.3.tgz", - "integrity": "sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw==", - "cpu": [ - "arm" - ], + "node_modules/@vue/compiler-ssr": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.41.tgz", + "integrity": "sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@vue/compiler-dom": "3.5.41", + "@vue/shared": "3.5.41" } }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.3.tgz", - "integrity": "sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw==", - "cpu": [ - "arm64" - ], + "node_modules/@vue/devtools-api": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.2.1.tgz", + "integrity": "sha512-6u4vXBlIBAC1wMplIZgpyPn7uh/s4Bf6F5bMzvLv+EdJ0aHs/+4B7Ygv864EStQSjRbsRzTko/kUG1A1IejQ3A==", "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@vue/devtools-kit": "^8.2.1" } }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.3.tgz", - "integrity": "sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q==", - "cpu": [ - "arm64" - ], + "node_modules/@vue/devtools-kit": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.2.1.tgz", + "integrity": "sha512-FIGIuq3AWReEpbAHY/cRGeHDfI0qOb8OCQ3YjbEAX04uaxIDbGc9rhkbVcG7rnfHPXE3RsU5KrWOu9V/okd8AQ==", "dev": true, - "libc": [ - "musl" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@vue/devtools-shared": "^8.2.1", + "birpc": "^2.6.1", + "hookable": "^5.5.3", + "perfect-debounce": "^2.0.0" } }, - "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.3.tgz", - "integrity": "sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w==", - "cpu": [ - "ppc64" - ], + "node_modules/@vue/devtools-kit/node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/devtools-shared": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.2.1.tgz", + "integrity": "sha512-Fkac7lUdGReh6pVOi3AYPRGe82LQqRmAfThW7RRligOAP0ZA/Z1z9XLHDM9dv34pV2HRc79DK8uKPeG2fLnA/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/language-core": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.3.9.tgz", + "integrity": "sha512-in/68oAa4BCtVY6n/nkuhLIkV8DHYd2UivedJ6cMZ6UYtlq9jaoaSNUBHYCVO44z3nKg7MdE5OBoHKt5SxeBKQ==", "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.2.1", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.4" } }, - "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.3.tgz", - "integrity": "sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg==", - "cpu": [ - "s390x" - ], + "node_modules/@vue/reactivity": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.41.tgz", + "integrity": "sha512-rznsqKM0np0x18EjzF8x88MpEhdNsffbvFbckLL5+oUKz1BxAImEmO7J1ArRYSyo6aQaVoBDp7jEkT91OOxydA==", "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@vue/shared": "3.5.41" } }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.3.tgz", - "integrity": "sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w==", - "cpu": [ - "x64" - ], + "node_modules/@vue/runtime-core": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.41.tgz", + "integrity": "sha512-Vcry58hiAKwGen9Z1jUZE0feFsNArPCMOImYI8el48A9Idf6DuQYD0U05zZIF2Iad1hGhPSvcbBbAOhNr55fhg==", "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@vue/reactivity": "3.5.41", + "@vue/shared": "3.5.41" } }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.3.tgz", - "integrity": "sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A==", - "cpu": [ - "x64" - ], + "node_modules/@vue/runtime-dom": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.41.tgz", + "integrity": "sha512-3vVBahVBS9+U6cmXBLyb8nE6/yYo4J/CGI9eVFs3KiMc0YHuudwKyShTD65jtJy/L9PUUxNAFu4cj4LiJ0UFbw==", "dev": true, - "libc": [ - "musl" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@vue/reactivity": "3.5.41", + "@vue/runtime-core": "3.5.41", + "@vue/shared": "3.5.41", + "csstype": "^3.2.3" } }, - "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.3.tgz", - "integrity": "sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.3.tgz", - "integrity": "sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.3.tgz", - "integrity": "sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg==", - "cpu": [ - "x64" - ], + "node_modules/@vue/server-renderer": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.41.tgz", + "integrity": "sha512-n6hx/pNFfbD6SuyeuMVkvqox8bwf/ET9JlA/kAz/imw8sw++wkqKe2mHX5KutjPpbKE4Z56yTHszoOjGMI9igQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@vue/compiler-ssr": "3.5.41", + "@vue/runtime-dom": "3.5.41", + "@vue/shared": "3.5.41" } }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", - "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "node_modules/@vue/shared": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.41.tgz", + "integrity": "sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA==", "dev": true, "license": "MIT" }, - "node_modules/@rollup/plugin-swc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-swc/-/plugin-swc-0.4.1.tgz", - "integrity": "sha512-widfnT1TbDc4hsV37PQ61ZoLGPJ7STZE4lQzA3gWKbcMfzjOgiGsoTYfSsq21H4J2UY1y3MKwejXTMkwN2tEtQ==", + "node_modules/@vueuse/core": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.4.0.tgz", + "integrity": "sha512-X4WHz1HlCzCBoYXesUkifzzWBAcZgXG8Fi5iNPQg/epdzOB3gu8Fawj3hvuwYR1nGcXGnvxwYYcUC/71++svtQ==", "dev": true, "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "smob": "^1.4.0" + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.4.0", + "@vueuse/shared": "14.4.0" }, - "engines": { - "node": ">=14.0.0" + "funding": { + "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "@swc/core": "^1.3.0", - "rollup": "^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "vue": "^3.5.0" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", - "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "node_modules/@vueuse/integrations": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-14.4.0.tgz", + "integrity": "sha512-oJz9qTgczvA7L1nXQFRU7h8tQbOCoiceqvMMhT9XYMyOGTqLJ2rEa09PON+nD2t48sZUfeOmg4eaWJXV4sZb/w==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" + "@vueuse/core": "14.4.0", + "@vueuse/shared": "14.4.0" }, - "engines": { - "node": ">=14.0.0" + "funding": { + "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "async-validator": "^4", + "axios": "^1", + "change-case": "^5", + "drauu": "^0.4", + "focus-trap": "^7 || ^8", + "fuse.js": "^7", + "idb-keyval": "^6", + "jwt-decode": "^4", + "nprogress": "^0.2", + "qrcode": "^1.5", + "sortablejs": "^1", + "universal-cookie": "^7 || ^8", + "vue": "^3.5.0" }, "peerDependenciesMeta": { - "rollup": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { "optional": true } } }, - "node_modules/@shikijs/core": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.0.2.tgz", - "integrity": "sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==", + "node_modules/@vueuse/metadata": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.4.0.tgz", + "integrity": "sha512-swx/255R6JyHZFJhx845iz5CRWDZdCfvkZOpACWc5+c5WHcG24mv8gUT1WIdFQaHt6dq79rvILd9QnCWiyVm9g==", "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/primitive": "4.0.2", - "@shikijs/types": "4.0.2", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.5" - }, - "engines": { - "node": ">=20" + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@shikijs/engine-javascript": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.0.2.tgz", - "integrity": "sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==", + "node_modules/@vueuse/shared": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.4.0.tgz", + "integrity": "sha512-JRgY90Sz8DDtPMsaDflvPMp9xYk69JZAmbuDvAquUVXKr2gEjqtzGNTTthLfckH0BzBqvnu31gb4a8TGLRe79g==", "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/types": "4.0.2", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^4.3.4" + "funding": { + "url": "https://github.com/sponsors/antfu" }, - "engines": { - "node": ">=20" + "peerDependencies": { + "vue": "^3.5.0" } }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.0.2.tgz", - "integrity": "sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==", + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "4.0.2", - "@shikijs/vscode-textmate": "^10.0.2" - }, - "engines": { - "node": ">=20" - } + "license": "BSD-2-Clause" }, - "node_modules/@shikijs/langs": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.0.2.tgz", - "integrity": "sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==", + "node_modules/@yuku-codegen/binding-android-arm64": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-android-arm64/-/binding-android-arm64-0.8.4.tgz", + "integrity": "sha512-rsYkGl2kOkDRsh1mxriYnk1qBS78vjlBJ3+T2XwtwKwqOliy2n+2Ae0EDxJ/uX1DZLm3KkBZarGO5isEnmHchA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/types": "4.0.2" - }, - "engines": { - "node": ">=20" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@shikijs/primitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.0.2.tgz", - "integrity": "sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==", + "node_modules/@yuku-codegen/binding-darwin-arm64": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-arm64/-/binding-darwin-arm64-0.8.4.tgz", + "integrity": "sha512-tNLKzPF3FYmEcHSYvWp/LEpjHHAtDR13hwo6/gdCkYMi9x59CWn2obczKzWNe7kDor4/1AMZuJDEVRpFkTSefw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/types": "4.0.2", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - }, - "engines": { - "node": ">=20" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@shikijs/themes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.0.2.tgz", - "integrity": "sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "4.0.2" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@shikijs/transformers": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-4.4.2.tgz", - "integrity": "sha512-d81PJ9KkR1tVP95FH/9296HTtDo0mh76wv10u9T1YmsZq/UcXgt0OLdBszfUQ1i+umkRMCjDnFbFZU7/tCODTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "4.4.2", - "@shikijs/types": "4.4.2" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@shikijs/transformers/node_modules/@shikijs/core": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.2.tgz", - "integrity": "sha512-StyzbAyxg2/tBGf78gwbBkGyeQ73lf8UiJArFaQhTQIDqQOCKPCQFanvrs4/Yv3Yfyc+ONInJM6K+FMIf+P+kA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/primitive": "4.4.2", - "@shikijs/types": "4.4.2", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.5", - "hast-util-to-html": "^9.0.5" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@shikijs/transformers/node_modules/@shikijs/primitive": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.2.tgz", - "integrity": "sha512-l6fQQKsOMlz72n38fztmSgZ76MO6KSWuw8o+GJ+FhmqrpC9pIOJNQNXGgbb5yX2AwpzlEHwsaLPnk/8o4Fm+rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "4.4.2", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.5" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@shikijs/transformers/node_modules/@shikijs/types": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.2.tgz", - "integrity": "sha512-PFYitV4vpDr/iPCIhnHp+Q4ftic5N5VeNJ3KQ1O8gn3h2ar8qgwMAXF7tq4m1CWaMS60fV4VqF6vfnWH4F7vqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.5" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@shikijs/twoslash": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-4.0.2.tgz", - "integrity": "sha512-yHRudhirlMxOwDO6Q4OFU9hJMvUqNkY8hwtUfbaSEoG7A2cYicdO4c8fdDaDtyJ50HK7I8vTokrkIHTK3DCkLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "4.0.2", - "@shikijs/types": "4.0.2", - "twoslash": "^0.3.6" - }, - "engines": { - "node": ">=20" - }, - "peerDependencies": { - "typescript": ">=5.5.0" - } - }, - "node_modules/@shikijs/twoslash/node_modules/twoslash": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.3.9.tgz", - "integrity": "sha512-rDclk+OtzuTX+tnea7DYLCkqGQ3eP0IyfD+kzUJ7t46X/NzlaxwrhecmEBNuSCuEn3V+n1PhcjUUQQ7gUJzX5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript/vfs": "^1.6.4", - "twoslash-protocol": "0.3.9" - }, - "peerDependencies": { - "typescript": "^5.5.0 || ^6.0.0" - } - }, - "node_modules/@shikijs/types": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.0.2.tgz", - "integrity": "sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@shikijs/vitepress-twoslash": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-4.0.2.tgz", - "integrity": "sha512-Bk01fAYDDiTffRPLHNJdNlYwzExXIVcrHUVNciD931SMlKZArvteKib6mM3mWAUhcy78RW1llT3fczjKIgQHBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/twoslash": "4.0.2", - "floating-vue": "^5.2.2", - "lz-string": "^1.5.0", - "magic-string": "^0.30.21", - "markdown-it": "^14.1.1", - "mdast-util-from-markdown": "^2.0.3", - "mdast-util-gfm": "^3.1.0", - "mdast-util-to-hast": "^13.2.1", - "ohash": "^2.0.11", - "shiki": "4.0.2", - "twoslash": "^0.3.6", - "twoslash-vue": "^0.3.6", - "vue": "^3.5.29" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@shikijs/vitepress-twoslash/node_modules/twoslash": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.3.9.tgz", - "integrity": "sha512-rDclk+OtzuTX+tnea7DYLCkqGQ3eP0IyfD+kzUJ7t46X/NzlaxwrhecmEBNuSCuEn3V+n1PhcjUUQQ7gUJzX5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript/vfs": "^1.6.4", - "twoslash-protocol": "0.3.9" - }, - "peerDependencies": { - "typescript": "^5.5.0 || ^6.0.0" - } - }, - "node_modules/@shikijs/vitepress-twoslash/node_modules/twoslash-vue": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/twoslash-vue/-/twoslash-vue-0.3.9.tgz", - "integrity": "sha512-2zO1u4iPhZz9k7ysuDaJL1FUn4SHzm78ZF6/0Q4yFR2VP3NW0JwRpw/4cWqEM6ye3pDf8Zr9lVPBvsX4uK315A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/language-core": "^3.2.6", - "twoslash": "0.3.9", - "twoslash-protocol": "0.3.9" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "typescript": "^5.5.0 || ^6.0.0" - } - }, - "node_modules/@shikijs/vitepress-twoslash/node_modules/typescript": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", - "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", - "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@shopify/liquid-html-parser": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@shopify/liquid-html-parser/-/liquid-html-parser-2.10.0.tgz", - "integrity": "sha512-fdfKqVOoGCvLWgXUiqPjw99wM64wZV/3RpSQZb59P1K8pT7l1cyJZV+QAyHgvVV1jcglUCtFmr+8ioY7rGVdKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "line-column": "^1.0.2" - } - }, - "node_modules/@shopify/prettier-plugin-liquid": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@shopify/prettier-plugin-liquid/-/prettier-plugin-liquid-1.10.0.tgz", - "integrity": "sha512-csHYjwuT34o8ja6EY0dUBYQS5UVwsKwRYxGiuG816Ov0B8lVd8FUjOwWUk2SnrNx3cGgL0no7z+Byapp7sC1Uw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shopify/liquid-html-parser": "^2.9.0", - "html-styles": "^1.0.0" - }, - "peerDependencies": { - "prettier": "^2.0.0 || ^3.0.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.34.52", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.52.tgz", - "integrity": "sha512-XiMQh7qqVlxZzcVD+kkGMNGMzcTrDMLWI7S4x7z1MkCkbDPrekpZXEUK0eZqZFMuHQg2a2DZOcDIh9o5v3Gonw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@soda/friendly-errors-webpack-plugin": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", - "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^3.0.0", - "error-stack-parser": "^2.0.6", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@studiometa/eslint-config": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@studiometa/eslint-config/-/eslint-config-4.3.1.tgz", - "integrity": "sha512-biLt0B6JD+WzWAuBmVkIy6ZjNvdPloKRUUF9NJIbn15WddXGg+h32D45tGgq3m/4X9+NIMw1nr4Ee3r4qBzYWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/js": "^9.29.0", - "eslint": "^9.29.0", - "eslint-config-prettier": "^10.1.5", - "eslint-formatter-gitlab": "^6.0.1", - "eslint-plugin-jsdoc": "^51.0.1", - "eslint-plugin-prettier": "^5.4.1", - "eslint-plugin-unicorn": "^59.0.1", - "eslint-plugin-vue": "^10.2.0", - "globals": "^16.2.0", - "typescript-eslint": "^8.34.0" - }, - "peerDependencies": { - "prettier": ">=3.0.0" - } - }, - "node_modules/@studiometa/eslint-config/node_modules/@typescript-eslint/project-service": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.66.0.tgz", - "integrity": "sha512-7MthGPTt4BP69lSryqpqq8HQqxuzynssckL/jyDyk3+TNMQ3y2jFWkptCrktWvBrP+EH787Nl5N5Qpw7WZg+5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.66.0", - "@typescript-eslint/types": "^8.66.0", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@studiometa/eslint-config/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.66.0.tgz", - "integrity": "sha512-9D5gLYZG4rOjcoag8MQ/fWI8WqA9wcPDyOGyWtWFhvM1lHRbliqUSPIY5J3zqCU1tvSwzXxnnjhQhz5Ne7mJ4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@studiometa/eslint-config/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.66.0.tgz", - "integrity": "sha512-8/x4INiiQb10jGgXYD7116/zQ+OL84ZIFn0za68wwFHCanT/VLbBEroWht8RV8fn0/ZCAoazHLQgwUC0UQcDfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.66.0", - "@typescript-eslint/tsconfig-utils": "8.66.0", - "@typescript-eslint/types": "8.66.0", - "@typescript-eslint/visitor-keys": "8.66.0", - "debug": "^4.4.3", - "minimatch": "^10.2.2", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@studiometa/eslint-config/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@studiometa/eslint-config/node_modules/eslint-plugin-vue": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.10.0.tgz", - "integrity": "sha512-dL9x9rBHqqNcByWiLOHK6L0SB97V82/NC0cZRn9cXPjM7pCuWlpQQP9bFH4vjBv80ej1ZpzAkuD8zWH1o9bZbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^7.1.4", - "semver": "^7.8.5", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "peerDependencies": { - "@stylistic/eslint-plugin": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", - "@typescript-eslint/parser": "^7.0.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "vue-eslint-parser": "^10.3.0" - }, - "peerDependenciesMeta": { - "@stylistic/eslint-plugin": { - "optional": true - }, - "@typescript-eslint/parser": { - "optional": true - } - } - }, - "node_modules/@studiometa/eslint-config/node_modules/ignore": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", - "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@studiometa/eslint-config/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@studiometa/eslint-config/node_modules/typescript": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", - "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@studiometa/eslint-config/node_modules/typescript-eslint": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.66.0.tgz", - "integrity": "sha512-QlEbBPz/RuJ1XUHj29nm3t0F/O/cSlEnntozqPOYHnnTGAXFamnMBu5i9Vn6vhUPHGAjR+Vl+5J8vPN/BMUrJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.66.0", - "@typescript-eslint/parser": "8.66.0", - "@typescript-eslint/typescript-estree": "8.66.0", - "@typescript-eslint/utils": "8.66.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@studiometa/eslint-config/node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.66.0.tgz", - "integrity": "sha512-p088eaGrzYz1s+7cov0aMOCkNGTJlVxF4jgubf28c8L0Cv9Rloj8YBHnv4hXLq6IIEE1AsjNWavO+k+8kP2Y0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.66.0", - "@typescript-eslint/type-utils": "8.66.0", - "@typescript-eslint/utils": "8.66.0", - "@typescript-eslint/visitor-keys": "8.66.0", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.66.0", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@studiometa/eslint-config/node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.66.0.tgz", - "integrity": "sha512-LG2dWfjZQQp0ADtAu/EWJVayefGL2UEZ3CDeI44D9v3rXB/WYUqE/jpO28KrEKul5AySrmI+Zh1v6v+xW2U9+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.66.0", - "@typescript-eslint/typescript-estree": "8.66.0", - "@typescript-eslint/utils": "8.66.0", - "debug": "^4.4.3", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@studiometa/eslint-config/node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.66.0.tgz", - "integrity": "sha512-X6ypGChaWYk6PBtUg2BwuTZEFFcHJAtGTVJ9/lCTOufhZ4i9fNolQNnktq+kkMCwMj7V8Svsq7+TxSDslmhE0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.66.0", - "@typescript-eslint/types": "8.66.0", - "@typescript-eslint/typescript-estree": "8.66.0", - "@typescript-eslint/visitor-keys": "8.66.0", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@studiometa/eslint-config/node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.66.0.tgz", - "integrity": "sha512-jasearZPolBw5NJNYGMwxzHMF83niVWmMU1VdHzG1CyfI2VS7f7nZltnKtHcg20hW+7Uo5GfK4MeDPoU3qI8EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.66.0", - "@typescript-eslint/types": "8.66.0", - "@typescript-eslint/typescript-estree": "8.66.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@studiometa/eslint-plugin-js-toolkit": { - "resolved": "packages/eslint-plugin", - "link": true - }, - "node_modules/@studiometa/js-toolkit": { - "resolved": "packages/js-toolkit", - "link": true - }, - "node_modules/@studiometa/js-toolkit-demo": { - "resolved": "packages/demo", - "link": true - }, - "node_modules/@studiometa/js-toolkit-docs": { - "resolved": "packages/docs", - "link": true - }, - "node_modules/@studiometa/js-toolkit-v4": { - "resolved": "packages/v4", - "link": true - }, - "node_modules/@studiometa/prettier-config": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@studiometa/prettier-config/-/prettier-config-4.4.0.tgz", - "integrity": "sha512-n65PF9qzeIoO50RzAiTvodmgp8i26eYdDljjeu3K/yxVe9haEIv91ZCDNgUnOZK1yeH4JBzsRHz1DWuGhWMRxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shopify/prettier-plugin-liquid": "1.10.0", - "@studiometa/prettier-formatter-gitlab": "^2.1.1", - "@zackad/prettier-plugin-twig": "^0.16.0", - "prettier": "^3.6.2" - } - }, - "node_modules/@studiometa/prettier-formatter-gitlab": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@studiometa/prettier-formatter-gitlab/-/prettier-formatter-gitlab-2.1.2.tgz", - "integrity": "sha512-wvG3gHRqWIvCVa6FL0lRC+8vFnrvCR94uePN2VUp+IiCeBKgxhAmZfL8l5rYxtEVkJ4Ac/eLHq8TY/tKNYX10A==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.6.2", - "jest-diff": "^30.2.0", - "prettier-linter-helpers": "^1.0.0", - "strip-ansi": "7.1.2", - "yaml": "2.8.1" - }, - "bin": { - "prettier-formatter-gitlab": "bin/cli.js" - }, - "peerDependencies": { - "prettier": "^3.0" - } - }, - "node_modules/@studiometa/stylelint-config": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@studiometa/stylelint-config/-/stylelint-config-4.1.1.tgz", - "integrity": "sha512-lDUIqdypqA+1jL+MYDMi+7ApTlfJl6cSXP/JtNozEKSUV1d5BRPUfj8AcGhDyX8Whkz5vP+Ol1a0BJ+2dU0J2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@studiometa/stylelint-formatter-gitlab": "^1.0.2", - "postcss": "^8.5.6", - "postcss-html": "^1.8.0", - "postcss-scss": "^4.0.9", - "stylelint": "^16.20.0", - "stylelint-config-recommended": "^16.0.0", - "stylelint-config-recommended-scss": "^15.0.1", - "stylelint-formatter-pretty": "^4.0.1", - "stylelint-high-performance-animation": "^1.11.0", - "stylelint-order": "^7.0.0", - "stylelint-prettier": "^5.0.3", - "stylelint-scss": "^6.12.1" - }, - "peerDependencies": { - "prettier": ">=3.0.0" - } - }, - "node_modules/@studiometa/stylelint-formatter-gitlab": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@studiometa/stylelint-formatter-gitlab/-/stylelint-formatter-gitlab-1.1.1.tgz", - "integrity": "sha512-ztgzYTrvfaHsfSs+7uLzNR2NuM2e3haUqXPkIL7K//mfkQ2VC58pDG3c934f1KmZswvjR4rGe3Q3D4wkGqhj2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-diff": "^30.3.0", - "yaml": "^2.8.3" - }, - "peerDependencies": { - "stylelint": "^16.0 || ^17.0" - } - }, - "node_modules/@studiometa/stylelint-formatter-gitlab/node_modules/yaml": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", - "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, - "node_modules/@studiometa/tailwind-config": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@studiometa/tailwind-config/-/tailwind-config-3.0.0.tgz", - "integrity": "sha512-SauwUlgEcptxMMyy1TGL7Xod22654RncBT6whdefvUbgYw/46tnnXLDKVJ9vDb1QylWVkSxBUAUHzTov2AM9KQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "postcss": "^8.5.6", - "tailwindcss": "^4.1.16" - } - }, - "node_modules/@studiometa/ui": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@studiometa/ui/-/ui-1.7.0.tgz", - "integrity": "sha512-PpXc32qBAg0cN6oh73hR8gnSdcnEmaByOUacyY/08NgzUE4AZv2a/9rGFmWmqMNFAc62Nblpfmyg8QE4Y4nbkw==", - "license": "MIT", - "dependencies": { - "deepmerge": "^4.3.1", - "morphdom": "^2.7.5" - }, - "peerDependencies": { - "@studiometa/js-toolkit": "^3.4.0" - } - }, - "node_modules/@studiometa/webpack-config": { - "version": "6.3.6", - "resolved": "https://registry.npmjs.org/@studiometa/webpack-config/-/webpack-config-6.3.6.tgz", - "integrity": "sha512-yekX8GMfMGUvEjn7RNOioQXTAoWFMRveSGd+dctlbvI938nfBRfvDCCm535zwqUQ1zIQsHiR4duBSHKb3w1Ang==", - "dev": true, - "license": "MIT", - "dependencies": { - "@soda/friendly-errors-webpack-plugin": "^1.8.1", - "ajv": "8.17.1", - "autoprefixer": "^10.4.21", - "browser-sync": "^3.0.4", - "cac": "^6.7.14", - "chalk": "^5.4.1", - "common-dir": "^3.0.1", - "css-minimizer-webpack-plugin": "^7.0.2", - "dotenv": "^16.5.0", - "dotenv-expand": "^12.0.2", - "esbuild": "^0.25.5", - "esbuild-loader": "^4.3.0", - "find-up": "^7.0.0", - "get-port": "^7.1.0", - "glob": "^11.0.2", - "hot-accept-webpack-plugin": "^4.0.2", - "js-yaml-loader": "^1.2.2", - "lodash.merge": "^4.6.2", - "postcss": "^8.5.4", - "postcss-loader": "^8.1.1", - "postcss-preset-env": "^10.2.0", - "resolve-url-loader": "^5.0.0", - "sass-embedded": "^1.89.1", - "sass-loader": "^16.0.5", - "terser-webpack-plugin": "^5.3.14", - "webpack": "^5.99.9", - "webpack-assets-manifest": "^6.1.0", - "webpack-bundle-analyzer": "^4.10.2", - "webpack-dev-middleware": "^7.4.2", - "webpack-hot-middleware": "^2.26.1", - "webpack-merge": "^6.0.1", - "webpack-module-hot-accept": "^1.0.5", - "webpack-remove-empty-scripts": "^1.1.1", - "webpackbar": "^7.0.0" - }, - "bin": { - "meta": "bin/cli.js" - }, - "engines": { - "node": ">=20.11.0" - } - }, - "node_modules/@studiometa/webpack-config-preset-markdown": { - "version": "6.3.6", - "resolved": "https://registry.npmjs.org/@studiometa/webpack-config-preset-markdown/-/webpack-config-preset-markdown-6.3.6.tgz", - "integrity": "sha512-kMhfhXths4VDx/uT1UZuWLIe7YpdXgN3xCTmqwdkEL7b0+NTayQq92mLaY4flzqxb1KhgF14YQESv6xhrOanUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "front-matter-loader": "^2.0.0", - "remark": "^14.0.3", - "remark-html": "^16.0.1", - "remark-loader": "^6.0.0" - }, - "engines": { - "node": ">=20.11.0" - } - }, - "node_modules/@studiometa/webpack-config-preset-prototyping": { - "version": "6.3.6", - "resolved": "https://registry.npmjs.org/@studiometa/webpack-config-preset-prototyping/-/webpack-config-preset-prototyping-6.3.6.tgz", - "integrity": "sha512-R62Am4gg70gFcvG+9V889xgXsSNPpvX6wJ4UU+5+psJPp0LtQOme/1id4Bv6WNhUSPNbWuu4LTxbJ3S/ESChOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@studiometa/webpack-config-preset-markdown": "6.3.6", - "change-case": "5.4.4", - "collect.js": "^4.36.1", - "filemanager-webpack-plugin": "^8.0.0", - "glob": "^11.0.1", - "html-escaper": "^3.0.3", - "html-loader": "5.1.0", - "html-webpack-harddisk-plugin": "^2.0.0", - "html-webpack-plugin": "^5.6.3", - "lodash.merge": "^4.6.2", - "minimatch": "^10.0.1", - "twig": "^1.17.1" - }, - "engines": { - "node": ">=20.11.0" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@studiometa/webpack-config/node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" - } - }, - "node_modules/@swc/core": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.47.tgz", - "integrity": "sha512-FbsO5JcfOjfH38W/rohBRBweJeERsAuIP4f377lmkmxTcq9exjtx4SkRuZY5CdfhR2CBVwDIJegBpJDffwNsOg==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.27" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.47", - "@swc/core-darwin-x64": "1.15.47", - "@swc/core-linux-arm-gnueabihf": "1.15.47", - "@swc/core-linux-arm64-gnu": "1.15.47", - "@swc/core-linux-arm64-musl": "1.15.47", - "@swc/core-linux-ppc64-gnu": "1.15.47", - "@swc/core-linux-s390x-gnu": "1.15.47", - "@swc/core-linux-x64-gnu": "1.15.47", - "@swc/core-linux-x64-musl": "1.15.47", - "@swc/core-win32-arm64-msvc": "1.15.47", - "@swc/core-win32-ia32-msvc": "1.15.47", - "@swc/core-win32-x64-msvc": "1.15.47" - }, - "peerDependencies": { - "@swc/helpers": ">=0.5.17" - }, - "peerDependenciesMeta": { - "@swc/helpers": { - "optional": true - } - } - }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.47.tgz", - "integrity": "sha512-GsoMtan3ojGGMGFbl31mmRu5ctZ56re8grGE8mO/OHJ8O+JRkzod02fe7X6ZQ8JvamA3imkEkx/h3u+vsOgPgA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.47.tgz", - "integrity": "sha512-leTi7Rx3KF4zcC637iqWgk9SoV8VXAD8ppQYXsep63px5A/UftOcxLN1pmr8Z1si/YvX90ompP/rHgpYkgwXWg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.47.tgz", - "integrity": "sha512-hBqHuoWKKIsKmDBn9qVeWqj5GWZhtlcczVaqQmNRXsDfq+voR5CxKRfamA367QjJXtceYuliLFfEL8QsskRM2g==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.47.tgz", - "integrity": "sha512-TBxvRz+B4K205TWHHZxWVxkC2RFNP/Mz3PNcECBos5PsKwxjg3QSJzdoebr0VCf0Bfh8HOPldKxAP/8XkFe9gA==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.47.tgz", - "integrity": "sha512-3Yu3Uq/VgytqsPjTMbkPU1ExADytbdWbruJYhA584E9jrpE2Ki+R6VVPoZCeAVk1Cb7QxcRTgblw6bSa6a/R+w==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-ppc64-gnu": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.47.tgz", - "integrity": "sha512-wfdMi5IaOaNtmh2/6geRoxIdNfqylUZFdtzTKS655y1axWfIWyx7As74vv0wVdjeCIZ3WmCI9odDd4rUttXOSQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-s390x-gnu": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.47.tgz", - "integrity": "sha512-3hHYBY0yx8Ez7GMRrkhXHQzMdR5IZA6Wq5Ee4svlgwvSECLpnAJ9+0AimEGUFDvuLwE7nV/2+PYe8+Nm4rvNcQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.47.tgz", - "integrity": "sha512-TjfhjgP/jGCfFHYC3JQPhJA1HwErbIJ9JfREDc1KNkvY6P0LodCgKVIlQ5deeTbkG7ih3bF5PHJLuLpaZjdRyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.47.tgz", - "integrity": "sha512-CQpS8Ge/avfjZd0UEwG/sds83Uu32deQXcV1Jo3jD0mmvQQqtYAjpsDZXugmheeAwmt+YIuoVtVHro8LMYHqsQ==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.47.tgz", - "integrity": "sha512-0W8IKHsUTYiT7G2RqtOoVWk+89yzZikIiDUb/sCK6BmQDBhN91hQSfyUtW12jhEWLzYgcfmisfsZrmZE+84U1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.47.tgz", - "integrity": "sha512-ZIp49d2Z4/ka2jO9otOg4hDvTdPmp86kVOgS2M5FCPI7eKKZ1W0boxWn+8XeZrfERtFGW0AlMRm4JhlJa7l3NA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.47", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.47.tgz", - "integrity": "sha512-2h8Iek95vnixkBRCo+H8p09+Q5ll2NgSMFrWTy0iKt7+/t+8/T5mBpiT6c0ZxSS7wcWjwZ9sGZkK70tTSYHdDw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@swc/types": { - "version": "0.1.28", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.28.tgz", - "integrity": "sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3" - } - }, - "node_modules/@tailwindcss/node": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", - "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/remapping": "^2.3.5", - "enhanced-resolve": "^5.19.0", - "jiti": "^2.6.1", - "lightningcss": "1.32.0", - "magic-string": "^0.30.21", - "source-map-js": "^1.2.1", - "tailwindcss": "4.2.2" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", - "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.32.0", - "lightningcss-darwin-arm64": "1.32.0", - "lightningcss-darwin-x64": "1.32.0", - "lightningcss-freebsd-x64": "1.32.0", - "lightningcss-linux-arm-gnueabihf": "1.32.0", - "lightningcss-linux-arm64-gnu": "1.32.0", - "lightningcss-linux-arm64-musl": "1.32.0", - "lightningcss-linux-x64-gnu": "1.32.0", - "lightningcss-linux-x64-musl": "1.32.0", - "lightningcss-win32-arm64-msvc": "1.32.0", - "lightningcss-win32-x64-msvc": "1.32.0" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-android-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", - "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-darwin-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", - "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-darwin-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", - "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-freebsd-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", - "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", - "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", - "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-arm64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", - "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-x64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", - "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-linux-x64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", - "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", - "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/node/node_modules/lightningcss-win32-x64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", - "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", - "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-x64": "4.2.2", - "@tailwindcss/oxide-freebsd-x64": "4.2.2", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", - "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", - "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-x64-musl": "4.2.2", - "@tailwindcss/oxide-wasm32-wasi": "4.2.2", - "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", - "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", - "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", - "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", - "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", - "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", - "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", - "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", - "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", - "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", - "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", - "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.8.1", - "@emnapi/runtime": "^1.8.1", - "@emnapi/wasi-threads": "^1.1.0", - "@napi-rs/wasm-runtime": "^1.1.1", - "@tybys/wasm-util": "^0.10.1", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", - "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", - "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/vite": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.2.tgz", - "integrity": "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tailwindcss/node": "4.2.2", - "@tailwindcss/oxide": "4.2.2", - "tailwindcss": "4.2.2" - }, - "peerDependencies": { - "vite": "^5.2.0 || ^6 || ^7 || ^8" - } - }, - "node_modules/@types/archiver": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.4.tgz", - "integrity": "sha512-Lj7fLBIMwYFgViVVZHEdExZC3lVYsl+QL0VmdNdIzGZH544jHveYWij6qdnBgJQDnR7pMKliN9z2cPZFEbhyPw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/readdir-glob": "*" - } - }, - "node_modules/@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "node_modules/@types/cors": { - "version": "2.8.19", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", - "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.13", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", - "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", - "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/markdown-it": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", - "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/linkify-it": "^5", - "@types/mdurl": "^2" - } - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.19.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.0.tgz", - "integrity": "sha512-xpr/lmLPQEj+TUnHmR+Ab91/glhJvsqcjB+yY0Ix9GO70H6Lb4FHH5GeqdOE5btAx7eIMwuHkp4H2MSkLcqWbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/readdir-glob": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@types/readdir-glob/-/readdir-glob-1.1.5.tgz", - "integrity": "sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", - "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/whatwg-mimetype": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz", - "integrity": "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.66.0.tgz", - "integrity": "sha512-8TGcH25j9zqJ/IULB/ppyhRvxA8QYfFEZ7nfbg6/BN9spDgb8fPWQXlE5l8TWBL50EtUx007uZ1o9VOwrq2/9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.66.0", - "@typescript-eslint/visitor-keys": "8.66.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.66.0.tgz", - "integrity": "sha512-H6gcYaSDOyvL3AD/jHUtUFo2jqGgn/F6nuyuZSu0QTesxL+cP4dQoIMrODRofuJC09g64+WgZ6tE19Y1N2YIFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.66.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.66.0.tgz", - "integrity": "sha512-dkKR8q+lKciskj1Y3vthHktl+3cMLWGyVUP23bRiPZ5O9BRT++4EqDDV+TVeIKBL1VXVEqrJlz8MYbcnvJcAlg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.66.0", - "eslint-visitor-keys": "^5.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript/typescript-aix-ppc64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", - "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-darwin-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", - "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-darwin-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", - "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-freebsd-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", - "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-freebsd-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", - "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-arm": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", - "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", - "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-loong64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", - "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-mips64el": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", - "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-ppc64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", - "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-riscv64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", - "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-s390x": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", - "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-linux-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", - "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-netbsd-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", - "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-netbsd-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", - "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-openbsd-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", - "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-openbsd-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", - "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-sunos-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", - "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-win32-arm64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", - "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/typescript-win32-x64": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", - "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/@typescript/vfs": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.4.tgz", - "integrity": "sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.3" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/@typescript/vfs/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript/vfs/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", - "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.8.tgz", - "integrity": "sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rolldown/pluginutils": "^1.0.1" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vitest/browser": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.10.tgz", - "integrity": "sha512-UDwuWGwXj646CBx/bQHOaJSX7np0I8JL/UKQYa1e4QrVHH8VdWtx8eaOuf8sy0ShwDgR6NjJAsp5eF6vjF6qng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@blazediff/core": "1.9.1", - "@vitest/mocker": "4.1.10", - "@vitest/utils": "4.1.10", - "magic-string": "^0.30.21", - "pngjs": "^7.0.0", - "sirv": "^3.0.2", - "tinyrainbow": "^3.1.0", - "ws": "^8.19.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "vitest": "4.1.10" - } - }, - "node_modules/@vitest/browser-playwright": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.10.tgz", - "integrity": "sha512-nMoXGEiRpT7m3W7NsbvrM2aKNwiNHZf+zEpUCvMteGjZFvfT96Q9fh7QyB98dvDWXiKvrLxA7bJ1mCOOv+JQPw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/browser": "4.1.10", - "@vitest/mocker": "4.1.10", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "playwright": "*", - "vitest": "4.1.10" - }, - "peerDependenciesMeta": { - "playwright": { - "optional": false - } - } - }, - "node_modules/@vitest/coverage-v8": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.10.tgz", - "integrity": "sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.1.10", - "ast-v8-to-istanbul": "^1.0.0", - "istanbul-lib-coverage": "^3.2.2", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.2.0", - "magicast": "^0.5.2", - "obug": "^2.1.1", - "std-env": "^4.0.0-rc.1", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@vitest/browser": "4.1.10", - "vitest": "4.1.10" - }, - "peerDependenciesMeta": { - "@vitest/browser": { - "optional": true - } - } - }, - "node_modules/@vitest/expect": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz", - "integrity": "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@standard-schema/spec": "^1.1.0", - "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.10", - "@vitest/utils": "4.1.10", - "chai": "^6.2.2", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/mocker": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz", - "integrity": "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "4.1.10", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.21" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/mocker/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/@vitest/pretty-format": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz", - "integrity": "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz", - "integrity": "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "4.1.10", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz", - "integrity": "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.10", - "@vitest/utils": "4.1.10", - "magic-string": "^0.30.21", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz", - "integrity": "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz", - "integrity": "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.10", - "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@volar/language-core": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", - "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/source-map": "2.4.28" - } - }, - "node_modules/@volar/source-map": { - "version": "2.4.28", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", - "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.41.tgz", - "integrity": "sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.8", - "@vue/shared": "3.5.41", - "entities": "^7.0.1", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.41.tgz", - "integrity": "sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.41", - "@vue/shared": "3.5.41" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.41.tgz", - "integrity": "sha512-XJhip7R2wy6vX3knCxdZN4KracFaZUef58s1KYewqluedHIJaPIVfXoYT7MF1F8nCvv6k8bWWxDC8opMkg1VTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.8", - "@vue/compiler-core": "3.5.41", - "@vue/compiler-dom": "3.5.41", - "@vue/compiler-ssr": "3.5.41", - "@vue/shared": "3.5.41", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.19", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.41.tgz", - "integrity": "sha512-U3v5OejKEGqOI0Wy0+Sz7hGuIFZHA4LSXzrNM3IMIeDyJEBBfTpX26n3SDgToRpP2bLc9FfI2j/kSgcJ8Emq5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.41", - "@vue/shared": "3.5.41" - } - }, - "node_modules/@vue/devtools-api": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.2.1.tgz", - "integrity": "sha512-6u4vXBlIBAC1wMplIZgpyPn7uh/s4Bf6F5bMzvLv+EdJ0aHs/+4B7Ygv864EStQSjRbsRzTko/kUG1A1IejQ3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/devtools-kit": "^8.2.1" - } - }, - "node_modules/@vue/devtools-kit": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.2.1.tgz", - "integrity": "sha512-FIGIuq3AWReEpbAHY/cRGeHDfI0qOb8OCQ3YjbEAX04uaxIDbGc9rhkbVcG7rnfHPXE3RsU5KrWOu9V/okd8AQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/devtools-shared": "^8.2.1", - "birpc": "^2.6.1", - "hookable": "^5.5.3", - "perfect-debounce": "^2.0.0" - } - }, - "node_modules/@vue/devtools-kit/node_modules/hookable": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vue/devtools-shared": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.2.1.tgz", - "integrity": "sha512-Fkac7lUdGReh6pVOi3AYPRGe82LQqRmAfThW7RRligOAP0ZA/Z1z9XLHDM9dv34pV2HRc79DK8uKPeG2fLnA/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vue/language-core": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.3.9.tgz", - "integrity": "sha512-in/68oAa4BCtVY6n/nkuhLIkV8DHYd2UivedJ6cMZ6UYtlq9jaoaSNUBHYCVO44z3nKg7MdE5OBoHKt5SxeBKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.28", - "@vue/compiler-dom": "^3.5.0", - "@vue/shared": "^3.5.0", - "alien-signals": "^3.2.1", - "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1", - "picomatch": "^4.0.4" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.41.tgz", - "integrity": "sha512-rznsqKM0np0x18EjzF8x88MpEhdNsffbvFbckLL5+oUKz1BxAImEmO7J1ArRYSyo6aQaVoBDp7jEkT91OOxydA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.41" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.41.tgz", - "integrity": "sha512-Vcry58hiAKwGen9Z1jUZE0feFsNArPCMOImYI8el48A9Idf6DuQYD0U05zZIF2Iad1hGhPSvcbBbAOhNr55fhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.41", - "@vue/shared": "3.5.41" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.41.tgz", - "integrity": "sha512-3vVBahVBS9+U6cmXBLyb8nE6/yYo4J/CGI9eVFs3KiMc0YHuudwKyShTD65jtJy/L9PUUxNAFu4cj4LiJ0UFbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.41", - "@vue/runtime-core": "3.5.41", - "@vue/shared": "3.5.41", - "csstype": "^3.2.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.41.tgz", - "integrity": "sha512-n6hx/pNFfbD6SuyeuMVkvqox8bwf/ET9JlA/kAz/imw8sw++wkqKe2mHX5KutjPpbKE4Z56yTHszoOjGMI9igQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.41", - "@vue/runtime-dom": "3.5.41", - "@vue/shared": "3.5.41" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.41.tgz", - "integrity": "sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vueuse/core": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.4.0.tgz", - "integrity": "sha512-X4WHz1HlCzCBoYXesUkifzzWBAcZgXG8Fi5iNPQg/epdzOB3gu8Fawj3hvuwYR1nGcXGnvxwYYcUC/71++svtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/web-bluetooth": "^0.0.21", - "@vueuse/metadata": "14.4.0", - "@vueuse/shared": "14.4.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vue": "^3.5.0" - } - }, - "node_modules/@vueuse/integrations": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-14.4.0.tgz", - "integrity": "sha512-oJz9qTgczvA7L1nXQFRU7h8tQbOCoiceqvMMhT9XYMyOGTqLJ2rEa09PON+nD2t48sZUfeOmg4eaWJXV4sZb/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vueuse/core": "14.4.0", - "@vueuse/shared": "14.4.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "async-validator": "^4", - "axios": "^1", - "change-case": "^5", - "drauu": "^0.4", - "focus-trap": "^7 || ^8", - "fuse.js": "^7", - "idb-keyval": "^6", - "jwt-decode": "^4", - "nprogress": "^0.2", - "qrcode": "^1.5", - "sortablejs": "^1", - "universal-cookie": "^7 || ^8", - "vue": "^3.5.0" - }, - "peerDependenciesMeta": { - "async-validator": { - "optional": true - }, - "axios": { - "optional": true - }, - "change-case": { - "optional": true - }, - "drauu": { - "optional": true - }, - "focus-trap": { - "optional": true - }, - "fuse.js": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "jwt-decode": { - "optional": true - }, - "nprogress": { - "optional": true - }, - "qrcode": { - "optional": true - }, - "sortablejs": { - "optional": true - }, - "universal-cookie": { - "optional": true - } - } - }, - "node_modules/@vueuse/metadata": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.4.0.tgz", - "integrity": "sha512-swx/255R6JyHZFJhx845iz5CRWDZdCfvkZOpACWc5+c5WHcG24mv8gUT1WIdFQaHt6dq79rvILd9QnCWiyVm9g==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.4.0.tgz", - "integrity": "sha512-JRgY90Sz8DDtPMsaDflvPMp9xYk69JZAmbuDvAquUVXKr2gEjqtzGNTTthLfckH0BzBqvnu31gb4a8TGLRe79g==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vue": "^3.5.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/@yuku-codegen/binding-android-arm64": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-android-arm64/-/binding-android-arm64-0.8.4.tgz", - "integrity": "sha512-rsYkGl2kOkDRsh1mxriYnk1qBS78vjlBJ3+T2XwtwKwqOliy2n+2Ae0EDxJ/uX1DZLm3KkBZarGO5isEnmHchA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@yuku-codegen/binding-darwin-arm64": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-arm64/-/binding-darwin-arm64-0.8.4.tgz", - "integrity": "sha512-tNLKzPF3FYmEcHSYvWp/LEpjHHAtDR13hwo6/gdCkYMi9x59CWn2obczKzWNe7kDor4/1AMZuJDEVRpFkTSefw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@yuku-codegen/binding-darwin-x64": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-x64/-/binding-darwin-x64-0.8.4.tgz", - "integrity": "sha512-tK7LWzXNb5JbZpnoCNHB0nEhPFss/LwwehM6m/f0oYDan+iZgFZXzdoy80JdE7dVxjTZDIhUNPx8X8xbIdaoxA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@yuku-codegen/binding-freebsd-x64": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-freebsd-x64/-/binding-freebsd-x64-0.8.4.tgz", - "integrity": "sha512-5MUV4d7g2p5Hd8GiXW6ynTRgYjm4Dw4eM2gaWRZ4crkGetzNx+HlPxcEfGtVNPqH5Qaa4Z2REtzdsdgvaE6/Ng==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@yuku-codegen/binding-linux-arm-gnu": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.8.4.tgz", - "integrity": "sha512-g6LnHrR0Rfqq5cXs7olwR2+LlVDc876pw7Hh7YXbukVSiBxQkaxqsEO/trO25z2g99zWzgXwoYvQZ1TnwA2wEw==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-codegen/binding-linux-arm-musl": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-musl/-/binding-linux-arm-musl-0.8.4.tgz", - "integrity": "sha512-7XAPHrROPEFuJWXEGZeLZQN4xR8ENQ65+HSCtCHjSzCwGgnX53GUjM9ExVcHopV0a5g4vu57v2wwtyWIM5iNOQ==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-codegen/binding-linux-arm64-gnu": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.8.4.tgz", - "integrity": "sha512-fnBm7NLuuwFXy7F1vRIuyOc+RW9ADUjuCKVGY87Dj8jtr9XgESNrwb+B9VLSFY7nZ0rCdK/Sm1fBqJpI7eLdKQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-codegen/binding-linux-arm64-musl": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.8.4.tgz", - "integrity": "sha512-6vTw4ZHO9nm4SUkw36uG+UE6/qifZ0E8HIef7Mx/U/c2Zxu3JLBfXtU7U/NN2GMkDmcJkgwjXfpQoYw4Ch5Y1w==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-codegen/binding-linux-x64-gnu": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.8.4.tgz", - "integrity": "sha512-+vuC3V3Lw+DB4oJgHV9pVDfQZlsZJnxmbdods7HzxgEALU3P5+czwdAcw3wfh7Ebabt0Ny8eLUb1k9RV5OB/+w==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-codegen/binding-linux-x64-musl": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-musl/-/binding-linux-x64-musl-0.8.4.tgz", - "integrity": "sha512-QH60PE4eZecmgNGa1/T1cKPhrfxt6ANtu4lrQ1FZ50F9b0GS9WjGmIjrfdSUeQa+f2Iqk3oEFSJdgVHBg1KPNg==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-codegen/binding-win32-arm64": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-arm64/-/binding-win32-arm64-0.8.4.tgz", - "integrity": "sha512-6r68c0nKZPIBRXZIBiD7zjlEukBR+xRxpTOVj4n1Fsjcdh4YbbJfjFfmIzdbo9jXR1xL+dPueDVdsRGOUH5MoQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@yuku-codegen/binding-win32-x64": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-x64/-/binding-win32-x64-0.8.4.tgz", - "integrity": "sha512-i+BW77LPjNqe7Apq50J3OeEaVfga3G+eT2bKjb6bj4yO99fil/jnKb4ZDH4JLvby/Q7hRa6VicL2EZ7iS+ifzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@yuku-parser/binding-android-arm64": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-android-arm64/-/binding-android-arm64-0.8.4.tgz", - "integrity": "sha512-+HIMmv08Zrh9ugIAEMnKBMMePOl7CDxrjc8Vui1+GG2TJHM1yI1+3wo1pnXB6Nj2IiHugDkQw8ycUI6SA2EUkQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@yuku-parser/binding-darwin-arm64": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.8.4.tgz", - "integrity": "sha512-Elf/B/2m3OsyvxoQnBk8Dtu+9csHkzBNs5Yv9GbHjT3x0kVKNWjFusyZgm41VwxcPDqdpRi8tWxNX7OqXkmf/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@yuku-parser/binding-darwin-x64": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-x64/-/binding-darwin-x64-0.8.4.tgz", - "integrity": "sha512-CjZuMoXnL5XUkVpDqh4WDPwpAw8CwmtHHnTerGkS45So/sNuwkXdyIAEqqIZfaLopi5W/V9NApAT2md9XizjsQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@yuku-parser/binding-freebsd-x64": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.8.4.tgz", - "integrity": "sha512-ibLKORdz71iI4Vs+fyFgvwQ51P5XcxJIyQLa8cSEWqwptRdo+BTcZHIQEcZnFDPUuvmJ19RRH9CoiJdfhr7pZw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@yuku-parser/binding-linux-arm-gnu": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.8.4.tgz", - "integrity": "sha512-Fo3r5fYhGDcFnl+KN+L9PgtiQPS4AIE1n1mG1o5jZ11p7g5yZ/1EjLFmSHAUsoXreun8KjTsFjEL7P1Sb93PZQ==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-arm-musl": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-musl/-/binding-linux-arm-musl-0.8.4.tgz", - "integrity": "sha512-BEB31vUEgXPWf7WkoMPSzzJhpC/wWCBXyysRCCPsw47BJ/OtbQsvJbxX9fFDuSRLy3kbyIV/WbdUTgbQ9COxiw==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-arm64-gnu": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.8.4.tgz", - "integrity": "sha512-xGLCRcHn9xVz7JVNyyKtiNJSf503qtUmih9XVSsghgzOmiKUMnHObs69OMMwXN3788tg1jsl11fNjjQlB8idMA==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-arm64-musl": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.8.4.tgz", - "integrity": "sha512-3kNRi8NJT2q6FQRVCUFHIQ99+kXdi8cVJEEUi6+xtFqpMgNrZNnbgAj28ILsDC7zmclaU+v47eUCeJoKLSCbww==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-x64-gnu": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.8.4.tgz", - "integrity": "sha512-isi62oMy94Z3OXwGs2l2rkqRiRyqLmfHeTRHpA/uWZbsNhnm7IdVvkF7e7wHNKAtd5jwGzOqYSroxKv2fOm7Cw==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-x64-musl": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.8.4.tgz", - "integrity": "sha512-9RsEw2xYHqU/pjSRBTOupWN3sF8uz9stjJdARfz6o0llvF+yfrj5QHmTiocGGBeAI80fvKmDtr2RIQClUzAPcA==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-win32-arm64": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-arm64/-/binding-win32-arm64-0.8.4.tgz", - "integrity": "sha512-VEZHo9rEGOBKR20sA3vCO00aQvwWND5aLu7YxeX+YupMZJh9hd1f17AbClJN37Q2iL1PCHht+wDTOKX6tZYqXg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@yuku-parser/binding-win32-x64": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-x64/-/binding-win32-x64-0.8.4.tgz", - "integrity": "sha512-PeH3VzN1feGjPtDpVEAqf000fPT+nxtw/696LKp/5Z9RJi/MaXpB636QC+5QtrAPSoEnIkyEe+c+mq2QLZPWBA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@yuku-toolchain/types": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/@yuku-toolchain/types/-/types-0.8.4.tgz", - "integrity": "sha512-p7JE8flrj7ijZ/qLjHi4UwKqMarMD6zumbKXhrjp2I2iLJOuTYiQyci2U36VlXcUlNyzsY7E/mLnKCHotbzJVw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@zackad/prettier-plugin-twig": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@zackad/prettier-plugin-twig/-/prettier-plugin-twig-0.16.3.tgz", - "integrity": "sha512-CMacuv9pgdgfxVxWa2VX3TmOvXERgPsD8LWuBo9xKeVzRsVQzNCoxsH/7eELGogiYz2E44ete4vLL2tQy6DhIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.9", - "he": "^1.2.0", - "lodash": "^4.17.21", - "prettier": "^3.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/zackad/prettier-plugin-twig?sponsor=1" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", - "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", - "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/aggregate-error/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/alien-signals": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.2.1.tgz", - "integrity": "sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-escapes": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", - "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ansis": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.3.1.tgz", - "integrity": "sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/archiver": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", - "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.4", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/archiver-utils/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/archiver-utils/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/ast-v8-to-istanbul": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.5.tgz", - "integrity": "sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.31", - "estree-walker": "^3.0.3", - "js-tokens": "^10.0.0" - } - }, - "node_modules/ast-v8-to-istanbul/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", - "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true, - "license": "MIT" - }, - "node_modules/async-each-series": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", - "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.5.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.4.tgz", - "integrity": "sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.28.6", - "caniuse-lite": "^1.0.30001806", - "fraction.js": "^5.3.4", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/baseline-browser-mapping": { - "version": "2.11.13", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.13.tgz", - "integrity": "sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true, - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/birpc": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", - "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", - "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-sync": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.4.tgz", - "integrity": "sha512-mcYOIy4BW6sWSEnTSBjQwWsnbx2btZX78ajTTjdNfyC/EqQVcIe0nQR6894RNAMtvlfAnLaH9L2ka97zpvgenA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "browser-sync-client": "^3.0.4", - "browser-sync-ui": "^3.0.4", - "bs-recipes": "1.3.4", - "chalk": "4.1.2", - "chokidar": "^3.5.1", - "connect": "3.6.6", - "connect-history-api-fallback": "^1", - "dev-ip": "^1.0.1", - "easy-extender": "^2.3.4", - "eazy-logger": "^4.1.0", - "etag": "^1.8.1", - "fresh": "^0.5.2", - "fs-extra": "3.0.1", - "http-proxy": "^1.18.1", - "immutable": "^3", - "micromatch": "^4.0.8", - "opn": "5.3.0", - "portscanner": "2.2.0", - "raw-body": "^2.3.2", - "resp-modifier": "6.0.2", - "rx": "4.1.0", - "send": "^0.19.0", - "serve-index": "^1.9.1", - "serve-static": "^1.16.2", - "server-destroy": "1.0.1", - "socket.io": "^4.4.1", - "ua-parser-js": "^1.0.33", - "yargs": "^17.3.1" - }, - "bin": { - "browser-sync": "dist/bin.js" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/browser-sync-client": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.4.tgz", - "integrity": "sha512-+ew5ubXzGRKVjquBL3u6najS40TG7GxCdyBll0qSRc/n+JRV9gb/yDdRL1IAgRHqjnJTdqeBKKIQabjvjRSYRQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "etag": "1.8.1", - "fresh": "0.5.2", - "mitt": "^1.1.3" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/browser-sync-ui": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.4.tgz", - "integrity": "sha512-5Po3YARCZ/8yQHFzvrSjn8+hBUF7ZWac39SHsy8Tls+7tE62iq6pYWxpVU6aOOMAGD21RwFQhQeqmJPf70kHEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async-each-series": "0.1.1", - "chalk": "4.1.2", - "connect-history-api-fallback": "^1", - "immutable": "^3", - "server-destroy": "1.0.1", - "socket.io-client": "^4.4.1", - "stream-throttle": "^0.1.3" - } - }, - "node_modules/browser-sync-ui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/browser-sync-ui/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/browser-sync/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/browser-sync/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/browserslist": { - "version": "4.28.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", - "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.11.12", - "caniuse-lite": "^1.0.30001809", - "electron-to-chromium": "^1.5.402", - "node-releases": "^2.0.53", - "update-browserslist-db": "^1.3.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-recipes": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", - "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==", - "dev": true, - "license": "ISC" - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-5.3.0.tgz", - "integrity": "sha512-hMQUl2bUFG339QygPM97E+mc8OY1IAchORZxm4a/frcYwKzozMzRVDBwHW0NjOqGElLm2O37AVQE8ikxlZHrMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.5.0.tgz", - "integrity": "sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cacheable/memory": "^2.2.0", - "@cacheable/utils": "^2.5.0", - "hookified": "^1.15.0", - "keyv": "^5.6.0", - "qified": "^0.10.1" - } - }, - "node_modules/cacheable/node_modules/keyv": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", - "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@keyv/serialize": "^1.1.1" - } - }, - "node_modules/call-bind": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", - "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "get-intrinsic": "^1.3.0", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001809", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", - "integrity": "sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chai": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/change-case": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", - "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", - "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/clean-regexp/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clone-deep/node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/codeclimate-types": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/codeclimate-types/-/codeclimate-types-0.3.1.tgz", - "integrity": "sha512-JCAaPG3tAYlVQQE9NP5kgsXBxPfSmflUI7manmbllUd9TN+1p/SXZkOsMAlPXCp3gcqNVL0itxMjcgKF0nBmJg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/remcohaszing" - } - }, - "node_modules/collect.js": { - "version": "4.36.1", - "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.36.1.tgz", - "integrity": "sha512-jd97xWPKgHn6uvK31V6zcyPd40lUJd7gpYxbN2VOVxGWO4tyvS9Li4EpsFjXepGTo2tYcOTC4a8YsbQXMJ4XUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/colorjs.io": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", - "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", - "dev": true, - "license": "MIT" - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/common-dir": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/common-dir/-/common-dir-3.0.1.tgz", - "integrity": "sha512-yEhqFGiuBGkV2vsaEtGAv/CkP3Ff1FF8X69nm5P35Sv+carPQG5Nw9KteaHcMrHsxxF5tED5URg958U3lPF5Eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "common-sequence": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/common-sequence": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-2.0.2.tgz", - "integrity": "sha512-jAg09gkdkrDO9EWTdXfv80WWH3yeZl5oT69fGfedBNS9pXUKYInVJ1bJ+/ht2+Moeei48TmSbQDYMc8EOx9G0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/compress-commons": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", - "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/core-js-compat": { - "version": "3.50.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.50.0.tgz", - "integrity": "sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.28.7" - }, - "engines": { - "node": ">=6.4.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/corser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/cosmiconfig": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz", - "integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", - "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-blank-pseudo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", - "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.4.0.tgz", - "integrity": "sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-functions-list": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.3.3.tgz", - "integrity": "sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/css-has-pseudo": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz", - "integrity": "sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-7.0.4.tgz", - "integrity": "sha512-2iACis+P8qdLj1tHcShtztkGhCNIRUajJj7iX0IM9a5FA0wXGwjV8Nf6+HsBjBfb4LO8TTAVoetBbM54V6f3+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "cssnano": "^7.0.4", - "jest-worker": "^30.0.5", - "postcss": "^8.4.40", - "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", - "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/css-select/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/css-select/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/css-select/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/css-tree": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", - "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.27.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssdb": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.9.0.tgz", - "integrity": "sha512-J8jOU/hLjaXcO1LldOLraJSQpfLXRKof0I7mtbRyOy2AAXgqst0x9rlgi2qXeD6d0ou3ZLqcPAMqYVbpCbrxEw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ], - "license": "MIT-0" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.1.9.tgz", - "integrity": "sha512-uPR75+5Dk/WJ/YSPR1/YDHdwMM9c5FsaARljfKWgeCKLKOtJ0we21xy/RcCjn53fZnD/f6yYEIZ8pu18+GnbNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^7.0.17", - "lilconfig": "^3.1.3" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } - }, - "node_modules/cssnano-preset-default": { - "version": "7.0.17", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.17.tgz", - "integrity": "sha512-11qO63A+czwguQFJCaTdICvbaxn0pJzz/XghLlv+OT7WyToDxAMR0Xb3/26/l0y0hQJywwNbj/SLSQlGBHE1OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.28.2", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^5.0.3", - "postcss-calc": "^10.1.1", - "postcss-colormin": "^7.0.10", - "postcss-convert-values": "^7.0.12", - "postcss-discard-comments": "^7.0.8", - "postcss-discard-duplicates": "^7.0.4", - "postcss-discard-empty": "^7.0.3", - "postcss-discard-overridden": "^7.0.3", - "postcss-merge-longhand": "^7.0.7", - "postcss-merge-rules": "^7.0.11", - "postcss-minify-font-values": "^7.0.3", - "postcss-minify-gradients": "^7.0.5", - "postcss-minify-params": "^7.0.9", - "postcss-minify-selectors": "^7.1.2", - "postcss-normalize-charset": "^7.0.3", - "postcss-normalize-display-values": "^7.0.3", - "postcss-normalize-positions": "^7.0.4", - "postcss-normalize-repeat-style": "^7.0.4", - "postcss-normalize-string": "^7.0.3", - "postcss-normalize-timing-functions": "^7.0.3", - "postcss-normalize-unicode": "^7.0.9", - "postcss-normalize-url": "^7.0.3", - "postcss-normalize-whitespace": "^7.0.3", - "postcss-ordered-values": "^7.0.4", - "postcss-reduce-initial": "^7.0.9", - "postcss-reduce-transforms": "^7.0.3", - "postcss-svgo": "^7.1.3", - "postcss-unique-selectors": "^7.0.7" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } - }, - "node_modules/cssnano-utils": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.3.tgz", - "integrity": "sha512-ynIREMICLxkxm7e9bCR9sh75s4Q5drICi0ua1yxo5jH2XPBqSKkl4dOh4EbFqtUmnTMhRffHgYL0EKKkMjtJTg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", - "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defu": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", - "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dev": true, - "license": "MIT", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/dev-ip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", - "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", - "dev": true, - "bin": { - "dev-ip": "lib/dev-ip.js" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/diff": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", - "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.3.tgz", - "integrity": "sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dts-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dts-resolver/-/dts-resolver-3.0.0.tgz", - "integrity": "sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - }, - "peerDependencies": { - "oxc-resolver": ">=11.0.0" - }, - "peerDependenciesMeta": { - "oxc-resolver": { - "optional": true - } - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true, - "license": "MIT" - }, - "node_modules/easy-extender": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", - "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", - "dev": true, - "dependencies": { - "lodash": "^4.17.10" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/eazy-logger": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.1.0.tgz", - "integrity": "sha512-+mn7lRm+Zf1UT/YaH8WXtpU6PIV2iOjzP6jgKoiaq/VNrjYKp+OHZGe2znaLgDeFkw8cL9ffuaUm+nNnzcYyGw==", - "dev": true, - "dependencies": { - "chalk": "4.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eazy-logger/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eazy-logger/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.403", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.403.tgz", - "integrity": "sha512-MQsYmdaLzvaCX5j+ZZBr5Fm6uCCnPQcRtlvmvRlWqrXy+BH2O4ffXIAScF+JQznQWB9brWp4lSD9Z4yNmaf2BA==", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/empathic": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.1.tgz", - "integrity": "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/engine.io": { - "version": "6.6.9", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.9.tgz", - "integrity": "sha512-clKkw4C7nJ22mGgoVcCg6V/W/TxdNyIOTr89k2ONZu81qqkddPFDF0LXcbAwhzPD8DjkiRCjzuiO6Y+fkpD4vg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "@types/ws": "^8.5.12", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.7.2", - "cors": "~2.8.5", - "debug": "~4.4.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.21.0" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/engine.io-client": { - "version": "6.6.6", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.6.tgz", - "integrity": "sha512-iY6QdftLQ9pyiPoX082bpf/u1UewnOaJrtJIF9T0++QB34lZrj0uP+Q/bj8AlUsAxqhnkTV2BS8SBZSxOmoV5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.4.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.21.0", - "xmlhttprequest-ssl": "~2.1.1" - } - }, - "node_modules/engine.io-client/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/engine.io-client/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/engine.io-parser": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", - "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/engine.io/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/enhanced-resolve": { - "version": "5.24.5", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", - "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/error-ex": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", - "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", - "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.0.tgz", - "integrity": "sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.0", - "@esbuild/android-arm": "0.27.0", - "@esbuild/android-arm64": "0.27.0", - "@esbuild/android-x64": "0.27.0", - "@esbuild/darwin-arm64": "0.27.0", - "@esbuild/darwin-x64": "0.27.0", - "@esbuild/freebsd-arm64": "0.27.0", - "@esbuild/freebsd-x64": "0.27.0", - "@esbuild/linux-arm": "0.27.0", - "@esbuild/linux-arm64": "0.27.0", - "@esbuild/linux-ia32": "0.27.0", - "@esbuild/linux-loong64": "0.27.0", - "@esbuild/linux-mips64el": "0.27.0", - "@esbuild/linux-ppc64": "0.27.0", - "@esbuild/linux-riscv64": "0.27.0", - "@esbuild/linux-s390x": "0.27.0", - "@esbuild/linux-x64": "0.27.0", - "@esbuild/netbsd-arm64": "0.27.0", - "@esbuild/netbsd-x64": "0.27.0", - "@esbuild/openbsd-arm64": "0.27.0", - "@esbuild/openbsd-x64": "0.27.0", - "@esbuild/openharmony-arm64": "0.27.0", - "@esbuild/sunos-x64": "0.27.0", - "@esbuild/win32-arm64": "0.27.0", - "@esbuild/win32-ia32": "0.27.0", - "@esbuild/win32-x64": "0.27.0" - } - }, - "node_modules/esbuild-loader": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.5.0.tgz", - "integrity": "sha512-rVYe97IN1+VoealVHQ3STEPbfTm+vvPk7AZPrL53Pt6JUGBhHTnIqyaow7EveMFlmQ2A1bLp7q19sP4PppaCDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.28.1", - "get-tsconfig": "^4.10.1", - "loader-utils": "^2.0.4", - "webpack-sources": "^3.3.4" - }, - "funding": { - "url": "https://github.com/privatenumber/esbuild-loader?sponsor=1" - }, - "peerDependencies": { - "webpack": "^4.40.0 || ^5.0.0" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/aix-ppc64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", - "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/android-arm": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", - "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/android-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", - "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/android-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", - "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/darwin-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", - "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/darwin-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", - "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", - "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/freebsd-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", - "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-arm": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", - "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", - "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-ia32": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", - "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-loong64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", - "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-mips64el": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", - "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-ppc64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", - "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-riscv64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", - "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-s390x": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", - "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", - "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", - "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/netbsd-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", - "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", - "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/openbsd-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", - "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", - "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/sunos-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", - "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/win32-arm64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", - "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/win32-ia32": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", - "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/@esbuild/win32-x64": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", - "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild-loader/node_modules/esbuild": { - "version": "0.28.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", - "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.2", - "@esbuild/android-arm": "0.28.2", - "@esbuild/android-arm64": "0.28.2", - "@esbuild/android-x64": "0.28.2", - "@esbuild/darwin-arm64": "0.28.2", - "@esbuild/darwin-x64": "0.28.2", - "@esbuild/freebsd-arm64": "0.28.2", - "@esbuild/freebsd-x64": "0.28.2", - "@esbuild/linux-arm": "0.28.2", - "@esbuild/linux-arm64": "0.28.2", - "@esbuild/linux-ia32": "0.28.2", - "@esbuild/linux-loong64": "0.28.2", - "@esbuild/linux-mips64el": "0.28.2", - "@esbuild/linux-ppc64": "0.28.2", - "@esbuild/linux-riscv64": "0.28.2", - "@esbuild/linux-s390x": "0.28.2", - "@esbuild/linux-x64": "0.28.2", - "@esbuild/netbsd-arm64": "0.28.2", - "@esbuild/netbsd-x64": "0.28.2", - "@esbuild/openbsd-arm64": "0.28.2", - "@esbuild/openbsd-x64": "0.28.2", - "@esbuild/openharmony-arm64": "0.28.2", - "@esbuild/sunos-x64": "0.28.2", - "@esbuild/win32-arm64": "0.28.2", - "@esbuild/win32-ia32": "0.28.2", - "@esbuild/win32-x64": "0.28.2" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.34.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz", - "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.34.0", - "@eslint/plugin-kit": "^0.3.5", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-config-prettier": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", - "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-formatter-codeclimate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/eslint-formatter-codeclimate/-/eslint-formatter-codeclimate-1.0.2.tgz", - "integrity": "sha512-9ygAJag38O/oITwzPnvNXz8vuke6JuX1qeSbch+2m5ZQT/1exCyHkrymfJZpR5GZuYd17Khb1SOAsehSMV/W0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "codeclimate-types": "^0.3.0" - }, - "funding": { - "url": "https://github.com/sponsors/remcohaszing" - }, - "peerDependencies": { - "eslint": "^9.0.0" - } - }, - "node_modules/eslint-formatter-gitlab": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/eslint-formatter-gitlab/-/eslint-formatter-gitlab-6.0.1.tgz", - "integrity": "sha512-GjAdu74EPUQMQjldx4wu/P0CgTY7nk9uJ4q2ZW6TkXH+rK9LR2q3dV+cWTaQKMaCcosn+XU8nJOE8QQe8czHZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-formatter-codeclimate": "^1.0.0", - "yaml": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/remcohaszing" - }, - "peerDependencies": { - "eslint": ">=9" - } - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "51.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-51.4.1.tgz", - "integrity": "sha512-y4CA9OkachG8v5nAtrwvcvjIbdcKgSyS6U//IfQr4FZFFyeBFwZFf/tfSsMr46mWDJgidZjBTqoCRlXywfFBMg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@es-joy/jsdoccomment": "~0.52.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.4.1", - "escape-string-regexp": "^4.0.0", - "espree": "^10.4.0", - "esquery": "^1.6.0", - "parse-imports-exports": "^0.2.4", - "semver": "^7.7.2", - "spdx-expression-parse": "^4.0.0" - }, - "engines": { - "node": ">=20.11.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz", - "integrity": "sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.1", - "synckit": "^0.11.13" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-unicorn": { - "version": "59.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-59.0.1.tgz", - "integrity": "sha512-EtNXYuWPUmkgSU2E7Ttn57LbRREQesIP1BiLn7OZLKodopKfDXfBUkC/0j6mpw2JExwf43Uf3qLSvrSvppgy8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "@eslint-community/eslint-utils": "^4.5.1", - "@eslint/plugin-kit": "^0.2.7", - "ci-info": "^4.2.0", - "clean-regexp": "^1.0.0", - "core-js-compat": "^3.41.0", - "esquery": "^1.6.0", - "find-up-simple": "^1.0.1", - "globals": "^16.0.0", - "indent-string": "^5.0.0", - "is-builtin-module": "^5.0.0", - "jsesc": "^3.1.0", - "pluralize": "^8.0.0", - "regexp-tree": "^0.1.27", - "regjsparser": "^0.12.0", - "semver": "^7.7.1", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": "^18.20.0 || ^20.10.0 || >=21.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" - }, - "peerDependencies": { - "eslint": ">=9.22.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/eslint-plugin-unicorn/node_modules/@eslint/plugin-kit": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", - "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.13.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/@eslint/js": { - "version": "9.34.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz", - "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/expect-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", - "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", - "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/filemanager-webpack-plugin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/filemanager-webpack-plugin/-/filemanager-webpack-plugin-8.0.0.tgz", - "integrity": "sha512-TYwu62wgq2O2c3K80Sfj8vEys/tP5wdgYoySHgUwWoc2hPbQY3Mq3ahcAW634JvHCTcSV7IAfRxMI3wTXRt2Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/archiver": "^5.3.1", - "archiver": "^5.3.1", - "del": "^6.1.1", - "fast-glob": "^3.2.12", - "fs-extra": "^10.1.0", - "is-glob": "^4.0.3", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/filemanager-webpack-plugin/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/filemanager-webpack-plugin/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/filemanager-webpack-plugin/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.2.0", - "path-exists": "^5.0.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up-simple": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", - "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "micromatch": "^4.0.2" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", - "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", - "dev": true, - "license": "ISC" - }, - "node_modules/floating-vue": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/floating-vue/-/floating-vue-5.2.2.tgz", - "integrity": "sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "~1.1.1", - "vue-resize": "^2.0.0-alpha.1" - }, - "peerDependencies": { - "@nuxt/kit": "^3.2.0", - "vue": "^3.2.0" - }, - "peerDependenciesMeta": { - "@nuxt/kit": { - "optional": true - } - } - }, - "node_modules/focus-trap": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz", - "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tabbable": "^6.4.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", - "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreachasync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", - "integrity": "sha512-J+ler7Ta54FwwNcx6wQRDhTIbNeyDcARMkOcguEqnEdtm0jKvN3Li3PDAb2Du3ubJYEWfYL83XMROXdsXAXycw==", - "dev": true, - "license": "Apache2" - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/fraction.js": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", - "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/front-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", - "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1" - } - }, - "node_modules/front-matter-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/front-matter-loader/-/front-matter-loader-2.0.0.tgz", - "integrity": "sha512-zoiZa80a7xfaRJP0AvLBPpVL7P+wYXoEoqoQhmhZoOGjOlx01EkvyULhG/qFJ5aB08V7EDq19vcGlzreHC/i1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "front-matter": "^4.0.0" - } - }, - "node_modules/front-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/front-matter/node_modules/js-yaml": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.1.tgz", - "integrity": "sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", - "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.2.0.tgz", - "integrity": "sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-tsconfig": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.1.tgz", - "integrity": "sha512-Dz/6HxkrxgNehhxLVeyv8sad9UzF2xBVeaKBQNDfJ5XiSXmp2gTR0eO0RWiT2NCKS5aGP9jjkOMggTN90qU50A==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", - "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regex.js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", - "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", - "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true, - "license": "MIT" - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.1.tgz", - "integrity": "sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/happy-dom": { - "version": "20.8.8", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.8.8.tgz", - "integrity": "sha512-5/F8wxkNxYtsN0bXfMwIyNLZ9WYsoOYPbmoluqVJqv8KBUbcyKZawJ7uYK4WTX8IHBLYv+VXIwfeNDPy1oKMwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": ">=20.0.0", - "@types/whatwg-mimetype": "^3.0.2", - "@types/ws": "^8.18.1", - "entities": "^7.0.1", - "whatwg-mimetype": "^3.0.0", - "ws": "^8.18.3" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hashery": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", - "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "hookified": "^1.15.0" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/hasown": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", - "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-sanitize": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-5.0.2.tgz", - "integrity": "sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "unist-util-position": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-html": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hey-listen": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", - "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==", - "license": "MIT" - }, - "node_modules/hookable": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz", - "integrity": "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/hookified": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", - "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/hot-accept-webpack-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hot-accept-webpack-plugin/-/hot-accept-webpack-plugin-4.0.2.tgz", - "integrity": "sha512-j3Nbd7zGt8Az9cy+g9cIqCEIxlrd+v1Vjrhe3uoRTZt9/LMGbgtmeNjRbXQzvibUljIGbYS5lALIes0sIBJRvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "modify-source-webpack-plugin": "4.0.1" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-entities": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", - "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", - "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/html-loader": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.1.0.tgz", - "integrity": "sha512-Jb3xwDbsm0W3qlXrCZwcYqYGnYz55hb6aoKQTlzyZPXsPpi6tHXzAfqalecglMQgNvtEfxrCQPaKT90Irt5XDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "html-minifier-terser": "^7.2.0", - "parse5": "^7.1.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/html-minifier-terser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "~5.3.2", - "commander": "^10.0.0", - "entities": "^4.4.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.15.1" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/html-minifier-terser/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/html-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/html-styles/-/html-styles-1.0.0.tgz", - "integrity": "sha512-cDl5dcj73oI4Hy0DSUNh54CAwslNLJRCCoO+RNkVo+sBrjA/0+7E/xzvj3zH/GxbbBLGJhE0hBe1eg+0FINC6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-harddisk-plugin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-webpack-harddisk-plugin/-/html-webpack-harddisk-plugin-2.0.0.tgz", - "integrity": "sha512-fWKH72FyaQ5K/j+kYy6LnQsQucSDnsEkghmB6g29TtpJ4sxHYFduEeUV1hfDqyDpCRW+bP7yacjQ+1ikeIDqeg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13" - }, - "peerDependencies": { - "html-webpack-plugin": "^5.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.8.tgz", - "integrity": "sha512-MZmKQcTnhEh1SPSyMiEytIeDZDUoBZVorNHivQGXMASHf/BSGGOrKa2xQ5bGx3TCe1n109ecCt+cpww7wwWhKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x || 2.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/html-webpack-plugin/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-server": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", - "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "basic-auth": "^2.0.1", - "chalk": "^4.1.2", - "corser": "^2.0.1", - "he": "^1.2.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy": "^1.18.1", - "mime": "^1.6.0", - "minimist": "^1.2.6", - "opener": "^1.5.1", - "portfinder": "^1.0.28", - "secure-compare": "3.0.1", - "union": "~0.5.0", - "url-join": "^4.0.1" - }, - "bin": { - "http-server": "bin/http-server" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/http-server/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/http-server/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/hyperdyperid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", - "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.18" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immutable": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.3.tgz", - "integrity": "sha512-AUY/VyX0E5XlibOmWt10uabJzam1zlYjwiEgQSDc5+UIkFNaF9WM0JxXKaNMGf+F/ffUF+7kRKXM9A7C0xXqMg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-without-cache": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/import-without-cache/-/import-without-cache-0.4.0.tgz", - "integrity": "sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^22.18.0 || >=24.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/irregular-plurals": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", - "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-builtin-module": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", - "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-modules": "^5.0.0" - }, - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-like": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lodash.isfinite": "^3.3.2" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-reports/node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/jackspeak": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", - "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^9.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-diff": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.4.1.tgz", - "integrity": "sha512-CRpFK0RtLriVDGcPPAnR6HMVI8bSR2jnUIgralhauzYQZIb4RH9AtEInTuQr65LmmGggGcRT6HIASxwqsVsmlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/diff-sequences": "30.4.0", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.4.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-regex-util": { - "version": "30.4.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", - "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-util": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", - "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.4.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.3" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-worker": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.4.1.tgz", - "integrity": "sha512-SHynN/q/QD++iNyvMdy+WMmbCGk8jIsNcRxycXbWubSOhvo6T+j2afcfUSl+3hYsiBebOTo0cT7c2H7CXugu1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.4.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.1.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", - "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", - "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/nodeca" - } - ], - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js-yaml-loader": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/js-yaml-loader/-/js-yaml-loader-1.2.2.tgz", - "integrity": "sha512-H+NeuNrG6uOs/WMjna2SjkaCw13rMWiT/D7l9+9x5n8aq88BDsh2sRmdfxckWPIHtViYHWRG6XiCKYvS1dfyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1", - "loader-utils": "^1.2.3", - "un-eval": "^1.2.0" - } - }, - "node_modules/js-yaml-loader/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/js-yaml-loader/node_modules/js-yaml": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.1.tgz", - "integrity": "sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js-yaml-loader/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/js-yaml-loader/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", - "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", - "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "isarray": "^2.0.5", - "jsonify": "^0.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", - "dev": true, - "license": "Public Domain", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/known-css-properties": { - "version": "0.37.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", - "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lightningcss": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", - "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.33.0", - "lightningcss-darwin-arm64": "1.33.0", - "lightningcss-darwin-x64": "1.33.0", - "lightningcss-freebsd-x64": "1.33.0", - "lightningcss-linux-arm-gnueabihf": "1.33.0", - "lightningcss-linux-arm64-gnu": "1.33.0", - "lightningcss-linux-arm64-musl": "1.33.0", - "lightningcss-linux-x64-gnu": "1.33.0", - "lightningcss-linux-x64-musl": "1.33.0", - "lightningcss-win32-arm64-msvc": "1.33.0", - "lightningcss-win32-x64-msvc": "1.33.0" - } - }, - "node_modules/lightningcss-android-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", - "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", - "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", - "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", - "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", - "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", - "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", - "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", - "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", - "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", - "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", - "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/limiter": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", - "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", - "dev": true - }, - "node_modules/line-column": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", - "integrity": "sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "^1.0.0", - "isobject": "^2.0.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/linkify-it": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz", - "integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/markdown-it" - } - ], - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/loader-utils-webpack-v4": { - "name": "loader-utils", - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/locutus": { - "version": "2.0.39", - "resolved": "https://registry.npmjs.org/locutus/-/locutus-2.0.39.tgz", - "integrity": "sha512-v2iub44UtGpbIv+pFkkYhZ+JsbIM0bJsQcQ1+VayUNGVA/YhM8+CkBiRACcpuuE9Q0xI1pgNzGNwzZDCp1MCww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10", - "yarn": ">= 1" - } - }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isfinite": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", - "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-unicode-supported": "^2.0.0", - "yoctocolors": "^2.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "11.5.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", - "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "dev": true, - "license": "MIT", - "bin": { - "lz-string": "bin/bin.js" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/magicast": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.4.tgz", - "integrity": "sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7", - "source-map-js": "^1.2.1" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/markdown-it": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.3.0.tgz", - "integrity": "sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/markdown-it" - } - ], - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.5.0", - "linkify-it": "^5.0.2", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "node_modules/markdown-it/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/markdown-title": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/markdown-title/-/markdown-title-1.0.2.tgz", - "integrity": "sha512-MqIQVVkz+uGEHi3TsHx/czcxxCbRIL7sv5K5DnYw/tI+apY54IbPefV/cmgxp6LoJSEx/TqcHdLs/298afG5QQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", - "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "escape-string-regexp": "^5.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", - "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.27.1", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", - "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/mdurl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz", - "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==", - "dev": true, - "license": "MIT" - }, - "node_modules/memfs": { - "version": "4.68.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.68.0.tgz", - "integrity": "sha512-qlU8XrIfXUuZcmXk/GODL47KXXnhSbbaWtW5z+L7cLFfIQbgAOWzL5lqUYn39kfJh+BHLaD/siaM94/UTweGow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/fs-core": "4.68.0", - "@jsonjoy.com/fs-fsa": "4.68.0", - "@jsonjoy.com/fs-node": "4.68.0", - "@jsonjoy.com/fs-node-builtins": "4.68.0", - "@jsonjoy.com/fs-node-to-fsa": "4.68.0", - "@jsonjoy.com/fs-node-utils": "4.68.0", - "@jsonjoy.com/fs-print": "4.68.0", - "@jsonjoy.com/fs-snapshot": "4.68.0", - "@jsonjoy.com/json-pack": "^1.11.0", - "@jsonjoy.com/util": "^1.9.0", - "glob-to-regex.js": "^1.0.1", - "thingies": "^2.5.0", - "tree-dump": "^1.0.3", - "tslib": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - } - }, - "node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-frontmatter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "fault": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/micromark/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/millify": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/millify/-/millify-6.1.0.tgz", - "integrity": "sha512-H/E3J6t+DQs/F2YgfDhxUVZz/dF8JXPPKTLHL/yHCcLZLtCXJDUaqvhJXQwqOVBvbyNn4T0WjLpIHd7PAw7fBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "yargs": "^17.0.1" - }, - "bin": { - "millify": "bin/millify" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", - "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.8" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minimizer-webpack-plugin": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz", - "integrity": "sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@minify-html/node": { - "optional": true - }, - "@swc/core": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "@swc/html": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "cssnano": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "html-minifier-terser": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "postcss": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/minimizer-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/minimizer-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minisearch": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", - "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", - "dev": true, - "license": "MIT" - }, - "node_modules/mitt": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", - "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", - "dev": true, - "license": "MIT" - }, - "node_modules/modify-source-webpack-plugin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/modify-source-webpack-plugin/-/modify-source-webpack-plugin-4.0.1.tgz", - "integrity": "sha512-PhNUlSXYra6s1mCyVZsLif3YVlEzVeCeJLPtWAlZ6qQ49gRxsBNYEYjx/0J4O3YvDfNoxj8Z08LQqSHXbrHbXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils-webpack-v4": "npm:loader-utils@^2.0.4", - "schema-utils": "^4.0.0" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - } - }, - "node_modules/morphdom": { - "version": "2.7.8", - "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.8.tgz", - "integrity": "sha512-D/fR4xgGUyVRbdMGU6Nejea1RFzYxYtyurG4Fbv2Fi/daKlWKuXGLOdXtl+3eIwL110cI2hz1ZojGICjjFLgTg==", - "license": "MIT" - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/muggle-string": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.18", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", - "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/node-releases": { - "version": "2.0.53", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.53.tgz", - "integrity": "sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/obug": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", - "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", - "dev": true, - "funding": [ - "https://github.com/sponsors/sxzz", - "https://opencollective.com/debug" - ], - "license": "MIT", - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/ohash": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", - "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/oniguruma-parser": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", - "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", - "dev": true, - "license": "MIT" - }, - "node_modules/oniguruma-to-es": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", - "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "oniguruma-parser": "^0.12.2", - "regex": "^6.1.0", - "regex-recursion": "^6.0.2" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/opn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/oxfmt": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.62.0.tgz", - "integrity": "sha512-vxgGHTmnDU9j4CX7dDBLzxgmHxfda/yPcgJkGCMUSCwRmz+euo/V08xXLNgXTeqAB9Fhf3Pe2nO1RNKLCVgphQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinypool": "2.1.0" - }, - "bin": { - "oxfmt": "bin/oxfmt" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/sponsors/Boshen" - }, - "optionalDependencies": { - "@oxfmt/binding-android-arm-eabi": "0.62.0", - "@oxfmt/binding-android-arm64": "0.62.0", - "@oxfmt/binding-darwin-arm64": "0.62.0", - "@oxfmt/binding-darwin-x64": "0.62.0", - "@oxfmt/binding-freebsd-x64": "0.62.0", - "@oxfmt/binding-linux-arm-gnueabihf": "0.62.0", - "@oxfmt/binding-linux-arm-musleabihf": "0.62.0", - "@oxfmt/binding-linux-arm64-gnu": "0.62.0", - "@oxfmt/binding-linux-arm64-musl": "0.62.0", - "@oxfmt/binding-linux-ppc64-gnu": "0.62.0", - "@oxfmt/binding-linux-riscv64-gnu": "0.62.0", - "@oxfmt/binding-linux-riscv64-musl": "0.62.0", - "@oxfmt/binding-linux-s390x-gnu": "0.62.0", - "@oxfmt/binding-linux-x64-gnu": "0.62.0", - "@oxfmt/binding-linux-x64-musl": "0.62.0", - "@oxfmt/binding-openharmony-arm64": "0.62.0", - "@oxfmt/binding-win32-arm64-msvc": "0.62.0", - "@oxfmt/binding-win32-ia32-msvc": "0.62.0", - "@oxfmt/binding-win32-x64-msvc": "0.62.0" - }, - "peerDependencies": { - "svelte": "^5.0.0", - "vite-plus": "*" - }, - "peerDependenciesMeta": { - "svelte": { - "optional": true - }, - "vite-plus": { - "optional": true - } - } - }, - "node_modules/oxlint": { - "version": "1.77.0", - "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.77.0.tgz", - "integrity": "sha512-qnGh8XJHaQ0dprrDXNQZgS0FgjI6v+V3+X8DwmaV++5Aamy6jGKfDdQ1TUvhUxtmKFAbEf4/WeO5QZX+5WSngg==", - "dev": true, - "license": "MIT", - "bin": { - "oxlint": "bin/oxlint" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/sponsors/Boshen" - }, - "optionalDependencies": { - "@oxlint/binding-android-arm-eabi": "1.77.0", - "@oxlint/binding-android-arm64": "1.77.0", - "@oxlint/binding-darwin-arm64": "1.77.0", - "@oxlint/binding-darwin-x64": "1.77.0", - "@oxlint/binding-freebsd-x64": "1.77.0", - "@oxlint/binding-linux-arm-gnueabihf": "1.77.0", - "@oxlint/binding-linux-arm-musleabihf": "1.77.0", - "@oxlint/binding-linux-arm64-gnu": "1.77.0", - "@oxlint/binding-linux-arm64-musl": "1.77.0", - "@oxlint/binding-linux-ppc64-gnu": "1.77.0", - "@oxlint/binding-linux-riscv64-gnu": "1.77.0", - "@oxlint/binding-linux-riscv64-musl": "1.77.0", - "@oxlint/binding-linux-s390x-gnu": "1.77.0", - "@oxlint/binding-linux-x64-gnu": "1.77.0", - "@oxlint/binding-linux-x64-musl": "1.77.0", - "@oxlint/binding-openharmony-arm64": "1.77.0", - "@oxlint/binding-win32-arm64-msvc": "1.77.0", - "@oxlint/binding-win32-ia32-msvc": "1.77.0", - "@oxlint/binding-win32-x64-msvc": "1.77.0" - }, - "peerDependencies": { - "oxlint-tsgolint": ">=7.0.2001", - "vite-plus": "*" - }, - "peerDependenciesMeta": { - "oxlint-tsgolint": { - "optional": true - }, - "vite-plus": { - "optional": true - } - } - }, - "node_modules/oxlint-tsgolint": { - "version": "7.0.2001", - "resolved": "https://registry.npmjs.org/oxlint-tsgolint/-/oxlint-tsgolint-7.0.2001.tgz", - "integrity": "sha512-KjK/XLcXr1DSyonKhsuFqJRiuKqcyG9j3LJ8nkOsrLzGvodBPqzHOKauy10asLMDI0sUpvb+1sxlzff3udZvfg==", - "dev": true, - "license": "MIT", - "bin": { - "tsgolint": "bin/tsgolint.js" - }, - "optionalDependencies": { - "@oxlint-tsgolint/darwin-arm64": "7.0.2001", - "@oxlint-tsgolint/darwin-x64": "7.0.2001", - "@oxlint-tsgolint/linux-arm64": "7.0.2001", - "@oxlint-tsgolint/linux-x64": "7.0.2001", - "@oxlint-tsgolint/win32-arm64": "7.0.2001", - "@oxlint-tsgolint/win32-x64": "7.0.2001" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-imports-exports": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", - "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse-statements": "1.0.11" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-statements": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", - "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/patch-package": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", - "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", - "ci-info": "^3.7.0", - "cross-spawn": "^7.0.3", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^10.0.0", - "json-stable-stringify": "^1.0.2", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", - "open": "^7.4.2", - "semver": "^7.5.3", - "slash": "^2.0.0", - "tmp": "^0.2.4", - "yaml": "^2.2.2" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "node": ">=14", - "npm": ">5" - } - }, - "node_modules/patch-package/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/patch-package/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/patch-package/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/patch-package/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/patch-package/node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/patch-package/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/perfect-debounce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", - "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.62.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz", - "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.62.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=20" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.62.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz", - "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/plur": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", - "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "irregular-plurals": "^3.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pngjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", - "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.19.0" - } - }, - "node_modules/portfinder": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz", - "integrity": "sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==", - "dev": true, - "license": "MIT", - "dependencies": { - "async": "^3.2.6", - "debug": "^4.3.6" - }, - "engines": { - "node": ">= 10.12" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/portfinder/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/portscanner": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", - "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", - "dev": true, - "license": "MIT", - "dependencies": { - "async": "^2.6.0", - "is-number-like": "^1.0.3" - }, - "engines": { - "node": ">=0.4", - "npm": ">=1.0.0" - } - }, - "node_modules/portscanner/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/postcss": { - "version": "8.5.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", - "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.17", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", - "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-calc": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz", - "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12 || ^20.9 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.38" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.12.tgz", - "integrity": "sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", - "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", - "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-colormin": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.10.tgz", - "integrity": "sha512-yFr6JezOolHLta/buLE71VKPh2mXursp4saVe98/ol8ZnEWhL+racShqPKlvd/DKWLre/39B6HhcMXf7RZ3hxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@colordx/core": "^5.4.3", - "browserslist": "^4.28.2", - "caniuse-api": "^3.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } - }, - "node_modules/postcss-convert-values": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.12.tgz", - "integrity": "sha512-xurKu5qqk4viR3Cp3p4xBR4KfnZm4w4ys6+UBwBmeuBSNkH7+DtLnYOYnOffgtE4yx8sH9S1VZ6RAAvROXzP2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.28.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } - }, - "node_modules/postcss-custom-media": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", - "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-properties": { - "version": "14.0.6", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", - "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", - "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", - "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "node_modules/@yuku-codegen/binding-darwin-x64": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-x64/-/binding-darwin-x64-0.8.4.tgz", + "integrity": "sha512-tK7LWzXNb5JbZpnoCNHB0nEhPFss/LwwehM6m/f0oYDan+iZgFZXzdoy80JdE7dVxjTZDIhUNPx8X8xbIdaoxA==", + "cpu": [ + "x64" ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-discard-comments": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.8.tgz", - "integrity": "sha512-CvvS5S9WrXblFXCEJ9nVo+4z+eA7zSC7Z88V1HEJuwlQhlFnYTIjg1xJY+BCUiG2bvICap2tXii4mP22BD108Q==", "dev": true, "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.1.1" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/postcss-discard-duplicates": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.4.tgz", - "integrity": "sha512-VBNn1+EuMZkeGVVtz0gRfbNGtx9IFgAsAV+E2pHtXPrp4qfGBkhTIiAuE/wrb+Y6Pakg9NewAlfTpYIFAWODtw==", + "node_modules/@yuku-codegen/binding-freebsd-x64": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-freebsd-x64/-/binding-freebsd-x64-0.8.4.tgz", + "integrity": "sha512-5MUV4d7g2p5Hd8GiXW6ynTRgYjm4Dw4eM2gaWRZ4crkGetzNx+HlPxcEfGtVNPqH5Qaa4Z2REtzdsdgvaE6/Ng==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/postcss-discard-empty": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.3.tgz", - "integrity": "sha512-M2pyjQCU+/7cMHVtL6bKTHjv0lZnPLMpicgr67Dlth7AbuV9gjVTtUqaRwn6Pp6BwSDspUzhz8SaUrRykJU5Dw==", + "node_modules/@yuku-codegen/binding-linux-arm-gnu": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.8.4.tgz", + "integrity": "sha512-g6LnHrR0Rfqq5cXs7olwR2+LlVDc876pw7Hh7YXbukVSiBxQkaxqsEO/trO25z2g99zWzgXwoYvQZ1TnwA2wEw==", + "cpu": [ + "arm" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/postcss-discard-overridden": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.3.tgz", - "integrity": "sha512-aNovXo9UsZuRNLzHJtp13lHIvinDPfiXBPePpXkSjCbgp++iU2FqE+YxvjIsg6EdyPZsASFbfu+JcBFVsErXIQ==", + "node_modules/@yuku-codegen/binding-linux-arm-musl": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-musl/-/binding-linux-arm-musl-0.8.4.tgz", + "integrity": "sha512-7XAPHrROPEFuJWXEGZeLZQN4xR8ENQ65+HSCtCHjSzCwGgnX53GUjM9ExVcHopV0a5g4vu57v2wwtyWIM5iNOQ==", + "cpu": [ + "arm" + ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/postcss-double-position-gradients": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.4.tgz", - "integrity": "sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "node_modules/@yuku-codegen/binding-linux-arm64-gnu": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.8.4.tgz", + "integrity": "sha512-fnBm7NLuuwFXy7F1vRIuyOc+RW9ADUjuCKVGY87Dj8jtr9XgESNrwb+B9VLSFY7nZ0rCdK/Sm1fBqJpI7eLdKQ==", + "cpu": [ + "arm64" ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", - "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "libc": [ + "glibc" ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/postcss-focus-within": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", - "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "node_modules/@yuku-codegen/binding-linux-arm64-musl": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.8.4.tgz", + "integrity": "sha512-6vTw4ZHO9nm4SUkw36uG+UE6/qifZ0E8HIef7Mx/U/c2Zxu3JLBfXtU7U/NN2GMkDmcJkgwjXfpQoYw4Ch5Y1w==", + "cpu": [ + "arm64" ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", "dev": true, + "libc": [ + "musl" + ], "license": "MIT", - "peerDependencies": { - "postcss": "^8.1.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/postcss-gap-properties": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", - "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "node_modules/@yuku-codegen/binding-linux-x64-gnu": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.8.4.tgz", + "integrity": "sha512-+vuC3V3Lw+DB4oJgHV9pVDfQZlsZJnxmbdods7HzxgEALU3P5+czwdAcw3wfh7Ebabt0Ny8eLUb1k9RV5OB/+w==", + "cpu": [ + "x64" ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-html": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.8.1.tgz", - "integrity": "sha512-OLF6P7qctfAWayOhLpcVnTGqVeJzu2W3WpIYelfz2+JV5oGxfkcEvweN9U4XpeqE0P98dcD9ssusGwlF0TK0uQ==", "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "htmlparser2": "^8.0.0", - "js-tokens": "^9.0.0", - "postcss": "^8.5.0", - "postcss-safe-parser": "^6.0.0" - }, - "engines": { - "node": "^12 || >=14" - } - }, - "node_modules/postcss-html/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true, - "license": "MIT" + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/postcss-image-set-function": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", - "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "node_modules/@yuku-codegen/binding-linux-x64-musl": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-musl/-/binding-linux-x64-musl-0.8.4.tgz", + "integrity": "sha512-QH60PE4eZecmgNGa1/T1cKPhrfxt6ANtu4lrQ1FZ50F9b0GS9WjGmIjrfdSUeQa+f2Iqk3oEFSJdgVHBg1KPNg==", + "cpu": [ + "x64" ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-lab-function": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.12.tgz", - "integrity": "sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "libc": [ + "musl" ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.1.0", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-loader": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.2.1.tgz", - "integrity": "sha512-k98jtRzthjj3f76MYTs9JTpRqV1RaaMhEU0Lpw9OTmQZQdppg4B30VZ74BojuBHt3F4KyubHJoXCMUeM8Bqeow==", - "dev": true, "license": "MIT", - "dependencies": { - "cosmiconfig": "^9.0.0", - "jiti": "^2.5.1", - "semver": "^7.6.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/postcss-logical": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", - "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", + "node_modules/@yuku-codegen/binding-win32-arm64": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-arm64/-/binding-win32-arm64-0.8.4.tgz", + "integrity": "sha512-6r68c0nKZPIBRXZIBiD7zjlEukBR+xRxpTOVj4n1Fsjcdh4YbbJfjFfmIzdbo9jXR1xL+dPueDVdsRGOUH5MoQ==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@yuku-codegen/binding-win32-x64": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-x64/-/binding-win32-x64-0.8.4.tgz", + "integrity": "sha512-i+BW77LPjNqe7Apq50J3OeEaVfga3G+eT2bKjb6bj4yO99fil/jnKb4ZDH4JLvby/Q7hRa6VicL2EZ7iS+ifzA==", + "cpu": [ + "x64" ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "node_modules/@yuku-parser/binding-android-arm64": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-android-arm64/-/binding-android-arm64-0.8.4.tgz", + "integrity": "sha512-+HIMmv08Zrh9ugIAEMnKBMMePOl7CDxrjc8Vui1+GG2TJHM1yI1+3wo1pnXB6Nj2IiHugDkQw8ycUI6SA2EUkQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, - "node_modules/postcss-merge-longhand": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.7.tgz", - "integrity": "sha512-b3mfYUxR388u5Pt0HPcVIUtUDn/k15UfTY9M+ORW+meCR6JLNxoZffiYvXyOYQoRYQNZyX/UFkMCM/mNHxe1qA==", + "node_modules/@yuku-parser/binding-darwin-arm64": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.8.4.tgz", + "integrity": "sha512-Elf/B/2m3OsyvxoQnBk8Dtu+9csHkzBNs5Yv9GbHjT3x0kVKNWjFusyZgm41VwxcPDqdpRi8tWxNX7OqXkmf/A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^7.0.11" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/postcss-merge-rules": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.11.tgz", - "integrity": "sha512-SJUPM18g2BmPhf8BVlbwqWz4aK3pLu6u6xjfwEzra7xL6IBR10sUaiB++EzqcVfadPHrKBSMlNdP+XieykhI+Q==", + "node_modules/@yuku-parser/binding-darwin-x64": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-x64/-/binding-darwin-x64-0.8.4.tgz", + "integrity": "sha512-CjZuMoXnL5XUkVpDqh4WDPwpAw8CwmtHHnTerGkS45So/sNuwkXdyIAEqqIZfaLopi5W/V9NApAT2md9XizjsQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "browserslist": "^4.28.2", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^5.0.3", - "postcss-selector-parser": "^7.1.1" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/postcss-minify-font-values": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.3.tgz", - "integrity": "sha512-yilG/VOaNI74IylQvAQQxm3/wZVBkXyYUqNUAdxqwtbWUXPsbK1q8Ms0mL83v+f8YicgcyfYCRZtWACUdYajpA==", + "node_modules/@yuku-parser/binding-freebsd-x64": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.8.4.tgz", + "integrity": "sha512-ibLKORdz71iI4Vs+fyFgvwQ51P5XcxJIyQLa8cSEWqwptRdo+BTcZHIQEcZnFDPUuvmJ19RRH9CoiJdfhr7pZw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/postcss-minify-gradients": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.5.tgz", - "integrity": "sha512-YraROyQRg3BI1+Hg8E05B/JPdnTm8EDSVu4P2BxdM+CRiOyfmou809+chGIqo6fQqwjPGQ947nbGncSjmTU1WQ==", + "node_modules/@yuku-parser/binding-linux-arm-gnu": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.8.4.tgz", + "integrity": "sha512-Fo3r5fYhGDcFnl+KN+L9PgtiQPS4AIE1n1mG1o5jZ11p7g5yZ/1EjLFmSHAUsoXreun8KjTsFjEL7P1Sb93PZQ==", + "cpu": [ + "arm" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "@colordx/core": "^5.4.3", - "cssnano-utils": "^5.0.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/postcss-minify-params": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.9.tgz", - "integrity": "sha512-R8itbB8BhlpoYyBm1ou0dD+vJnQ3F6adQipR4UnkCHUwlo+S9WXJaDRg1RHjC8YVAtIdrQzSWvJl40HnGDTKjA==", + "node_modules/@yuku-parser/binding-linux-arm-musl": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-musl/-/binding-linux-arm-musl-0.8.4.tgz", + "integrity": "sha512-BEB31vUEgXPWf7WkoMPSzzJhpC/wWCBXyysRCCPsw47BJ/OtbQsvJbxX9fFDuSRLy3kbyIV/WbdUTgbQ9COxiw==", + "cpu": [ + "arm" + ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", - "dependencies": { - "browserslist": "^4.28.2", - "cssnano-utils": "^5.0.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/postcss-minify-selectors": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.1.2.tgz", - "integrity": "sha512-aQtrEWKwqafNlExcKHQvPGsXR2+vlUqqJtf5XsCQcgsSb5PL4wlujWBYDJuWsP4UnQX1YHDHU8qRlD+1PzTQ+Q==", + "node_modules/@yuku-parser/binding-linux-arm64-gnu": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.8.4.tgz", + "integrity": "sha512-xGLCRcHn9xVz7JVNyyKtiNJSf503qtUmih9XVSsghgzOmiKUMnHObs69OMMwXN3788tg1jsl11fNjjQlB8idMA==", + "cpu": [ + "arm64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "browserslist": "^4.28.1", - "caniuse-api": "^3.0.0", - "cssesc": "^3.0.0", - "postcss-selector-parser": "^7.1.1" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/postcss-nesting": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", - "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", + "node_modules/@yuku-parser/binding-linux-arm64-musl": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.8.4.tgz", + "integrity": "sha512-3kNRi8NJT2q6FQRVCUFHIQ99+kXdi8cVJEEUi6+xtFqpMgNrZNnbgAj28ILsDC7zmclaU+v47eUCeJoKLSCbww==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "libc": [ + "musl" ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-resolve-nested": "^3.1.0", - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/postcss-normalize-charset": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.3.tgz", - "integrity": "sha512-NoBfZu8PR4c2NlmjvrqQTzCzLY79hwcSRgNQ3ZiNK0ABzf9kYKloE/jNj+/8GQY1wsm8pRRgANk6ydLH8cwo0Q==", + "node_modules/@yuku-parser/binding-linux-x64-gnu": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.8.4.tgz", + "integrity": "sha512-isi62oMy94Z3OXwGs2l2rkqRiRyqLmfHeTRHpA/uWZbsNhnm7IdVvkF7e7wHNKAtd5jwGzOqYSroxKv2fOm7Cw==", + "cpu": [ + "x64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/postcss-normalize-display-values": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.3.tgz", - "integrity": "sha512-ldsCX0QIt05pKIOobZtVQ48wXJecr+czw4+e1/YjVhLMqslShgpVxgPtI2CefURR8oyVoYaU/l829MMwExDMLw==", + "node_modules/@yuku-parser/binding-linux-x64-musl": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.8.4.tgz", + "integrity": "sha512-9RsEw2xYHqU/pjSRBTOupWN3sF8uz9stjJdARfz6o0llvF+yfrj5QHmTiocGGBeAI80fvKmDtr2RIQClUzAPcA==", + "cpu": [ + "x64" + ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/postcss-normalize-positions": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.4.tgz", - "integrity": "sha512-VEvlpeGd3Ju1Hqa/oN4jaP3+ms4laYwkEL9N9u+B6k54PZjXbW1n6wI+aVprf1BQXlCYpS5+1pl/7/vHiKgARg==", + "node_modules/@yuku-parser/binding-win32-arm64": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-arm64/-/binding-win32-arm64-0.8.4.tgz", + "integrity": "sha512-VEZHo9rEGOBKR20sA3vCO00aQvwWND5aLu7YxeX+YupMZJh9hd1f17AbClJN37Q2iL1PCHht+wDTOKX6tZYqXg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/postcss-normalize-repeat-style": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.4.tgz", - "integrity": "sha512-6mPKlY/8cSaDHxX502wERADarJsccwlky6yIrOapHH2ZgfoKAV94SbiTKfKEs4EEpdazuc3J72WsqeYk7hp9+Q==", + "node_modules/@yuku-parser/binding-win32-x64": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-x64/-/binding-win32-x64-0.8.4.tgz", + "integrity": "sha512-PeH3VzN1feGjPtDpVEAqf000fPT+nxtw/696LKp/5Z9RJi/MaXpB636QC+5QtrAPSoEnIkyEe+c+mq2QLZPWBA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/postcss-normalize-string": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.3.tgz", - "integrity": "sha512-HnEQPUchi1eznmDKEYrKUTqrprEq97SrpUYClgUkv7V2zRODD9DFoUsYU+m9ZOetmD5ku7fEMZB/lwy8IT6xVQ==", + "node_modules/@yuku-toolchain/types": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@yuku-toolchain/types/-/types-0.8.4.tgz", + "integrity": "sha512-p7JE8flrj7ijZ/qLjHi4UwKqMarMD6zumbKXhrjp2I2iLJOuTYiQyci2U36VlXcUlNyzsY7E/mLnKCHotbzJVw==", "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "license": "MIT" }, - "node_modules/postcss-normalize-timing-functions": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.3.tgz", - "integrity": "sha512-zmEzHdvpZBZu0OKlbJSfgASQvaayyAoVuWtvyr34IJ/LyS+DaOKvvR3EvFJ9RWWtNIx+CMvO125OVophaxNYew==", + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", "dev": true, "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" + "node": ">=0.4.0" } }, - "node_modules/postcss-normalize-unicode": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.9.tgz", - "integrity": "sha512-DRAdWfeh/TjmhLJsw91vdiWCnUod9iwvM7xyS02/nF/sLsCR3A8l3pztrSUrWG8DSBqfX7yEk9FM0USaVJ2mSg==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", - "dependencies": { - "browserslist": "^4.28.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, "peerDependencies": { - "postcss": "^8.5.13" + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/postcss-normalize-url": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.3.tgz", - "integrity": "sha512-CL93wmloq5qsffmFv+bw24MIRbmhHrp53qoh1LDAb/5TtjWEXI/np4xcP/Gw9oWCb2XyWnqHYLDUwiKRoJBA1Q==", + "node_modules/alien-signals": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.2.1.tgz", + "integrity": "sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==", "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } + "license": "MIT" }, - "node_modules/postcss-normalize-whitespace": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.3.tgz", - "integrity": "sha512-FdHjjn+Ht5Z2ZRjNOmeCbNq6lq09sUYKpmlF/Aq0XjVNSLTL6fmHlA/3swN2wP2caY9GV/tjSDcIIyS7aN7W0A==", + "node_modules/ansis": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.3.1.tgz", + "integrity": "sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==", "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "license": "ISC", "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" + "node": ">=14" } }, - "node_modules/postcss-opacity-percentage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", - "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } + "license": "Python-2.0" }, - "node_modules/postcss-ordered-values": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.4.tgz", - "integrity": "sha512-nubSi49hDHQk4E8KIj+IbLY8Bg+8OcSUEhgyolgM+atnOvXjV7EjaR6bac4YGZoFyPa9mWoAF3EaYbWdFkKqVg==", + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", - "dependencies": { - "cssnano-utils": "^5.0.3", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" + "node": ">=12" } }, - "node_modules/postcss-overflow-shorthand": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", - "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", + "node_modules/ast-v8-to-istanbul": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.5.tgz", + "integrity": "sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^10.0.0" } }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "node_modules/ast-v8-to-istanbul/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", - "peerDependencies": { - "postcss": "^8" + "dependencies": { + "@types/estree": "^1.0.0" } }, - "node_modules/postcss-place": { + "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", - "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } + "license": "MIT" }, - "node_modules/postcss-preset-env": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.6.1.tgz", - "integrity": "sha512-yrk74d9EvY+W7+lO9Aj1QmjWY9q5NsKjK2V9drkOPZB/X6KZ0B3igKsHUYakb7oYVhnioWypQX3xGuePf89f3g==", + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-alpha-function": "^1.0.1", - "@csstools/postcss-cascade-layers": "^5.0.2", - "@csstools/postcss-color-function": "^4.0.12", - "@csstools/postcss-color-function-display-p3-linear": "^1.0.1", - "@csstools/postcss-color-mix-function": "^3.0.12", - "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.2", - "@csstools/postcss-content-alt-text": "^2.0.8", - "@csstools/postcss-contrast-color-function": "^2.0.12", - "@csstools/postcss-exponential-functions": "^2.0.9", - "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.11", - "@csstools/postcss-gradients-interpolation-method": "^5.0.12", - "@csstools/postcss-hwb-function": "^4.0.12", - "@csstools/postcss-ic-unit": "^4.0.4", - "@csstools/postcss-initial": "^2.0.1", - "@csstools/postcss-is-pseudo-class": "^5.0.3", - "@csstools/postcss-light-dark-function": "^2.0.11", - "@csstools/postcss-logical-float-and-clear": "^3.0.0", - "@csstools/postcss-logical-overflow": "^2.0.0", - "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", - "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.4", - "@csstools/postcss-media-minmax": "^2.0.9", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", - "@csstools/postcss-nested-calc": "^4.0.0", - "@csstools/postcss-normalize-display-values": "^4.0.1", - "@csstools/postcss-oklab-function": "^4.0.12", - "@csstools/postcss-position-area-property": "^1.0.0", - "@csstools/postcss-progressive-custom-properties": "^4.2.1", - "@csstools/postcss-property-rule-prelude-list": "^1.0.0", - "@csstools/postcss-random-function": "^2.0.1", - "@csstools/postcss-relative-color-syntax": "^3.0.12", - "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.4", - "@csstools/postcss-stepped-value-functions": "^4.0.9", - "@csstools/postcss-syntax-descriptor-syntax-production": "^1.0.1", - "@csstools/postcss-system-ui-font-family": "^1.0.0", - "@csstools/postcss-text-decoration-shorthand": "^4.0.3", - "@csstools/postcss-trigonometric-functions": "^4.0.9", - "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.23", - "browserslist": "^4.28.1", - "css-blank-pseudo": "^7.0.1", - "css-has-pseudo": "^7.0.3", - "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.6.0", - "postcss-attribute-case-insensitive": "^7.0.1", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.12", - "postcss-color-hex-alpha": "^10.0.0", - "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.6", - "postcss-custom-properties": "^14.0.6", - "postcss-custom-selectors": "^8.0.5", - "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.4", - "postcss-focus-visible": "^10.0.1", - "postcss-focus-within": "^9.0.1", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^6.0.0", - "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.12", - "postcss-logical": "^8.1.0", - "postcss-nesting": "^13.0.2", - "postcss-opacity-percentage": "^3.0.0", - "postcss-overflow-shorthand": "^6.0.0", - "postcss-page-break": "^3.0.4", - "postcss-place": "^10.0.0", - "postcss-pseudo-class-any-link": "^10.0.1", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^8.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", - "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, + "license": "MIT", "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "18 || 20 || >=22" } }, - "node_modules/postcss-reduce-initial": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.9.tgz", - "integrity": "sha512-ztTNPdIxXTxtBcG03E9u8v44M4ElXbMIRT7pf2onlquGula0Y83nKKxqM22FA/hMgkfCjN7ohevkVlaNwI8iOQ==", + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", "dev": true, "license": "MIT", - "dependencies": { - "browserslist": "^4.28.2", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/postcss-reduce-transforms": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.3.tgz", - "integrity": "sha512-FXsnN9ZwcZTT8Yf8cAHA8qIGUXcX6WfLd9JoYhrdDfmvsVhhfqkkv7m4AC3rwFOfz+GzkUa87OCKF9dUcicd+g==", + "node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "balanced-match": "^4.0.2" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "postcss": "^8.0.3" + "node": "20 || >=22" } }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", - "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "dependencies": { + "fill-range": "^7.1.1" }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "node_modules/postcss-scss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", - "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-scss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.4.29" + "node": ">=8" } }, - "node_modules/postcss-selector-not": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", - "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "license": "MIT", "dependencies": { - "postcss-selector-parser": "^7.0.0" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-selector-parser": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz", - "integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sorting": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-9.1.0.tgz", - "integrity": "sha512-Mn8KJ45HNNG6JBpBizXcyf6LqY/qyqetGcou/nprDnFwBFBLGj0j/sNKV2lj2KMOVOwdXu14aEzqJv8CIV6e8g==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "postcss": "^8.4.20" + "node": ">= 0.4" } }, - "node_modules/postcss-svgo": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.1.3.tgz", - "integrity": "sha512-2QfoFOYMcj8lwcVEf9WeTlkVIAm7u2QvOEhMzkQU3KUhhGX/l8hVV9EtjMv4iq3E9iI3OeeMN0YoMLbGusuigw==", + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^4.0.1" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >= 18" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.5.13" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-unique-selectors": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.7.tgz", - "integrity": "sha512-d+sCkaRnSefghOUdH8CMJZV9yUQhj2ojpe8Nw/lA+LV1UOfeleGkLTl6XdCFFSai9UJ+DJPb69FFuqthXYsY8w==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.1.1" - }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" + "node": ">=6" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "dev": true, - "license": "MIT" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=18" } }, - "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", - "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "dev": true, "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/pretty-bytes": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-7.1.1.tgz", - "integrity": "sha512-X+vn9z8nOFZQlxOLmfJ0iKDdMD7jYTsTW12OAlCpdoE3Igik6L37pugIZi+N3usuyp5McfgKPWi12q3zvHLeGQ==", + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=20" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/pretty-format": { - "version": "30.4.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", - "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/schemas": "30.4.1", - "ansi-styles": "^5.2.0", - "react-is-18": "npm:react-is@^18.3.1", - "react-is-19": "npm:react-is@^19.2.5" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=8" } }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/process-nextick-args": { + "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/proper-lockfile/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/property-information": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", - "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "dev": true, "license": "MIT", "funding": { @@ -18813,461 +4569,438 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/qified": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", - "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==", + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", "dev": true, "license": "MIT", "dependencies": { - "hookified": "^2.1.1" + "character-entities": "^2.0.0" }, - "engines": { - "node": ">=20" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/qified/node_modules/hookified": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz", - "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, - "node_modules/qs": { - "version": "6.15.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", - "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "es-define-property": "^1.0.1", - "side-channel": "^1.1.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">=0.6" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/quansync": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-1.0.0.tgz", - "integrity": "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/antfu" - }, - { - "type": "individual", - "url": "https://github.com/sponsors/sxzz" - } - ], - "license": "MIT" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/defu": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz", + "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT" }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" + "engines": { + "node": ">=6" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" + "dequal": "^2.0.0" }, - "engines": { - "node": ">= 0.8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/react-is-18": { - "name": "react-is", - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/react-is-19": { - "name": "react-is", - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.8.tgz", - "integrity": "sha512-s5un28nYxKJw5gvUHyW5PCC28CvBqLu9r3cWgzHT4Vo/5fqqkFcdRYsGcKf50WMPpjjFZS5d76fn3YCo2njKwQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/dts-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dts-resolver/-/dts-resolver-3.0.0.tgz", + "integrity": "sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==", "dev": true, "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { - "node": ">= 6" + "node": "^22.18.0 || >=24.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "oxc-resolver": ">=11.0.0" + }, + "peerDependenciesMeta": { + "oxc-resolver": { + "optional": true + } } }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "minimatch": "^5.1.0" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/readdir-glob/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, - "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", - "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "node_modules/empathic": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.1.tgz", + "integrity": "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, "engines": { - "node": ">=10" + "node": ">=14" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/enhanced-resolve": { + "version": "5.24.5", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", + "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", "dev": true, "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" }, "engines": { - "node": ">=8.10.0" + "node": ">=10.13.0" } }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=8.6" + "node": ">=0.12" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", - "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" + "engines": { + "node": ">= 0.4" } }, - "node_modules/regex-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", - "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/regex-recursion": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", - "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" + "engines": { + "node": ">= 0.4" } }, - "node_modules/regex-utilities": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", - "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "node_modules/es-module-lexer": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", + "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", "dev": true, "license": "MIT" }, - "node_modules/regexp-tree": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", - "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "dev": true, "license": "MIT", - "bin": { - "regexp-tree": "bin/regexp-tree" - } - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "es-errors": "^1.3.0" }, - "bin": { - "regjsparser": "bin/parser" + "engines": { + "node": ">= 0.4" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, "engines": { "node": ">=6" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.3.tgz", - "integrity": "sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew==", + "node_modules/eslint": { + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz", + "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "remark-parse": "^10.0.0", - "remark-stringify": "^10.0.0", - "unified": "^10.0.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.34.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/remark-frontmatter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-frontmatter": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0", - "unified": "^11.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/eslint" } }, - "node_modules/remark-frontmatter/node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/eslint" } }, - "node_modules/remark-html": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/remark-html/-/remark-html-16.0.1.tgz", - "integrity": "sha512-B9JqA5i0qZe0Nsf49q3OXyGvyXuZFDzAP2iOFLEumymuYJITVpiH1IgsTEwTpdptDmZlMDMWeDmSawdaJIGCXQ==", + "node_modules/eslint/node_modules/@eslint/js": { + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz", + "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==", "dev": true, "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "hast-util-sanitize": "^5.0.0", - "hast-util-to-html": "^9.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://eslint.org/donate" } }, - "node_modules/remark-html/node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "node_modules/eslint/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/remark-loader": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-loader/-/remark-loader-6.0.0.tgz", - "integrity": "sha512-3Z4WLyVYbI1F6TQNnA9/iuHsoRcu8ruH2ABixLpgSWiSiYdNgURgLdpbdze8jTm2+VWWcAq9xIH7maWSpi2sSw==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "front-matter": "^4.0.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 18.12.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "remark": "^14.0.0", - "webpack": "^5.0.0" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/remark-parse": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", - "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", + "node_modules/eslint/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/remark-parse/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/remark-parse/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/remark-parse/node_modules/debug": { + "node_modules/eslint/node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", @@ -19285,3529 +5018,3083 @@ } } }, - "node_modules/remark-parse/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-parse/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@types/mdast": "^3.0.0" + "is-glob": "^4.0.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/remark-parse/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/remark-parse/node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/remark-parse/node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "license": "MIT" + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-parse/node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", + "license": "ISC", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/remark-parse/node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "node_modules/eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "license": "MIT" }, - "node_modules/remark-parse/node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-parse/node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-parse/node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/remark-parse/node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "node_modules/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-parse/node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/remark-parse/node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" } }, - "node_modules/remark-parse/node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "micromark-util-symbol": "^1.0.0" + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/remark-parse/node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "node_modules/remark-parse/node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } }, - "node_modules/remark-parse/node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT" }, - "node_modules/remark-parse/node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-parse/node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^1.0.0" + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" } }, - "node_modules/remark-parse/node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-parse/node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" } }, - "node_modules/remark-parse/node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT" }, - "node_modules/remark-parse/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT" }, - "node_modules/remark-parse/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } }, - "node_modules/remark-parse/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "format": "^0.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-stringify": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.3.tgz", - "integrity": "sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==", + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" + "engines": { + "node": ">=12.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/remark-stringify/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^2" + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/remark-stringify/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/remark-stringify/node_modules/mdast-util-phrasing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", - "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "unist-util-is": "^5.0.0" + "to-regex-range": "^5.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/remark-stringify/node_modules/mdast-util-to-markdown": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", - "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromatch": "^4.0.2" } }, - "node_modules/remark-stringify/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=16" } }, - "node_modules/remark-stringify/node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "node_modules/flatted": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/floating-vue": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/floating-vue/-/floating-vue-5.2.2.tgz", + "integrity": "sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@floating-ui/dom": "~1.1.1", + "vue-resize": "^2.0.0-alpha.1" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.0", + "vue": "^3.2.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } } }, - "node_modules/remark-stringify/node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "node_modules/focus-trap": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.8.0.tgz", + "integrity": "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "license": "MIT", "dependencies": { - "micromark-util-symbol": "^1.0.0" + "tabbable": "^6.4.0" } }, - "node_modules/remark-stringify/node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "engines": { + "node": ">=0.4.x" } }, - "node_modules/remark-stringify/node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" ], - "license": "MIT" + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "node_modules/remark-stringify/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "node_modules/remark-stringify/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/remark-stringify/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.4" } }, - "node_modules/remark-stringify/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "is-glob": "^4.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 6" } }, - "node_modules/remark/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^2" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/remark/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", "dev": true, "license": "MIT", "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" } }, - "node_modules/renderkid/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.1.tgz", + "integrity": "sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==", "dev": true, "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, + "license": "MIT", "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=8" } }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "es-define-property": "^1.0.0" }, "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/renderkid/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "node_modules/hookable": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz", + "integrity": "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==", "dev": true, "license": "MIT" }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + "engines": { + "node": ">= 4" } }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/resolve-url-loader/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/resp-modifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", - "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==", + "node_modules/import-without-cache": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/import-without-cache/-/import-without-cache-0.4.0.tgz", + "integrity": "sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==", "dev": true, - "dependencies": { - "debug": "^2.2.0", - "minimatch": "^3.0.2" - }, + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": "^22.18.0 || >=24.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" } }, - "node_modules/resp-modifier/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/resp-modifier/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=0.8.19" } }, - "node_modules/resp-modifier/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "license": "MIT", + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": "*" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { - "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/rimraf/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=0.12.0" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": "*" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/rolldown": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.3.tgz", - "integrity": "sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "@oxc-project/types": "=0.143.0", - "@rolldown/pluginutils": "^1.0.0" - }, - "bin": { - "rolldown": "bin/cli.mjs" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.2.3", - "@rolldown/binding-darwin-arm64": "1.2.3", - "@rolldown/binding-darwin-x64": "1.2.3", - "@rolldown/binding-freebsd-x64": "1.2.3", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.3", - "@rolldown/binding-linux-arm64-gnu": "1.2.3", - "@rolldown/binding-linux-arm64-musl": "1.2.3", - "@rolldown/binding-linux-ppc64-gnu": "1.2.3", - "@rolldown/binding-linux-s390x-gnu": "1.2.3", - "@rolldown/binding-linux-x64-gnu": "1.2.3", - "@rolldown/binding-linux-x64-musl": "1.2.3", - "@rolldown/binding-openharmony-arm64": "1.2.3", - "@rolldown/binding-win32-arm64-msvc": "1.2.3", - "@rolldown/binding-win32-x64-msvc": "1.2.3" + "node": ">=10" } }, - "node_modules/rolldown-plugin-dts": { - "version": "0.27.14", - "resolved": "https://registry.npmjs.org/rolldown-plugin-dts/-/rolldown-plugin-dts-0.27.14.tgz", - "integrity": "sha512-ZvuDDwoIpRK9RPxDXratCpklFO9QZZWndf/sd0VBFb4LEj0jj07UcHK9OCh7V4XiFz2Z89ziyBC2K6tJiDjrbw==", + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "dts-resolver": "^3.0.0", - "get-tsconfig": "5.0.0-beta.5", - "obug": "^2.1.4", - "yuku-ast": "^0.8.0", - "yuku-codegen": "^0.8.0", - "yuku-parser": "^0.8.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": "^22.18.0 || >=24.11.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - }, - "peerDependencies": { - "@typescript/native-preview": "*", - "@volar/typescript": "~2.4.0", - "rolldown": "^1.0.0", - "typescript": "^5.0.0 || ^6.0.0 || ~7.0.0", - "vue-tsc": "~3.2.0 || ~3.3.0" - }, - "peerDependenciesMeta": { - "@typescript/native-preview": { - "optional": true - }, - "@volar/typescript": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vue-tsc": { - "optional": true - } + "node": ">=8" } }, - "node_modules/rolldown-plugin-dts/node_modules/get-tsconfig": { - "version": "5.0.0-beta.5", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.5.tgz", - "integrity": "sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==", + "node_modules/istanbul-reports/node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", "dev": true, "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "engines": { - "node": ">=20.20.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "bin": { + "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/js-yaml": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "url": "https://github.com/sponsors/puzrin" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "github", + "url": "https://github.com/sponsors/nodeca" } ], "license": "MIT", "dependencies": { - "queue-microtask": "^1.2.2" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } + "license": "MIT" }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "node_modules/json-stable-stringify": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", + "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", "dev": true, "license": "MIT", "dependencies": { - "mri": "^1.1.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "node_modules/json-stable-stringify/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, - "node_modules/sass": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.100.0.tgz", - "integrity": "sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==", + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "chokidar": "^5.0.0", - "immutable": "^5.1.5", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=20.19.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" + "license": "Public Domain", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sass-embedded": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.100.0.tgz", - "integrity": "sha512-Ut8wlQSk19tm7jMK6mz6cF1+e+E7tUnW2tM02zQDPnOTcVbV8qCQG8UWxZkkNlY50+hV3hqP24OOkUlMz8xBpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bufbuild/protobuf": "^2.5.0", - "colorjs.io": "^0.5.0", - "immutable": "^5.1.5", - "rxjs": "^7.4.0", - "supports-color": "^8.1.1", - "sync-child-process": "^1.0.2", - "varint": "^6.0.0" - }, - "bin": { - "sass": "dist/bin/sass.js" - }, - "engines": { - "node": ">=16.0.0" - }, - "optionalDependencies": { - "sass-embedded-all-unknown": "1.100.0", - "sass-embedded-android-arm": "1.100.0", - "sass-embedded-android-arm64": "1.100.0", - "sass-embedded-android-riscv64": "1.100.0", - "sass-embedded-android-x64": "1.100.0", - "sass-embedded-darwin-arm64": "1.100.0", - "sass-embedded-darwin-x64": "1.100.0", - "sass-embedded-linux-arm": "1.100.0", - "sass-embedded-linux-arm64": "1.100.0", - "sass-embedded-linux-musl-arm": "1.100.0", - "sass-embedded-linux-musl-arm64": "1.100.0", - "sass-embedded-linux-musl-riscv64": "1.100.0", - "sass-embedded-linux-musl-x64": "1.100.0", - "sass-embedded-linux-riscv64": "1.100.0", - "sass-embedded-linux-x64": "1.100.0", - "sass-embedded-unknown-all": "1.100.0", - "sass-embedded-win32-arm64": "1.100.0", - "sass-embedded-win32-x64": "1.100.0" - } - }, - "node_modules/sass-embedded-all-unknown": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.100.0.tgz", - "integrity": "sha512-auFtXY/kwYILmSVjtBDwyj0axcLbYYiffOKWoaXHnI5bsYwiRbBh3EneR1rpbX2ZIZCrwX93i5pxKLTZF/662Q==", - "cpu": [ - "!arm", - "!arm64", - "!riscv64", - "!x64" - ], + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "sass": "1.100.0" + "json-buffer": "3.0.1" } }, - "node_modules/sass-embedded-android-arm": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.100.0.tgz", - "integrity": "sha512-70f3HgX2pFNmzpGQ86n5e6QfWn2fP4QUQGfFQK0P1XH73ZLIzLo2YqygrGKGKeeqtc5eU2Wl1/xQzhzuKnO4kw==", - "cpu": [ - "arm" - ], + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=14.0.0" + "node": ">=0.10.0" } }, - "node_modules/sass-embedded-android-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.100.0.tgz", - "integrity": "sha512-W+Ru9JwTnfU0UX3jSZcbqFdtKFMcYdfFwytc57h2DgnqCOIiAqI2E06mABZBZC+r3LwXCBuS5GbXAGeVgvVDkA==", - "cpu": [ - "arm64" - ], + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" + "dependencies": { + "graceful-fs": "^4.1.11" } }, - "node_modules/sass-embedded-android-riscv64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.100.0.tgz", - "integrity": "sha512-icU3o0V/uCSytSpf+tX5Lf51BvyQEbLzDUJfUi9etSauYBGHpPKkdtdZH0si4v98phq11Kl8rSV1SggksxF1Hg==", - "cpu": [ - "riscv64" - ], + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, "engines": { - "node": ">=14.0.0" + "node": ">= 0.8.0" } }, - "node_modules/sass-embedded-android-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.100.0.tgz", - "integrity": "sha512-mevF9VQk6gEYByy8+jusaHGmd7Usb2ytX/DsEOd0JtOGCtcf1kh575xJ6OUBDIcJ15uLnbau/0iy1eP6WVBvWA==", - "cpu": [ - "x64" - ], + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, "engines": { - "node": ">=14.0.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" } }, - "node_modules/sass-embedded-darwin-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.100.0.tgz", - "integrity": "sha512-1PVlYi61POo93IT/FfrG1mc1tAHxeSTyUALF2aOFmXGWjVXr3bQzEQiBGCOvQbj/ix+5hNyXFXcEMEyKvtUJJA==", + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "darwin" + "android" ], "engines": { - "node": ">=14.0.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/sass-embedded-darwin-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.100.0.tgz", - "integrity": "sha512-x97o3JnGyImZNCIVs9wQHJUE5QCvmVIKaH1cwrz/5dK7OT1FpeNiW+u9TUomP9hG6Ekjd8EL8NBHpxTfIhdjmg==", + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", "cpu": [ - "x64" + "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=14.0.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/sass-embedded-linux-arm": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.100.0.tgz", - "integrity": "sha512-9Ul7O1eKrc5YlhwWjkp8tZPSe3UEwSZ1uwUZOQom1HL0pRlBA6F/IlGZYFTLwnHMIP1fc77MMNaBRfc05mKMpw==", + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", "cpu": [ - "arm" + "x64" ], "dev": true, - "libc": "glibc", - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" + "darwin" ], "engines": { - "node": ">=14.0.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/sass-embedded-linux-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.100.0.tgz", - "integrity": "sha512-Dwjmj8Z6VRy7rAi53JAdEwIyUjpfl7PhpSc2/LpQPQx+aO5Dp7Spaipkax0ufJl1SoDUdchCsM4y/88YaluorQ==", + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", "cpu": [ - "arm64" + "x64" ], "dev": true, - "libc": "glibc", - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "linux" + "freebsd" ], "engines": { - "node": ">=14.0.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.100.0.tgz", - "integrity": "sha512-sl0JgbGloPyJg66XXx5UDSDScZ0oU85DpMQU4JU/sCUCFj1Z8zZ69SJWKTCNE4/jwnce7WI2zPCV5AG+RHOZJw==", + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", "cpu": [ "arm" ], "dev": true, - "libc": "musl", - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=14.0.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.100.0.tgz", - "integrity": "sha512-XpACJB2KjSLjf2e9uuvGVdOURsoNrFqgRiihhXyUHK9W0t3LIHb7z5MA/7XGPIT9bWSOO2zyw+rH/FHtDV/Yrg==", + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", "cpu": [ "arm64" ], "dev": true, - "libc": "musl", - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.100.0.tgz", - "integrity": "sha512-ShvI0Kx04mwoCARwZ0UjiT97isQvzO80tAt91zmFyHLN9kelc/IrQi940farSm2xQVPCKdeVyeG0ekBsokSpYQ==", - "cpu": [ - "riscv64" + "libc": [ + "glibc" ], - "dev": true, - "libc": "musl", - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=14.0.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.100.0.tgz", - "integrity": "sha512-TDBCRWNuS4RDLQXvRc1gjZlWiWTWaWGp0Bwu/IKwJxov81lsvrCs3TihTyNXtW7V5aoN4Ky3r0QOkNb3mwmBnA==", + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, - "libc": "musl", - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-riscv64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.100.0.tgz", - "integrity": "sha512-j4ENJGOheO+fm3j/yorLxCjBP6/XskrZx7dTLlT+lXYwN/qqCqoA/gsNLI0McS3DFM6GBwPiffzWsdWS8t6sEQ==", - "cpu": [ - "riscv64" + "libc": [ + "musl" ], - "dev": true, - "libc": "glibc", - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=14.0.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/sass-embedded-linux-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.100.0.tgz", - "integrity": "sha512-0vUSN8j0WGtCJIOPh//EmUvYGHW0QOe5iul8qyhPk50MAcw49MA0r34AhftjDdx94ILPF6vApFs0gwHPQRlpVA==", + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", "cpu": [ "x64" ], "dev": true, - "libc": "glibc", - "license": "MIT", + "libc": [ + "glibc" + ], + "license": "MPL-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=14.0.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/sass-embedded-unknown-all": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.100.0.tgz", - "integrity": "sha512-c+naBgWId4MIpToXcI0DgqetjdAkwTTAxFAuOaBz7HUXLdyG1oZRrEvSsbe41nEdQOKH0vgofVFCeSQgoXOG9A==", + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "libc": [ + "musl" + ], + "license": "MPL-2.0", "optional": true, "os": [ - "!android", - "!darwin", - "!linux", - "!win32" + "linux" ], - "dependencies": { - "sass": "1.100.0" + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/sass-embedded-win32-arm64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.100.0.tgz", - "integrity": "sha512-iE+yxj+hUXwwbqpHkXxgAWTzeRfcWxJ7SSTQEPMk48lwq3oCrWLlz5sQuWHbuTK/i0GKQfROdP+hOmPi89yjUg==", + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=14.0.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/sass-embedded-win32-x64": { - "version": "1.100.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.100.0.tgz", - "integrity": "sha512-qI4F8MI7/KYoy9NdjJfhSspG42WPkADSNDvwEV7qWvCSFC83koJssRsKO2/PfY+niZz6BG65Ic/D+A11h959hw==", + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded/node_modules/immutable": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", - "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", - "dev": true, - "license": "MIT" - }, - "node_modules/sass-embedded/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/sass-loader": { - "version": "16.0.8", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.8.tgz", - "integrity": "sha512-hcov4ZwZJIGbEuyNr9EmiTmZueyrxSToE6GOzoZnq5JM7ecRO7ttyvilPn+VmRsqiP16+VYZzVnGZj/hzZgKBA==", + "node_modules/linkify-it": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz", + "integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==", "dev": true, - "license": "MIT", - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" }, - "webpack": { - "optional": true + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" } - } - }, - "node_modules/sass/node_modules/chokidar": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", - "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", - "dev": true, + ], "license": "MIT", - "optional": true, "dependencies": { - "readdirp": "^5.0.0" - }, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "uc.micro": "^2.0.0" } }, - "node_modules/sass/node_modules/immutable": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", - "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, - "node_modules/sass/node_modules/readdirp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", - "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "dev": true, "license": "MIT", - "optional": true, - "engines": { - "node": ">= 20.19.0" - }, "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/sax": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", - "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=11.0.0" + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" } }, - "node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "node_modules/magicast": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.4.tgz", + "integrity": "sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==", "dev": true, "license": "MIT", "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/secure-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", - "dev": true, - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "source-map-js": "^1.2.1" } }, - "node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" + "semver": "^7.5.3" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", "dev": true, "license": "MIT" }, - "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/markdown-it": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.3.0.tgz", + "integrity": "sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], "license": "MIT", "dependencies": { - "ee-first": "1.1.1" + "argparse": "^2.0.1", + "entities": "^4.5.0", + "linkify-it": "^5.0.2", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" + "bin": { + "markdown-it": "bin/markdown-it.mjs" } }, - "node_modules/serve-index": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", - "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", + "node_modules/markdown-it/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.8.0", - "mime-types": "~2.1.35", - "parseurl": "~1.3.3" - }, + "license": "BSD-2-Clause", "engines": { - "node": ">= 0.8.0" + "node": ">=0.12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "node_modules/markdown-title": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/markdown-title/-/markdown-title-1.0.2.tgz", + "integrity": "sha512-MqIQVVkz+uGEHi3TsHx/czcxxCbRIL7sv5K5DnYw/tI+apY54IbPefV/cmgxp6LoJSEx/TqcHdLs/298afG5QQ==", "dev": true, "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", "dev": true, "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" - } - }, - "node_modules/server-destroy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "node": ">=12" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", "dev": true, "license": "MIT", "dependencies": { - "kind-of": "^6.0.2" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", "dev": true, "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/shiki": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.0.2.tgz", - "integrity": "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==", + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "4.0.2", - "@shikijs/engine-javascript": "4.0.2", - "@shikijs/engine-oniguruma": "4.0.2", - "@shikijs/langs": "4.0.2", - "@shikijs/themes": "4.0.2", - "@shikijs/types": "4.0.2", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, - "engines": { - "node": ">=20" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/side-channel": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", - "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4", - "side-channel-list": "^1.0.1", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/siginfo": { + "node_modules/mdast-util-gfm-task-list-item": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/sirv": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", - "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "dev": true, "license": "MIT", "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" }, - "engines": { - "node": ">=18" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@types/mdast": "^4.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/smob": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.2.tgz", - "integrity": "sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==", + "node_modules/mdurl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz", + "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { - "node": ">=20.0.0" + "node": ">= 8" } }, - "node_modules/socket.io": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.3.tgz", - "integrity": "sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A==", + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.4.1", - "engine.io": "~6.6.0", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.2.0" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/socket.io-adapter": { - "version": "2.5.8", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.8.tgz", - "integrity": "sha512-6Oy52pbg+kvdCVvjcN+FnY7BvxZ7cIHNScbvztT/It5d0vbwoJoVZmF2gjJmnV0/4WlXRfG15zc45ySk9Ah8bw==", + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "debug": "~4.4.1", - "ws": "~8.21.0" + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/socket.io-adapter/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/socket.io-adapter/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/socket.io-client": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz", - "integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==", + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.4.1", - "engine.io-client": "~6.6.1", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/socket.io-client/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/socket.io-client/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "node_modules/socket.io-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.7.tgz", - "integrity": "sha512-IH/iSeO9T6gz1KkFleGDWkG9N3dl4jXVYUtMhIqH10Md0ttMer8nUNWiP1DKuNrybD2xBrixLJdCC9J6ECoYkg==", + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.4.1" - }, - "engines": { - "node": ">=10.0.0" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/socket.io-parser/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/socket.io/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/socket.io/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/space-separated-tokens": { + "node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", - "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", - "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "dev": true, - "license": "BSD-3-Clause" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } }, - "node_modules/statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==", + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "micromark-util-types": "^2.0.0" } }, - "node_modules/std-env": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", - "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", - "dev": true, - "license": "MIT" - }, - "node_modules/stream-throttle": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", - "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dev": true, - "license": "BSD-3-Clause", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "commander": "^2.2.0", - "limiter": "^1.0.5" - }, - "bin": { - "throttleproxy": "bin/throttleproxy.js" - }, - "engines": { - "node": ">= 0.10.0" + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/stream-throttle/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], "license": "MIT" }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/micromark/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ms": "^2.1.3" }, "engines": { - "node": ">=8" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/micromark/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" + "engines": { + "node": ">=8.6" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/millify": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/millify/-/millify-6.1.0.tgz", + "integrity": "sha512-H/E3J6t+DQs/F2YgfDhxUVZz/dF8JXPPKTLHL/yHCcLZLtCXJDUaqvhJXQwqOVBvbyNn4T0WjLpIHd7PAw7fBA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" + "yargs": "^17.0.1" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "bin": { + "millify": "bin/millify" } }, - "node_modules/strip-indent": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.1.1.tgz", - "integrity": "sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==", + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, "engines": { - "node": ">=12" + "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stylehacks": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.11.tgz", - "integrity": "sha512-iODNfhXVLqc5LADs+Y6Oh5wJuK5ZcHbVng8aiK3y9pjMQdc5hLrBW0eFU6FtnpNrE6PoEg/MmFTU4waotj5WNg==", + "node_modules/minisearch": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", + "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==", + "dev": true, + "license": "MIT" + }, + "node_modules/morphdom": { + "version": "2.7.8", + "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.8.tgz", + "integrity": "sha512-D/fR4xgGUyVRbdMGU6Nejea1RFzYxYtyurG4Fbv2Fi/daKlWKuXGLOdXtl+3eIwL110cI2hz1ZojGICjjFLgTg==", + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", "dev": true, "license": "MIT", - "dependencies": { - "browserslist": "^4.28.2", - "postcss-selector-parser": "^7.1.1" - }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.5.13" + "node": ">=10" } }, - "node_modules/stylelint": { - "version": "16.26.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.26.1.tgz", - "integrity": "sha512-v20V59/crfc8sVTAtge0mdafI3AdnzQ2KsWe6v523L4OA1bJO02S7MO2oyXDCS6iWb9ckIPnqAFVItqSBQr7jw==", + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "dev": true, "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, { "type": "github", - "url": "https://github.com/sponsors/stylelint" + "url": "https://github.com/sponsors/ai" } ], "license": "MIT", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-syntax-patches-for-csstree": "^1.0.19", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3", - "@csstools/selector-specificity": "^5.0.0", - "@dual-bundle/import-meta-resolve": "^4.2.1", - "balanced-match": "^2.0.0", - "colord": "^2.9.3", - "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.3", - "css-tree": "^3.1.0", - "debug": "^4.4.3", - "fast-glob": "^3.3.3", - "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^11.1.1", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.3.1", - "ignore": "^7.0.5", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.37.0", - "mathml-tag-names": "^2.1.3", - "meow": "^13.2.0", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.5.6", - "postcss-resolve-nested-selector": "^0.1.6", - "postcss-safe-parser": "^7.0.1", - "postcss-selector-parser": "^7.1.0", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "supports-hyperlinks": "^3.2.0", - "svg-tags": "^1.0.0", - "table": "^6.9.0", - "write-file-atomic": "^5.0.1" - }, "bin": { - "stylelint": "bin/stylelint.mjs" + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=18.12.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/stylelint-config-recommended": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-16.0.0.tgz", - "integrity": "sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - }, - { - "type": "github", - "url": "https://github.com/sponsors/stylelint" - } - ], - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "stylelint": "^16.16.0" - } + "license": "MIT" }, - "node_modules/stylelint-config-recommended-scss": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-15.0.1.tgz", - "integrity": "sha512-V24bxkNkFGggqPVJlP9iXaBabwSGEG7QTz+PyxrRtjPkcF+/NsWtB3tKYvFYEmczRkWiIEfuFMhGpJFj9Fxe6Q==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", - "dependencies": { - "postcss-scss": "^4.0.9", - "stylelint-config-recommended": "^16.0.0", - "stylelint-scss": "^6.12.0" - }, "engines": { - "node": ">=20" - }, - "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^16.16.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/stylelint-formatter-pretty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/stylelint-formatter-pretty/-/stylelint-formatter-pretty-4.0.1.tgz", - "integrity": "sha512-39nasPN8QNdMBq2eghI/SwpyVKx8kJGtmE/KJ5oFvCg0ZvZ5qjJbQgEulzC0gT70XZ+iRk7p1W5tE9IBQhFjPw==", + "node_modules/obug": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", + "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", "dev": true, "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz/" - } + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" ], "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "log-symbols": "^7.0.0", - "picocolors": "^1.0.0", - "plur": "^5.1.0", - "string-width": "^7.0.0", - "supports-hyperlinks": "^3.0.0" - }, "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "stylelint": ">=16.0.0" + "node": ">=12.20.0" } }, - "node_modules/stylelint-formatter-pretty/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", "dev": true, "license": "MIT" }, - "node_modules/stylelint-formatter-pretty/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/oniguruma-parser": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz", + "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==", "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/stylelint-high-performance-animation": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/stylelint-high-performance-animation/-/stylelint-high-performance-animation-1.11.0.tgz", - "integrity": "sha512-bo+VfSH5RmjVmu61BZeN4cBK+PGHpG5jfvaUsw0db+1sAqKuEGjzmxEbf271/Jq3HJHj8wyi/rCg1IcxxnIiiQ==", + "node_modules/oniguruma-to-es": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz", + "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "stylelint": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "oniguruma-parser": "^0.12.2", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" } }, - "node_modules/stylelint-order": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-7.0.1.tgz", - "integrity": "sha512-GWPei1zBVDDjxM+/BmcSCiOcHNd8rSqW6FUZtqQGlTRpD0Z5nSzspzWD8rtKif5KPdzUG68DApKEV/y/I9VbTw==", + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "license": "MIT", "dependencies": { - "postcss": "^8.5.6", - "postcss-sorting": "^9.1.0" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" }, "engines": { - "node": ">=20.19.0" + "node": ">=8" }, - "peerDependencies": { - "stylelint": "^16.18.0 || ^17.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint-prettier": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/stylelint-prettier/-/stylelint-prettier-5.0.3.tgz", - "integrity": "sha512-B6V0oa35ekRrKZlf+6+jA+i50C4GXJ7X1PPmoCqSUoXN6BrNF6NhqqhanvkLjqw2qgvrS0wjdpeC+Tn06KN3jw==", + "node_modules/open/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "prettier": ">=3.0.0", - "stylelint": ">=16.0.0" + "node": ">=8" } }, - "node_modules/stylelint-scss": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.14.0.tgz", - "integrity": "sha512-ZKmHMZolxeuYsnB+PCYrTpFce0/QWX9i9gh0hPXzp73WjuIMqUpzdQaBCrKoLWh6XtCFSaNDErkMPqdjy1/8aA==", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { - "css-tree": "^3.0.1", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.37.0", - "mdn-data": "^2.25.0", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.6", - "postcss-selector-parser": "^7.1.1", - "postcss-value-parser": "^4.2.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "stylelint": "^16.8.2" + "node": ">= 0.8.0" } }, - "node_modules/stylelint/node_modules/balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "license": "MIT" - }, - "node_modules/stylelint/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/oxfmt": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.62.0.tgz", + "integrity": "sha512-vxgGHTmnDU9j4CX7dDBLzxgmHxfda/yPcgJkGCMUSCwRmz+euo/V08xXLNgXTeqAB9Fhf3Pe2nO1RNKLCVgphQ==", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "tinypool": "2.1.0" + }, + "bin": { + "oxfmt": "bin/oxfmt" }, "engines": { - "node": ">=6.0" + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxfmt/binding-android-arm-eabi": "0.62.0", + "@oxfmt/binding-android-arm64": "0.62.0", + "@oxfmt/binding-darwin-arm64": "0.62.0", + "@oxfmt/binding-darwin-x64": "0.62.0", + "@oxfmt/binding-freebsd-x64": "0.62.0", + "@oxfmt/binding-linux-arm-gnueabihf": "0.62.0", + "@oxfmt/binding-linux-arm-musleabihf": "0.62.0", + "@oxfmt/binding-linux-arm64-gnu": "0.62.0", + "@oxfmt/binding-linux-arm64-musl": "0.62.0", + "@oxfmt/binding-linux-ppc64-gnu": "0.62.0", + "@oxfmt/binding-linux-riscv64-gnu": "0.62.0", + "@oxfmt/binding-linux-riscv64-musl": "0.62.0", + "@oxfmt/binding-linux-s390x-gnu": "0.62.0", + "@oxfmt/binding-linux-x64-gnu": "0.62.0", + "@oxfmt/binding-linux-x64-musl": "0.62.0", + "@oxfmt/binding-openharmony-arm64": "0.62.0", + "@oxfmt/binding-win32-arm64-msvc": "0.62.0", + "@oxfmt/binding-win32-ia32-msvc": "0.62.0", + "@oxfmt/binding-win32-x64-msvc": "0.62.0" + }, + "peerDependencies": { + "svelte": "^5.0.0", + "vite-plus": "*" }, "peerDependenciesMeta": { - "supports-color": { + "svelte": { + "optional": true + }, + "vite-plus": { "optional": true } } }, - "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "11.1.5", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz", - "integrity": "sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^6.1.23" - } - }, - "node_modules/stylelint/node_modules/flat-cache": { - "version": "6.1.23", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.23.tgz", - "integrity": "sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cacheable": "^2.5.0", - "flatted": "^3.4.2", - "hookified": "^1.15.0" - } - }, - "node_modules/stylelint/node_modules/ignore": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", - "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", + "node_modules/oxlint": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.77.0.tgz", + "integrity": "sha512-qnGh8XJHaQ0dprrDXNQZgS0FgjI6v+V3+X8DwmaV++5Aamy6jGKfDdQ1TUvhUxtmKFAbEf4/WeO5QZX+5WSngg==", "dev": true, "license": "MIT", + "bin": { + "oxlint": "bin/oxlint" + }, "engines": { - "node": ">= 4" + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxlint/binding-android-arm-eabi": "1.77.0", + "@oxlint/binding-android-arm64": "1.77.0", + "@oxlint/binding-darwin-arm64": "1.77.0", + "@oxlint/binding-darwin-x64": "1.77.0", + "@oxlint/binding-freebsd-x64": "1.77.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.77.0", + "@oxlint/binding-linux-arm-musleabihf": "1.77.0", + "@oxlint/binding-linux-arm64-gnu": "1.77.0", + "@oxlint/binding-linux-arm64-musl": "1.77.0", + "@oxlint/binding-linux-ppc64-gnu": "1.77.0", + "@oxlint/binding-linux-riscv64-gnu": "1.77.0", + "@oxlint/binding-linux-riscv64-musl": "1.77.0", + "@oxlint/binding-linux-s390x-gnu": "1.77.0", + "@oxlint/binding-linux-x64-gnu": "1.77.0", + "@oxlint/binding-linux-x64-musl": "1.77.0", + "@oxlint/binding-openharmony-arm64": "1.77.0", + "@oxlint/binding-win32-arm64-msvc": "1.77.0", + "@oxlint/binding-win32-ia32-msvc": "1.77.0", + "@oxlint/binding-win32-x64-msvc": "1.77.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=7.0.2001", + "vite-plus": "*" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + }, + "vite-plus": { + "optional": true + } } }, - "node_modules/stylelint/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/stylelint/node_modules/postcss-safe-parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", - "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "node_modules/oxlint-tsgolint": { + "version": "7.0.2001", + "resolved": "https://registry.npmjs.org/oxlint-tsgolint/-/oxlint-tsgolint-7.0.2001.tgz", + "integrity": "sha512-KjK/XLcXr1DSyonKhsuFqJRiuKqcyG9j3LJ8nkOsrLzGvodBPqzHOKauy10asLMDI0sUpvb+1sxlzff3udZvfg==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", - "engines": { - "node": ">=18.0" + "bin": { + "tsgolint": "bin/tsgolint.js" }, - "peerDependencies": { - "postcss": "^8.4.31" + "optionalDependencies": { + "@oxlint-tsgolint/darwin-arm64": "7.0.2001", + "@oxlint-tsgolint/darwin-x64": "7.0.2001", + "@oxlint-tsgolint/linux-arm64": "7.0.2001", + "@oxlint-tsgolint/linux-x64": "7.0.2001", + "@oxlint-tsgolint/win32-arm64": "7.0.2001", + "@oxlint-tsgolint/win32-x64": "7.0.2001" } }, - "node_modules/stylelint/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/patch-package": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", + "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^10.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.2.4", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" }, "engines": { - "node": ">=8" + "node": ">=14", + "npm": ">5" } }, - "node_modules/supports-hyperlinks": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", - "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "node_modules/patch-package/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14.18" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "node_modules/svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.2.tgz", - "integrity": "sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==", + "node_modules/patch-package/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "commander": "^11.1.0", - "css-select": "^5.1.0", - "css-tree": "^3.0.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.1.1", - "sax": "^1.5.0" - }, - "bin": { - "svgo": "bin/svgo.js" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/svgo/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "node_modules/patch-package/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", "engines": { - "node": ">=16" + "node": ">=8" } }, - "node_modules/svgo/node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "node_modules/patch-package/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": ">=12" } }, - "node_modules/sync-child-process": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", - "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "node_modules/patch-package/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", "dev": true, "license": "MIT", "dependencies": { - "sync-message-port": "^1.0.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=16.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/sync-message-port": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz", - "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==", + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=6" } }, - "node_modules/synckit": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", - "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", + "node_modules/patch-package/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.3.6" - }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" + "node": ">= 10.0.0" } }, - "node_modules/tabbable": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz", - "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==", + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true, "license": "MIT" }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/tailwindcss": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", - "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, - "node_modules/tapable": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", - "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/playwright": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz", + "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "playwright-core": "1.62.1" + }, + "bin": { + "playwright": "cli.js" }, "engines": { - "node": ">=6" + "node": ">=20" + }, + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/terser": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.49.2.tgz", - "integrity": "sha512-rGbJiKeQ4WDe3EXlDAIaQcwftVfv2Q8o1awFNfvXolJYKkb1AuZY1RTOmqx4LJXZENbWZA7eIsYGHuEzHsi1nQ==", + "node_modules/playwright-core": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz", + "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, + "license": "Apache-2.0", "bin": { - "terser": "bin/terser" + "playwright-core": "cli.js" }, "engines": { - "node": ">=10" + "node": ">=20" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.6.1.tgz", - "integrity": "sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==", + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "terser": "^5.31.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@minify-html/node": { - "optional": true - }, - "@swc/core": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "@swc/html": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "cssnano": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "html-minifier-terser": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "postcss": { - "optional": true - }, - "uglify-js": { - "optional": true - } + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/pngjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", + "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.19.0" } }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": ">= 10.13.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/thingies": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.1.tgz", - "integrity": "sha512-cV/CMGTK3M4MlnJ/0At6ismOw/A0EEniDNScajjz/Br3c1sqE72YD01rGpPTKwd27wAxI5Pr+6+0w8yofzFRYw==", + "node_modules/pretty-bytes": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-7.1.1.tgz", + "integrity": "sha512-X+vn9z8nOFZQlxOLmfJ0iKDdMD7jYTsTW12OAlCpdoE3Igik6L37pugIZi+N3usuyp5McfgKPWi12q3zvHLeGQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=10.18" + "node": ">=20" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "^2" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", - "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/tinyglobby": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", - "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" - }, "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "node": ">=6" } }, - "node_modules/tinypool": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-2.1.0.tgz", - "integrity": "sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==", + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true, "license": "MIT", "engines": { - "node": "^20.0.0 || >=22.0.0" + "node": ">=6" } }, - "node_modules/tinyrainbow": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", - "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", + "node_modules/quansync": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-1.0.0.tgz", + "integrity": "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" }, - "node_modules/tmp": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", - "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", "dev": true, "license": "MIT", "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" + "regex-utilities": "^2.3.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.6" + "dependencies": { + "regex-utilities": "^2.3.0" } }, - "node_modules/tokenx": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tokenx/-/tokenx-1.6.0.tgz", - "integrity": "sha512-CKTjk345ajvBAUp5xUI9a5KKN0zU0lBueVHQbCskH1Hp6WkUKsPW2qGCYNs0pxNyfzxfo+IIjdt2W4sMbw/qBw==", + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", "dev": true, "license": "MIT" }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "node_modules/remark-frontmatter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-frontmatter": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/tree-dump": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", - "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "node_modules/remark-frontmatter/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", - "bin": { - "tree-kill": "cli.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=4" } }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, "license": "MIT", "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/ts-api-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", - "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "node_modules/rolldown": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.3.tgz", + "integrity": "sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==", "dev": true, "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.143.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, "engines": { - "node": ">=18.12" + "node": "^20.19.0 || >=22.12.0" }, - "peerDependencies": { - "typescript": ">=4.8.4" + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.2.3", + "@rolldown/binding-darwin-arm64": "1.2.3", + "@rolldown/binding-darwin-x64": "1.2.3", + "@rolldown/binding-freebsd-x64": "1.2.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.3", + "@rolldown/binding-linux-arm64-gnu": "1.2.3", + "@rolldown/binding-linux-arm64-musl": "1.2.3", + "@rolldown/binding-linux-ppc64-gnu": "1.2.3", + "@rolldown/binding-linux-s390x-gnu": "1.2.3", + "@rolldown/binding-linux-x64-gnu": "1.2.3", + "@rolldown/binding-linux-x64-musl": "1.2.3", + "@rolldown/binding-openharmony-arm64": "1.2.3", + "@rolldown/binding-win32-arm64-msvc": "1.2.3", + "@rolldown/binding-win32-x64-msvc": "1.2.3" } }, - "node_modules/tsdown": { - "version": "0.22.14", - "resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.22.14.tgz", - "integrity": "sha512-ule7Y+fsAN2iZbLDoo7C4KYljFJNJJ+fLshyn+9gozeTspVersWHxwdGB+Dm2hzA38s6muFnUTl0jK3vJm9ifQ==", + "node_modules/rolldown-plugin-dts": { + "version": "0.27.14", + "resolved": "https://registry.npmjs.org/rolldown-plugin-dts/-/rolldown-plugin-dts-0.27.14.tgz", + "integrity": "sha512-ZvuDDwoIpRK9RPxDXratCpklFO9QZZWndf/sd0VBFb4LEj0jj07UcHK9OCh7V4XiFz2Z89ziyBC2K6tJiDjrbw==", "dev": true, "license": "MIT", "dependencies": { - "ansis": "^4.3.1", - "cac": "^7.0.0", - "defu": "^6.1.7", - "empathic": "^2.0.1", - "hookable": "^6.1.1", - "import-without-cache": "^0.4.0", + "dts-resolver": "^3.0.0", + "get-tsconfig": "5.0.0-beta.5", "obug": "^2.1.4", - "picomatch": "^4.0.5", - "rolldown": "~1.2.0", - "rolldown-plugin-dts": "^0.27.13", - "tinyexec": "^1.2.4", - "tinyglobby": "^0.2.17", - "tree-kill": "^1.2.2", - "unconfig-core": "^7.5.0", - "verkit": "^0.3.0" - }, - "bin": { - "tsdown": "dist/run.mjs" + "yuku-ast": "^0.8.0", + "yuku-codegen": "^0.8.0", + "yuku-parser": "^0.8.0" }, "engines": { "node": "^22.18.0 || >=24.11.0" @@ -22816,1560 +8103,1259 @@ "url": "https://github.com/sponsors/sxzz" }, "peerDependencies": { - "@arethetypeswrong/core": "^0.18.1", - "@tsdown/css": "0.22.14", - "@tsdown/exe": "0.22.14", - "@vitejs/devtools": "*", - "publint": "^0.3.8", - "tsx": "*", - "typescript": "^5.0.0 || ^6.0.0 || ^7.0.0", - "unplugin-unused": "^0.5.0", - "unrun": "*" + "@typescript/native-preview": "*", + "@volar/typescript": "~2.4.0", + "rolldown": "^1.0.0", + "typescript": "^5.0.0 || ^6.0.0 || ~7.0.0", + "vue-tsc": "~3.2.0 || ~3.3.0" }, "peerDependenciesMeta": { - "@arethetypeswrong/core": { - "optional": true - }, - "@tsdown/css": { - "optional": true - }, - "@tsdown/exe": { - "optional": true - }, - "@vitejs/devtools": { - "optional": true - }, - "publint": { + "@typescript/native-preview": { "optional": true }, - "tsx": { + "@volar/typescript": { "optional": true }, "typescript": { "optional": true }, - "unplugin-unused": { - "optional": true - }, - "unrun": { + "vue-tsc": { "optional": true } } }, - "node_modules/tsdown/node_modules/cac": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cac/-/cac-7.0.0.tgz", - "integrity": "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==", + "node_modules/rolldown-plugin-dts/node_modules/get-tsconfig": { + "version": "5.0.0-beta.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.5.tgz", + "integrity": "sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=20.19.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/twig": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/twig/-/twig-1.17.1.tgz", - "integrity": "sha512-atxccyr/BHtb1gPMA7Lvki0OuU17XBqHsNH9lzDHt9Rr1293EVZOosSZabEXz/DPVikIW8ZDqSkEddwyJnQN2w==", - "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@babel/runtime": "^7.8.4", - "locutus": "^2.0.11", - "minimatch": "3.0.x", - "walk": "2.3.x" - }, - "bin": { - "twigjs": "bin/twigjs" + "resolve-pkg-maps": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=20.20.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/twig/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } }, - "node_modules/twig/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/twig/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/twoslash-protocol": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.3.9.tgz", - "integrity": "sha512-9/iwp+CXOnjFMPQuPL5PkuRbZnDoNpBvtJCLs9t8kDYkL3YHujbvnHfZA1i5fApDftVEdBw+T/4F+dH5kIzpYQ==", + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/typescript": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", - "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc" - }, + "license": "MIT", "engines": { - "node": ">=16.20.0" - }, - "optionalDependencies": { - "@typescript/typescript-aix-ppc64": "7.0.2", - "@typescript/typescript-darwin-arm64": "7.0.2", - "@typescript/typescript-darwin-x64": "7.0.2", - "@typescript/typescript-freebsd-arm64": "7.0.2", - "@typescript/typescript-freebsd-x64": "7.0.2", - "@typescript/typescript-linux-arm": "7.0.2", - "@typescript/typescript-linux-arm64": "7.0.2", - "@typescript/typescript-linux-loong64": "7.0.2", - "@typescript/typescript-linux-mips64el": "7.0.2", - "@typescript/typescript-linux-ppc64": "7.0.2", - "@typescript/typescript-linux-riscv64": "7.0.2", - "@typescript/typescript-linux-s390x": "7.0.2", - "@typescript/typescript-linux-x64": "7.0.2", - "@typescript/typescript-netbsd-arm64": "7.0.2", - "@typescript/typescript-netbsd-x64": "7.0.2", - "@typescript/typescript-openbsd-arm64": "7.0.2", - "@typescript/typescript-openbsd-x64": "7.0.2", - "@typescript/typescript-sunos-x64": "7.0.2", - "@typescript/typescript-win32-arm64": "7.0.2", - "@typescript/typescript-win32-x64": "7.0.2" + "node": ">=8" } }, - "node_modules/ua-parser-js": { - "version": "1.0.41", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.41.tgz", - "integrity": "sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==", + "node_modules/shiki": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.0.2.tgz", + "integrity": "sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], "license": "MIT", - "bin": { - "ua-parser-js": "script/cli.js" + "dependencies": { + "@shikijs/core": "4.0.2", + "@shikijs/engine-javascript": "4.0.2", + "@shikijs/engine-oniguruma": "4.0.2", + "@shikijs/langs": "4.0.2", + "@shikijs/themes": "4.0.2", + "@shikijs/types": "4.0.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" }, "engines": { - "node": "*" + "node": ">=20" } }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/un-eval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/un-eval/-/un-eval-1.2.0.tgz", - "integrity": "sha512-Wlj/pum6dQtGTPD/lclDtoVPkSfpjPfy1dwnnKw/sZP5DpBH9fLhBgQfsqNhe5/gS1D+vkZUuB771NRMUPA5CA==", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/unconfig-core": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/unconfig-core/-/unconfig-core-7.5.0.tgz", - "integrity": "sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==", + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", "dev": true, "license": "MIT", "dependencies": { - "@quansync/fs": "^1.0.0", - "quansync": "^1.0.0" + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "engines": { + "node": ">=18" } }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "node_modules/smob": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.2.tgz", + "integrity": "sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/unified/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause" }, - "node_modules/unified/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "license": "MIT" }, - "node_modules/unified/node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "node_modules/std-env": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", + "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "license": "MIT" }, - "node_modules/unified/node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/union": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "dependencies": { - "qs": "^6.4.0" - }, + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/unist-util-is": { + "node_modules/string-width/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", - "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0" + "ansi-regex": "^5.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0" + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/unist-util-remove": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-4.0.0.tgz", - "integrity": "sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==", + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unist-util-visit": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", - "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" + "has-flag": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", - "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "node_modules/tabbable": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz", + "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", + "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" + "engines": { + "node": ">=6" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/webpack" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } + "license": "MIT" }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "node_modules/tinyexec": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", + "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=18" } }, - "node_modules/update-browserslist-db": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.0.tgz", - "integrity": "sha512-x/M6q3w4Ybp91CNaS4S69UnliqR3BzRpOT6LWbksjth0S/+jhfaPJsWjt/TewpT8j9eLIojUf5jr29WextHroA==", + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" + "fdir": "^6.5.0", + "picomatch": "^4.0.4" }, - "bin": { - "update-browserslist-db": "cli.js" + "engines": { + "node": ">=12.0.0" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/tinypool": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-2.1.0.tgz", + "integrity": "sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "license": "MIT", + "engines": { + "node": "^20.0.0 || >=22.0.0" } }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true, - "license": "MIT" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "node_modules/tinyrainbow": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", + "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "node_modules/tmp": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4.0" + "node": ">=14.14" } }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" + "is-number": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.0" } }, - "node_modules/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "node_modules/tokenx": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tokenx/-/tokenx-1.6.0.tgz", + "integrity": "sha512-CKTjk345ajvBAUp5xUI9a5KKN0zU0lBueVHQbCskH1Hp6WkUKsPW2qGCYNs0pxNyfzxfo+IIjdt2W4sMbw/qBw==", "dev": true, "license": "MIT" }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/verkit": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.3.2.tgz", - "integrity": "sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==", + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" + "bin": { + "tree-kill": "cli.js" } }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/vfile-message": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "dev": true, "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/vite": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.1.tgz", - "integrity": "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==", + "node_modules/tsdown": { + "version": "0.22.14", + "resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.22.14.tgz", + "integrity": "sha512-ule7Y+fsAN2iZbLDoo7C4KYljFJNJJ+fLshyn+9gozeTspVersWHxwdGB+Dm2hzA38s6muFnUTl0jK3vJm9ifQ==", "dev": true, "license": "MIT", "dependencies": { - "lightningcss": "^1.33.0", + "ansis": "^4.3.1", + "cac": "^7.0.0", + "defu": "^6.1.7", + "empathic": "^2.0.1", + "hookable": "^6.1.1", + "import-without-cache": "^0.4.0", + "obug": "^2.1.4", "picomatch": "^4.0.5", - "postcss": "^8.5.25", - "rolldown": "~1.2.1", - "tinyglobby": "^0.2.17" + "rolldown": "~1.2.0", + "rolldown-plugin-dts": "^0.27.13", + "tinyexec": "^1.2.4", + "tinyglobby": "^0.2.17", + "tree-kill": "^1.2.2", + "unconfig-core": "^7.5.0", + "verkit": "^0.3.0" }, "bin": { - "vite": "bin/vite.js" + "tsdown": "dist/run.mjs" }, "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": "^22.18.0 || >=24.11.0" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "url": "https://github.com/sponsors/sxzz" }, "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.4.0", - "esbuild": "^0.27.0 || ^0.28.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" + "@arethetypeswrong/core": "^0.18.1", + "@tsdown/css": "0.22.14", + "@tsdown/exe": "0.22.14", + "@vitejs/devtools": "*", + "publint": "^0.3.8", + "tsx": "*", + "typescript": "^5.0.0 || ^6.0.0 || ^7.0.0", + "unplugin-unused": "^0.5.0", + "unrun": "*" }, "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "@vitejs/devtools": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jiti": { + "@arethetypeswrong/core": { "optional": true }, - "less": { + "@tsdown/css": { "optional": true }, - "sass": { + "@tsdown/exe": { "optional": true }, - "sass-embedded": { + "@vitejs/devtools": { "optional": true }, - "stylus": { + "publint": { "optional": true }, - "sugarss": { + "tsx": { "optional": true }, - "terser": { + "typescript": { "optional": true }, - "tsx": { + "unplugin-unused": { "optional": true }, - "yaml": { + "unrun": { "optional": true } } }, - "node_modules/vitepress": { - "version": "2.0.0-alpha.19", - "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-2.0.0-alpha.19.tgz", - "integrity": "sha512-WnBsb0Bwr43kXKyiis+lld/7ri3hnMbthS8N3hpFtjjwsdLO4IRmiAE08D7aud4q6oMDf9uwRowxzNqRFe/amw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@docsearch/css": "^4.7.0", - "@docsearch/js": "^4.7.0", - "@docsearch/sidepanel-js": "^4.7.0", - "@iconify-json/simple-icons": "^1.2.92", - "@shikijs/core": "^4.4.1", - "@shikijs/transformers": "^4.4.1", - "@shikijs/types": "^4.4.1", - "@types/markdown-it": "^14.1.2", - "@vitejs/plugin-vue": "^6.0.8", - "@vue/devtools-api": "^8.2.1", - "@vue/shared": "^3.5.40", - "@vueuse/core": "^14.4.0", - "@vueuse/integrations": "^14.4.0", - "focus-trap": "^8.2.2", - "mark.js": "8.11.1", - "minisearch": "^7.2.0", - "shiki": "^4.4.1", - "vite": "^8.2.0", - "vue": "^3.5.40" - }, - "bin": { - "vitepress": "bin/vitepress.js" - }, - "peerDependencies": { - "markdown-it-mathjax3": "^4", - "postcss": "^8" - }, - "peerDependenciesMeta": { - "markdown-it-mathjax3": { - "optional": true - }, - "postcss": { - "optional": true - } + "node_modules/tsdown/node_modules/cac": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cac/-/cac-7.0.0.tgz", + "integrity": "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.19.0" } }, - "node_modules/vitepress-plugin-llms": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/vitepress-plugin-llms/-/vitepress-plugin-llms-1.12.0.tgz", - "integrity": "sha512-zuzL7a8UJuGl46le5cAy/QxKMGlpSylcsLjDDn6BYPc1u+eP3nzoQk9ne9XFBqrE7exoJlIYJELVN8HMgYlFKQ==", + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/twoslash-protocol": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.3.9.tgz", + "integrity": "sha512-9/iwp+CXOnjFMPQuPL5PkuRbZnDoNpBvtJCLs9t8kDYkL3YHujbvnHfZA1i5fApDftVEdBw+T/4F+dH5kIzpYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { - "gray-matter": "^4.0.3", - "markdown-it": "^14.1.0", - "markdown-title": "^1.0.2", - "mdast-util-from-markdown": "^2.0.3", - "millify": "^6.1.0", - "minimatch": "^10.2.4", - "path-to-regexp": "^6.3.0", - "picocolors": "^1.1.1", - "pretty-bytes": "^7.1.0", - "remark": "^15.0.1", - "remark-frontmatter": "^5.0.0", - "tokenx": "^1.3.0", - "unist-util-remove": "^4.0.0", - "unist-util-visit": "^5.1.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=18.0.0" + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc" }, - "funding": { - "url": "https://github.com/sponsors/okineadev" + "engines": { + "node": ">=16.20.0" + }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" } }, - "node_modules/vitepress-plugin-llms/node_modules/remark": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz", - "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==", + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/unconfig-core": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/unconfig-core/-/unconfig-core-7.5.0.tgz", + "integrity": "sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" + "@quansync/fs": "^1.0.0", + "quansync": "^1.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/vitepress-plugin-llms/node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vitepress-plugin-llms/node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vitepress-plugin-llms/node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "node_modules/unist-util-remove": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-4.0.0.tgz", + "integrity": "sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==", "dev": true, "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vitepress/node_modules/@shikijs/core": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.2.tgz", - "integrity": "sha512-StyzbAyxg2/tBGf78gwbBkGyeQ73lf8UiJArFaQhTQIDqQOCKPCQFanvrs4/Yv3Yfyc+ONInJM6K+FMIf+P+kA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/primitive": "4.4.2", - "@shikijs/types": "4.4.2", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.5", - "hast-util-to-html": "^9.0.5" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/vitepress/node_modules/@shikijs/engine-javascript": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.2.tgz", - "integrity": "sha512-MnIkeqWdVPUWsxlx8gKLVCJFTsqrQJgpTPBPpQwaFeJ56lOnJxj5aN2LUFnfxUEcvOQuNocmbaMnVrCEln6rkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "4.4.2", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^4.3.6" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/vitepress/node_modules/@shikijs/engine-oniguruma": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.2.tgz", - "integrity": "sha512-GLhowz1+jixjz+wiZ3wMnOn1jTxiFCGl2PkXufivbnwPHKuyw1AYqu5/hbWhZZ2oAb0NP05WUJhYeigY14drnw==", + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.2", - "@shikijs/vscode-textmate": "^10.0.2" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=20" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vitepress/node_modules/@shikijs/langs": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.2.tgz", - "integrity": "sha512-8DfeusD+Zdv/eYIDdXyJTUnSMHt+aAWjAOCXV20HNGAHRlInXpG8wh421v6B91WOm9TFwRLN+b/LG5F2NAIojg==", + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.2" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, - "engines": { - "node": ">=20" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vitepress/node_modules/@shikijs/primitive": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.2.tgz", - "integrity": "sha512-l6fQQKsOMlz72n38fztmSgZ76MO6KSWuw8o+GJ+FhmqrpC9pIOJNQNXGgbb5yX2AwpzlEHwsaLPnk/8o4Fm+rA==", + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "4.4.2", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.5" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, - "engines": { - "node": ">=20" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vitepress/node_modules/@shikijs/themes": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.2.tgz", - "integrity": "sha512-H0CFoL07ddDC2Dd6EdrPYNkRhUR6YCkJlnuYFceYYUJJA5TIm2b5B33qqiDYryBExgbKMndFJPb2u1gTuqO37g==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@shikijs/types": "4.4.2" - }, - "engines": { - "node": ">=20" + "punycode": "^2.1.0" } - }, - "node_modules/vitepress/node_modules/@shikijs/types": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.2.tgz", - "integrity": "sha512-PFYitV4vpDr/iPCIhnHp+Q4ftic5N5VeNJ3KQ1O8gn3h2ar8qgwMAXF7tq4m1CWaMS60fV4VqF6vfnWH4F7vqQ==", + }, + "node_modules/verkit": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.3.2.tgz", + "integrity": "sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==", "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.5" - }, "engines": { - "node": ">=20" + "node": ">=18.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" } }, - "node_modules/vitepress/node_modules/focus-trap": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-8.2.2.tgz", - "integrity": "sha512-qV0g8hRYBqgACcFOH3f9wXc4zPKhr/0z9RI2a6ZijZ72EeBi4g8oBy8zAWuUR1TsMpOzwpUMFvjdasrC41Joug==", + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "dev": true, "license": "MIT", "dependencies": { - "tabbable": "^6.5.0" + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vitepress/node_modules/shiki": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.2.tgz", - "integrity": "sha512-P8F/dFhRevaw2uSdeIYlq/5SXZNY85DPtmXQ947gD1Zj2JqO5AkNvVVBar0Me9JkFx3uzVud/qOtP5ek9NEQGA==", + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "4.4.2", - "@shikijs/engine-javascript": "4.4.2", - "@shikijs/engine-oniguruma": "4.4.2", - "@shikijs/langs": "4.4.2", - "@shikijs/themes": "4.4.2", - "@shikijs/types": "4.4.2", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.5" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">=20" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vitest": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz", - "integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==", + "node_modules/vite": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.1.tgz", + "integrity": "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.1.10", - "@vitest/mocker": "4.1.10", - "@vitest/pretty-format": "4.1.10", - "@vitest/runner": "4.1.10", - "@vitest/snapshot": "4.1.10", - "@vitest/spy": "4.1.10", - "@vitest/utils": "4.1.10", - "es-module-lexer": "^2.0.0", - "expect-type": "^1.3.0", - "magic-string": "^0.30.21", - "obug": "^2.1.1", - "pathe": "^2.0.3", - "picomatch": "^4.0.3", - "std-env": "^4.0.0-rc.1", - "tinybench": "^2.9.0", - "tinyexec": "^1.0.2", - "tinyglobby": "^0.2.15", - "tinyrainbow": "^3.1.0", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", - "why-is-node-running": "^2.3.0" + "lightningcss": "^1.33.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.25", + "rolldown": "~1.2.1", + "tinyglobby": "^0.2.17" }, "bin": { - "vitest": "vitest.mjs" + "vite": "bin/vite.js" }, "engines": { - "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" }, "peerDependencies": { - "@edge-runtime/vm": "*", - "@opentelemetry/api": "^1.9.0", - "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.10", - "@vitest/browser-preview": "4.1.10", - "@vitest/browser-webdriverio": "4.1.10", - "@vitest/coverage-istanbul": "4.1.10", - "@vitest/coverage-v8": "4.1.10", - "@vitest/ui": "4.1.10", - "happy-dom": "*", - "jsdom": "*", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.4.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { - "@edge-runtime/vm": { + "@types/node": { "optional": true }, - "@opentelemetry/api": { + "@vitejs/devtools": { "optional": true }, - "@types/node": { + "esbuild": { "optional": true }, - "@vitest/browser-playwright": { + "jiti": { "optional": true }, - "@vitest/browser-preview": { + "less": { "optional": true }, - "@vitest/browser-webdriverio": { + "sass": { "optional": true }, - "@vitest/coverage-istanbul": { + "sass-embedded": { "optional": true }, - "@vitest/coverage-v8": { + "stylus": { "optional": true }, - "@vitest/ui": { + "sugarss": { "optional": true }, - "happy-dom": { + "terser": { "optional": true }, - "jsdom": { + "tsx": { "optional": true }, - "vite": { - "optional": false - } - } - }, - "node_modules/vue": { - "version": "3.5.41", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.41.tgz", - "integrity": "sha512-2laE0p+aK+/AOPG/XL/WepOs/GlK755LJ1XECi9kDUrz1FKNw8rb2Xzlw9JS1rqEV55nb0ttsKxVlTCcd+R5cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.41", - "@vue/compiler-sfc": "3.5.41", - "@vue/runtime-dom": "3.5.41", - "@vue/server-renderer": "3.5.41", - "@vue/shared": "3.5.41" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-eslint-parser": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.4.1.tgz", - "integrity": "sha512-Gk6gRDj0n/fkRa3C3l0bBheoBckUq/Rs0F/TvMWIS6nzzx67amAViMe9CkNgsP2tXyQONvGiHQESHwFtZ3aYDA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "^4.4.0", - "eslint-scope": "^8.2.0 || ^9.0.0", - "eslint-visitor-keys": "^4.2.0 || ^5.0.0", - "espree": "^10.3.0 || ^11.0.0", - "esquery": "^1.6.0", - "semver": "^7.6.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0" - } - }, - "node_modules/vue-eslint-parser/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { + "yaml": { "optional": true } } }, - "node_modules/vue-eslint-parser/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/vue-resize": { - "version": "2.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz", - "integrity": "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/walk": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.15.tgz", - "integrity": "sha512-4eRTBZljBfIISK1Vnt69Gvr2w/wc3U6Vtrw7qiN5iqYJPH7LElcYh/iU4XWhdCy2dZqv1ToMyYlybDylfG/5Vg==", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "foreachasync": "^3.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", - "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack": { - "version": "5.109.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.109.2.tgz", - "integrity": "sha512-U9/cvLzxObKNEZ9+TtdqrHM5/9z3lgl2c+c4BzbqGxFQvQvBAq87yql5A8pQ+rrMbS496MZJeF5enVBndIy2hw==", + "node_modules/vitepress": { + "version": "2.0.0-alpha.19", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-2.0.0-alpha.19.tgz", + "integrity": "sha512-WnBsb0Bwr43kXKyiis+lld/7ri3hnMbthS8N3hpFtjjwsdLO4IRmiAE08D7aud4q6oMDf9uwRowxzNqRFe/amw==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.16.0", - "browserslist": "^4.28.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.24.4", - "es-module-lexer": "^2.1.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "graceful-fs": "^4.2.11", - "mime-db": "^1.54.0", - "minimizer-webpack-plugin": "^5.6.1", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.0", - "watchpack": "^2.5.2", - "webpack-sources": "^3.5.1" + "@docsearch/css": "^4.7.0", + "@docsearch/js": "^4.7.0", + "@docsearch/sidepanel-js": "^4.7.0", + "@iconify-json/simple-icons": "^1.2.92", + "@shikijs/core": "^4.4.1", + "@shikijs/transformers": "^4.4.1", + "@shikijs/types": "^4.4.1", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^6.0.8", + "@vue/devtools-api": "^8.2.1", + "@vue/shared": "^3.5.40", + "@vueuse/core": "^14.4.0", + "@vueuse/integrations": "^14.4.0", + "focus-trap": "^8.2.2", + "mark.js": "8.11.1", + "minisearch": "^7.2.0", + "shiki": "^4.4.1", + "vite": "^8.2.0", + "vue": "^3.5.40" }, "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" + "vitepress": "bin/vitepress.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "markdown-it-mathjax3": "^4", + "postcss": "^8" }, "peerDependenciesMeta": { - "webpack-cli": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { "optional": true } } }, - "node_modules/webpack-assets-manifest": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/webpack-assets-manifest/-/webpack-assets-manifest-6.5.2.tgz", - "integrity": "sha512-UNi1LmOJUEsLpAYTV21ftp5HYsxePvhIEvAIij84I3wBCYDOman3tevsglxfC+F+GFWEDhFkwrvIzbvXqTYqrw==", + "node_modules/vitepress-plugin-llms": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/vitepress-plugin-llms/-/vitepress-plugin-llms-1.12.0.tgz", + "integrity": "sha512-zuzL7a8UJuGl46le5cAy/QxKMGlpSylcsLjDDn6BYPc1u+eP3nzoQk9ne9XFBqrE7exoJlIYJELVN8HMgYlFKQ==", "dev": true, "license": "MIT", "dependencies": { - "deepmerge": "^4.3.1", - "proper-lockfile": "^4.1.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.3" + "gray-matter": "^4.0.3", + "markdown-it": "^14.1.0", + "markdown-title": "^1.0.2", + "mdast-util-from-markdown": "^2.0.3", + "millify": "^6.1.0", + "minimatch": "^10.2.4", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "pretty-bytes": "^7.1.0", + "remark": "^15.0.1", + "remark-frontmatter": "^5.0.0", + "tokenx": "^1.3.0", + "unist-util-remove": "^4.0.0", + "unist-util-visit": "^5.1.0" }, "engines": { - "node": ">=20.10.0" + "node": ">=18.0.0" }, - "peerDependencies": { - "webpack": "^5.61.0" + "funding": { + "url": "https://github.com/sponsors/okineadev" } }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "node_modules/vitepress-plugin-llms/node_modules/remark": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz", + "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==", "dev": true, "license": "MIT", "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" + "@types/mdast": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack-bundle-analyzer/node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack-bundle-analyzer/node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "node_modules/vitepress-plugin-llms/node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "dev": true, "license": "MIT", "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" }, - "engines": { - "node": ">= 10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.13", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.13.tgz", - "integrity": "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==", + "node_modules/vitepress-plugin-llms/node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack-dev-middleware": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", - "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", + "node_modules/vitepress-plugin-llms/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "dev": true, "license": "MIT", "dependencies": { - "colorette": "^2.0.10", - "memfs": "^4.43.1", - "mime-types": "^3.0.1", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 18.12.0" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } + "url": "https://opencollective.com/unified" } }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "node_modules/vitepress/node_modules/@shikijs/core": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.4.2.tgz", + "integrity": "sha512-StyzbAyxg2/tBGf78gwbBkGyeQ73lf8UiJArFaQhTQIDqQOCKPCQFanvrs4/Yv3Yfyc+ONInJM6K+FMIf+P+kA==", "dev": true, "license": "MIT", + "dependencies": { + "@shikijs/primitive": "4.4.2", + "@shikijs/types": "4.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5", + "hast-util-to-html": "^9.0.5" + }, "engines": { - "node": ">= 0.6" + "node": ">=20" } }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "node_modules/vitepress/node_modules/@shikijs/engine-javascript": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.4.2.tgz", + "integrity": "sha512-MnIkeqWdVPUWsxlx8gKLVCJFTsqrQJgpTPBPpQwaFeJ56lOnJxj5aN2LUFnfxUEcvOQuNocmbaMnVrCEln6rkw==", "dev": true, "license": "MIT", "dependencies": { - "mime-db": "^1.54.0" + "@shikijs/types": "4.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^4.3.6" }, "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=20" } }, - "node_modules/webpack-dev-middleware/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/vitepress/node_modules/@shikijs/engine-oniguruma": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.4.2.tgz", + "integrity": "sha512-GLhowz1+jixjz+wiZ3wMnOn1jTxiFCGl2PkXufivbnwPHKuyw1AYqu5/hbWhZZ2oAb0NP05WUJhYeigY14drnw==", "dev": true, "license": "MIT", "dependencies": { - "ee-first": "1.1.1" + "@shikijs/types": "4.4.2", + "@shikijs/vscode-textmate": "^10.0.2" }, "engines": { - "node": ">= 0.8" + "node": ">=20" } }, - "node_modules/webpack-hot-middleware": { - "version": "2.26.1", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz", - "integrity": "sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==", + "node_modules/vitepress/node_modules/@shikijs/langs": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.4.2.tgz", + "integrity": "sha512-8DfeusD+Zdv/eYIDdXyJTUnSMHt+aAWjAOCXV20HNGAHRlInXpG8wh421v6B91WOm9TFwRLN+b/LG5F2NAIojg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-html-community": "0.0.8", - "html-entities": "^2.1.0", - "strip-ansi": "^6.0.0" - } - }, - "node_modules/webpack-hot-middleware/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", + "@shikijs/types": "4.4.2" + }, "engines": { - "node": ">=8" + "node": ">=20" } }, - "node_modules/webpack-hot-middleware/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/vitepress/node_modules/@shikijs/primitive": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.4.2.tgz", + "integrity": "sha512-l6fQQKsOMlz72n38fztmSgZ76MO6KSWuw8o+GJ+FhmqrpC9pIOJNQNXGgbb5yX2AwpzlEHwsaLPnk/8o4Fm+rA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "@shikijs/types": "4.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" }, "engines": { - "node": ">=8" + "node": ">=20" } }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "node_modules/vitepress/node_modules/@shikijs/themes": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.4.2.tgz", + "integrity": "sha512-H0CFoL07ddDC2Dd6EdrPYNkRhUR6YCkJlnuYFceYYUJJA5TIm2b5B33qqiDYryBExgbKMndFJPb2u1gTuqO37g==", "dev": true, "license": "MIT", "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" + "@shikijs/types": "4.4.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20" } }, - "node_modules/webpack-module-hot-accept": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/webpack-module-hot-accept/-/webpack-module-hot-accept-1.0.5.tgz", - "integrity": "sha512-Okwki36HfGp17GAhG6RA5rq7dUG/X9qA/NKsvcOOTK8YT9twGjF9HBqYBsk5ZOjA0jbSxbQ/ISWyh777JvinqA==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack-remove-empty-scripts": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/webpack-remove-empty-scripts/-/webpack-remove-empty-scripts-1.1.1.tgz", - "integrity": "sha512-FqmIy7joxXd0/7jz8UjzMXOKc6B7LR+ynfgaaaH72xUT917h3A94ERxOLvGM8a8XdGIvUsdTLIUt8aBQM2Pdqg==", + "node_modules/vitepress/node_modules/@shikijs/types": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.4.2.tgz", + "integrity": "sha512-PFYitV4vpDr/iPCIhnHp+Q4ftic5N5VeNJ3KQ1O8gn3h2ar8qgwMAXF7tq4m1CWaMS60fV4VqF6vfnWH4F7vqQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "ansis": "4.0.0-node10" + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" }, "engines": { - "node": ">=12.14" - }, - "funding": { - "type": "patreon", - "url": "https://patreon.com/biodiscus" - }, - "peerDependencies": { - "webpack": ">=5.32.0" + "node": ">=20" } }, - "node_modules/webpack-remove-empty-scripts/node_modules/ansis": { - "version": "4.0.0-node10", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.0.0-node10.tgz", - "integrity": "sha512-BRrU0Bo1X9dFGw6KgGz6hWrqQuOlVEDOzkb0QSLZY9sXHqA7pNj7yHPVJRz7y/rj4EOJ3d/D5uxH+ee9leYgsg==", + "node_modules/vitepress/node_modules/focus-trap": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-8.2.2.tgz", + "integrity": "sha512-qV0g8hRYBqgACcFOH3f9wXc4zPKhr/0z9RI2a6ZijZ72EeBi4g8oBy8zAWuUR1TsMpOzwpUMFvjdasrC41Joug==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "tabbable": "^6.5.0" } }, - "node_modules/webpack-sources": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.1.tgz", - "integrity": "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==", + "node_modules/vitepress/node_modules/shiki": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.4.2.tgz", + "integrity": "sha512-P8F/dFhRevaw2uSdeIYlq/5SXZNY85DPtmXQ947gD1Zj2JqO5AkNvVVBar0Me9JkFx3uzVud/qOtP5ek9NEQGA==", "dev": true, "license": "MIT", + "dependencies": { + "@shikijs/core": "4.4.2", + "@shikijs/engine-javascript": "4.4.2", + "@shikijs/engine-oniguruma": "4.4.2", + "@shikijs/langs": "4.4.2", + "@shikijs/themes": "4.4.2", + "@shikijs/types": "4.4.2", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.5" + }, "engines": { - "node": ">=10.13.0" + "node": ">=20" } }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/vitest": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz", + "integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@vitest/expect": "4.1.10", + "@vitest/mocker": "4.1.10", + "@vitest/pretty-format": "4.1.10", + "@vitest/runner": "4.1.10", + "@vitest/snapshot": "4.1.10", + "@vitest/spy": "4.1.10", + "@vitest/utils": "4.1.10", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpackbar": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-7.0.0.tgz", - "integrity": "sha512-aS9soqSO2iCHgqHoCrj4LbfGQUboDCYJPSFOAchEK+9psIjNrfSWW4Y0YEz67MKURNvMmfo0ycOg9d/+OOf9/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansis": "^3.2.0", - "consola": "^3.2.3", - "pretty-time": "^1.1.0", - "std-env": "^3.7.0" + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" }, - "engines": { - "node": ">=14.21.3" + "funding": { + "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@rspack/core": "*", - "webpack": "3 || 4 || 5" + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.10", + "@vitest/browser-preview": "4.1.10", + "@vitest/browser-webdriverio": "4.1.10", + "@vitest/coverage-istanbul": "4.1.10", + "@vitest/coverage-v8": "4.1.10", + "@vitest/ui": "4.1.10", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { - "@rspack/core": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { "optional": true }, - "webpack": { + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { "optional": true + }, + "vite": { + "optional": false } } }, - "node_modules/webpackbar/node_modules/ansis": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", - "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - } - }, - "node_modules/webpackbar/node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "dev": true, - "license": "MIT" - }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "node_modules/vue": { + "version": "3.5.41", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.41.tgz", + "integrity": "sha512-2laE0p+aK+/AOPG/XL/WepOs/GlK755LJ1XECi9kDUrz1FKNw8rb2Xzlw9JS1rqEV55nb0ttsKxVlTCcd+R5cg==", "dev": true, "license": "MIT", "dependencies": { - "iconv-lite": "0.6.3" + "@vue/compiler-dom": "3.5.41", + "@vue/compiler-sfc": "3.5.41", + "@vue/runtime-dom": "3.5.41", + "@vue/server-renderer": "3.5.41", + "@vue/shared": "3.5.41" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "peerDependencies": { + "typescript": "*" }, - "engines": { - "node": ">=0.10.0" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "node_modules/vue-resize": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz", + "integrity": "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "peerDependencies": { + "vue": "^3.0.0" } }, "node_modules/which": { @@ -24405,13 +9391,6 @@ "node": ">=8" } }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true, - "license": "MIT" - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -24479,27 +9458,6 @@ "node": ">=8" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/ws": { "version": "8.21.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", @@ -24522,25 +9480,6 @@ } } }, - "node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/xmlhttprequest-ssl": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", - "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -24593,32 +9532,6 @@ "node": ">=12" } }, - "node_modules/yocto-queue": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", - "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yoctocolors": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", - "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/yuku-ast": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/yuku-ast/-/yuku-ast-0.8.4.tgz", @@ -24678,96 +9591,6 @@ "@yuku-parser/binding-win32-x64": "0.8.4" } }, - "node_modules/zip-stream": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", - "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "archiver-utils": "^3.0.4", - "compress-commons": "^4.1.2", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/zip-stream/node_modules/archiver-utils": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", - "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "^7.2.3", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/zip-stream/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/zip-stream/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/zip-stream/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/zip-stream/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", @@ -24779,56 +9602,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "packages/demo": { - "name": "@studiometa/js-toolkit-demo", - "version": "3.9.0", - "dependencies": { - "@studiometa/ui": "1.7.0" - }, - "devDependencies": { - "@studiometa/eslint-config": "4.3.1", - "@studiometa/prettier-config": "4.4.0", - "@studiometa/stylelint-config": "4.1.1", - "@studiometa/tailwind-config": "3.0.0", - "@studiometa/webpack-config": "6.3.6", - "@studiometa/webpack-config-preset-prototyping": "6.3.6", - "@studiometa/webpack-config-preset-tailwindcss-4": "6.4.0", - "http-server": "14.1.1", - "prettier": "3.8.1", - "tailwindcss": "4.2.4" - } - }, - "packages/demo/node_modules/@studiometa/webpack-config-preset-tailwindcss-4": { - "version": "6.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@tailwindcss/postcss": "^4.0.0" - }, - "engines": { - "node": ">=20.11.0" - }, - "peerDependencies": { - "tailwindcss": "^4.0.0" - } - }, - "packages/demo/node_modules/tailwindcss": { - "version": "4.2.4", - "dev": true, - "license": "MIT" - }, - "packages/docs": { - "name": "@studiometa/js-toolkit-docs", - "version": "3.9.0", - "devDependencies": { - "@shikijs/vitepress-twoslash": "4.0.2", - "@studiometa/tailwind-config": "3.0.0", - "@tailwindcss/vite": "4.2.2", - "tailwindcss": "4.2.2", - "vitepress": "2.0.0-alpha.19", - "vitepress-plugin-llms": "1.12.0" - } - }, "packages/eslint-plugin": { "name": "@studiometa/eslint-plugin-js-toolkit", "version": "3.9.0", @@ -24846,28 +9619,8 @@ }, "packages/js-toolkit": { "name": "@studiometa/js-toolkit", - "version": "3.9.0", + "version": "4.0.0-alpha.0", "license": "MIT", - "dependencies": { - "@motionone/easing": "^10.18.0", - "deepmerge": "^4.3.1" - }, - "devDependencies": { - "@happy-dom/global-registrator": "20.8.8", - "@vitest/browser": "4.1.10", - "@vitest/browser-playwright": "4.1.10", - "@vitest/coverage-v8": "4.1.10", - "esbuild": "0.27.0", - "fast-glob": "3.3.3", - "happy-dom": "20.8.8", - "playwright": "^1.50.0", - "tsdown": "0.22.14", - "vitest": "4.1.10" - } - }, - "packages/v4": { - "name": "@studiometa/js-toolkit-v4", - "version": "0.0.0", "dependencies": { "morphdom": "^2.7.8" }, @@ -24880,6 +9633,7 @@ "@vitest/browser": "4.1.10", "@vitest/browser-playwright": "4.1.10", "fast-glob": "3.3.3", + "focus-trap": "^7.8.0", "playwright": "^1.50.0", "tailwindcss": "4.2.2", "tsdown": "0.22.14", diff --git a/package.json b/package.json index a2b33a1d3..b70cc434f 100644 --- a/package.json +++ b/package.json @@ -1,49 +1,40 @@ { "name": "@studiometa/js-toolkit-workspace", - "version": "3.9.0", + "version": "4.0.0-alpha.0", "private": true, "type": "module", "workspaces": [ "packages/*" ], "scripts": { - "demo:dev": "npm run dev --workspace=@studiometa/js-toolkit-demo", - "demo:watch": "npm run watch --workspace=@studiometa/js-toolkit-demo", - "demo:build": "npm run build --workspace=@studiometa/js-toolkit-demo", - "demo:preview": "npm run preview --workspace=@studiometa/js-toolkit-demo", - "docs:dev": "npm run dev --workspace=@studiometa/js-toolkit-docs", - "docs:build": "npm run build --workspace=@studiometa/js-toolkit-docs", - "docs:preview": "npm run preview --workspace=@studiometa/js-toolkit-docs", - "docs:v4:dev": "npm run docs:dev -w @studiometa/js-toolkit-v4", - "docs:v4:build": "npm run docs:build -w @studiometa/js-toolkit-v4", - "docs:v4:preview": "npm run docs:preview -w @studiometa/js-toolkit-v4", - "build": "npm run build:js-toolkit && npm run build:v4 && npm run build:eslint-plugin", + "demo:dev": "npm run demo:dev -w @studiometa/js-toolkit", + "demo:build": "npm run demo:build -w @studiometa/js-toolkit", + "demo:preview": "npm run demo:preview -w @studiometa/js-toolkit", + "docs:dev": "npm run docs:dev -w @studiometa/js-toolkit", + "docs:build": "npm run docs:build -w @studiometa/js-toolkit", + "docs:preview": "npm run docs:preview -w @studiometa/js-toolkit", + "build": "npm run build:js-toolkit && npm run build:eslint-plugin", "build:js-toolkit": "npm run build -w @studiometa/js-toolkit", - "build:v4": "npm run build -w @studiometa/js-toolkit-v4", "build:eslint-plugin": "npm run build -w @studiometa/eslint-plugin-js-toolkit", - "measure": "npm run measure -w @studiometa/js-toolkit", "test": "npm run test -w @studiometa/js-toolkit", "test:watch": "npm run test:watch -w @studiometa/js-toolkit", - "test:v4": "npm run test -w @studiometa/js-toolkit-v4", "test:eslint-plugin": "npm run test -w @studiometa/eslint-plugin-js-toolkit", "bench": "npm run bench -w @studiometa/js-toolkit", - "bench:run": "npm run bench:run -w @studiometa/js-toolkit", - "bench:v4": "npm run bench:report -w @studiometa/js-toolkit-v4", + "bench:report": "npm run bench:report -w @studiometa/js-toolkit", "lint": "npm run subpaths:check && npm run lint:static && npm run lint:fmt && npm run lint:types", - "lint:static": "oxlint --ignore-pattern packages/v4/ . && oxlint --type-aware packages/v4", + "lint:static": "oxlint --ignore-pattern packages/js-toolkit/ . && oxlint --type-aware packages/js-toolkit", "lint:fmt": "oxfmt --check .", "lint:types": "npm run lint:types --workspaces --if-present", "fix": "npm run fix:static && npm run fix:fmt", "fix:static": "npm run lint:static -- --fix", "fix:fmt": "oxfmt .", "postversion": "npm version --workspaces $npm_package_version", - "subpaths": "node scripts/generate-subpaths.js packages/js-toolkit packages/v4", - "subpaths:check": "node scripts/generate-subpaths.js --check packages/js-toolkit packages/v4", + "subpaths": "node scripts/generate-subpaths.js packages/js-toolkit", + "subpaths:check": "node scripts/generate-subpaths.js --check packages/js-toolkit", "postinstall": "patch-package" }, "devDependencies": { "@types/node": "22.19.0", - "focus-trap": "^7.8.0", "oxfmt": "0.62.0", "oxlint": "1.77.0", "oxlint-tsgolint": "7.0.2001", diff --git a/packages/demo/eslint.config.js b/packages/demo/eslint.config.js deleted file mode 100644 index a969d6abf..000000000 --- a/packages/demo/eslint.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig, js, ts, prettier, globals } from '@studiometa/eslint-config'; - -export default defineConfig(js, ts, prettier, { - files: ['src/js/**/*'], - languageOptions: { - globals: globals.browser, - }, -}); diff --git a/packages/demo/meta.config.js b/packages/demo/meta.config.js deleted file mode 100644 index 6d68dd547..000000000 --- a/packages/demo/meta.config.js +++ /dev/null @@ -1,34 +0,0 @@ -import { fileURLToPath } from 'node:url'; -import { resolve, dirname } from 'node:path'; -import { defineConfig } from '@studiometa/webpack-config'; -import { prototyping } from '@studiometa/webpack-config-preset-prototyping'; -import { tailwindcss } from '@studiometa/webpack-config-preset-tailwindcss-4'; - -export default defineConfig({ - presets: [ - prototyping({ - ts: true, - tailwindcss, - twig: { - namespaces: { - ui: dirname(fileURLToPath(import.meta.resolve('@studiometa/ui'))), - }, - }, - }), - ], - webpack(config) { - config.resolve.alias = { - ...config.resolve.alias, - '@studiometa/js-toolkit': resolve('../js-toolkit/src'), - }; - - config.cache = { - ...config.cache, - buildDependencies: { - config: [import.meta.filename], - toolkit: [resolve('../js-toolkit/src')], - }, - }; - config.cache = false; - }, -}); diff --git a/packages/demo/package.json b/packages/demo/package.json deleted file mode 100644 index 1a364d17c..000000000 --- a/packages/demo/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "@studiometa/js-toolkit-demo", - "version": "3.9.0", - "private": true, - "type": "module", - "scripts": { - "dev": "meta dev", - "watch": "meta watch", - "build": "meta build", - "prepreview": "meta build", - "preview": "http-server ./dist -o", - "lint": "npm run lint:eslint && npm run lint:stylelint && npm run lint:prettier", - "lint:eslint": "eslint --cache ./src/js", - "lint:stylelint": "stylelint --cache ./src/**/*.{scss,vue}", - "lint:prettier": "prettier -c --cache ./src/**/*.twig", - "fix": "npm run fix:eslint && npm run fix:stylelint && npm run fix:prettier", - "fix:eslint": "npm run lint:eslint -- --fix", - "fix:stylelint": "npm run lint:stylelint -- --fix", - "fix:prettier": "npm run lint:prettier -- --write" - }, - "dependencies": { - "@studiometa/ui": "1.7.0" - }, - "devDependencies": { - "@studiometa/eslint-config": "4.3.1", - "@studiometa/prettier-config": "4.4.0", - "@studiometa/stylelint-config": "4.1.1", - "@studiometa/tailwind-config": "3.0.0", - "@studiometa/webpack-config": "6.3.6", - "@studiometa/webpack-config-preset-prototyping": "6.3.6", - "@studiometa/webpack-config-preset-tailwindcss-4": "6.4.0", - "http-server": "14.1.1", - "prettier": "3.8.1", - "tailwindcss": "4.2.4" - }, - "stylelint": { - "extends": "@studiometa/stylelint-config" - } -} diff --git a/packages/demo/prettier.config.js b/packages/demo/prettier.config.js deleted file mode 100644 index a480c07b3..000000000 --- a/packages/demo/prettier.config.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * The demo keeps Prettier for its Twig templates, which `oxfmt` — the formatter - * of the rest of the repository — does not cover. - */ -export { default } from '@studiometa/prettier-config'; diff --git a/packages/demo/src/css/styles.css b/packages/demo/src/css/styles.css deleted file mode 100644 index 75e26c551..000000000 --- a/packages/demo/src/css/styles.css +++ /dev/null @@ -1,4 +0,0 @@ -@import 'tailwindcss'; -@import '@studiometa/tailwind-config'; -@source '../../node_modules/@studiometa/ui'; -@source '../../../../node_modules/@studiometa/ui'; diff --git a/packages/demo/src/js/app.ts b/packages/demo/src/js/app.ts deleted file mode 100644 index ef54ae248..000000000 --- a/packages/demo/src/js/app.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { registerComponent } from '@studiometa/js-toolkit'; -import { Figure, Fetch } from '@studiometa/ui'; - -registerComponent(Figure); -registerComponent(Fetch); diff --git a/packages/demo/src/js/components/AnimateScrollTest.js b/packages/demo/src/js/components/AnimateScrollTest.js deleted file mode 100644 index 262236a79..000000000 --- a/packages/demo/src/js/components/AnimateScrollTest.js +++ /dev/null @@ -1,18 +0,0 @@ -import { withScrolledInView } from '@studiometa/js-toolkit'; -import AnimateTest from './AnimateTest.js'; - -/** - * - */ -export default class AnimateScrollTest extends withScrolledInView(AnimateTest) { - static config = { - name: 'AnimateScrollTest', - }; - - /** - * - */ - scrolledInView(props) { - this.animate.progress(props.dampedProgress.y); - } -} diff --git a/packages/demo/src/js/components/AnimateTest.js b/packages/demo/src/js/components/AnimateTest.js deleted file mode 100644 index fc63eb96d..000000000 --- a/packages/demo/src/js/components/AnimateTest.js +++ /dev/null @@ -1,125 +0,0 @@ -import { Base } from '@studiometa/js-toolkit'; -import { animate, ease, domScheduler } from '@studiometa/js-toolkit/utils'; - -/** - * AnimateTest class. - * @typedef {{ - * target: HTMLElement, - * start: HTMLButtonElement, - * pause: HTMLButtonElement, - * play: HTMLButtonElement, - * finish: HTMLButtonElement, - * progress: HTMLInputElement, - * }} AnimateTestRefs - * @typedef {{ - * steps: Parameters[1], - * duration: number, - * easing: string, - * }} AnimateTestOptions - * @augments {Base<{ $refs: AnimateTestRefs, $options: AnimateTestOptions }>} - */ -export default class AnimateTest extends Base { - /** - * Config. - */ - static config = { - name: 'AnimateTest', - refs: ['target', 'start', 'pause', 'play', 'finish', 'progress'], - options: { - steps: Array, - smooth: { - type: Number, - default: false, - }, - spring: { - type: Number, - default: false, - }, - duration: { - type: Number, - default: 2, - }, - easing: String, - }, - }; - - /** - * - */ - get $options() { - const { smooth, ...options } = super.$options; - - if (smooth === 0) { - return options; - } - - return super.$options; - } - - /** - * - */ - async mounted() { - this.animate = animate( - this.$refs.target, - this.$options.steps.map((step) => { - if (typeof step.easing === 'string') { - step.easing = ease[step.easing]; - } - - return step; - }), - { - duration: this.$options.duration, - smooth: this.$options.smooth, - spring: this.$options.spring, - easing: ease[this.$options.easing], - onProgress: (progress) => { - domScheduler.write(() => { - this.$refs.progress.value = progress; - }); - }, - }, - ); - - this.$refs.progress.value = 0.5; - this.animate.progress(this.$refs.progress.valueAsNumber); - } - - /** - * - */ - onStartClick() { - console.log(this.animate); - this.animate.start(); - } - - /** - * - */ - onPauseClick() { - this.animate.pause(); - } - - /** - * - */ - onPlayClick() { - this.animate.play(); - } - - /** - * - */ - onFinishClick() { - this.animate.finish(); - } - - /** - * - */ - onProgressInput() { - console.log('onProgressInput'); - this.animate.progress(this.$refs.progress.valueAsNumber); - } -} diff --git a/packages/demo/src/js/components/AnimateTestMultiple.js b/packages/demo/src/js/components/AnimateTestMultiple.js deleted file mode 100644 index ff5c7eb8d..000000000 --- a/packages/demo/src/js/components/AnimateTestMultiple.js +++ /dev/null @@ -1,49 +0,0 @@ -import { animate, ease } from '@studiometa/js-toolkit/utils'; -import AnimateTest from './AnimateTest.js'; - -/** - * AnimateTest class. - */ -export default class AnimateTestMultiple extends AnimateTest { - /** - * Config. - */ - static config = { - ...AnimateTest.config, - name: 'AnimateTestMultiple', - refs: ['targets[]', 'start', 'pause', 'play', 'finish', 'progress'], - options: { - stagger: Number, - }, - }; - - /** - * - */ - mounted() { - const steps = this.$options.steps.map((step) => { - if (typeof step.easing === 'string') { - step.easing = ease[step.easing]; - } - - return step; - }); - - const options = { - smooth: this.$options.smooth, - stagger: this.$options.stagger, - duration: this.$options.duration, - easing: ease[this.$options.easing], - }; - - console.log(options); - - this.animate = animate(this.$refs.targets, steps, { - ...options, - onProgress: (progress) => { - this.$refs.progress.value = progress; - }, - }); - this.animate.progress(this.$refs.progress.valueAsNumber); - } -} diff --git a/packages/demo/src/js/components/BreakPointManagerDemo/BreakpointManagerDemoBase.js b/packages/demo/src/js/components/BreakPointManagerDemo/BreakpointManagerDemoBase.js deleted file mode 100644 index 789014f3a..000000000 --- a/packages/demo/src/js/components/BreakPointManagerDemo/BreakpointManagerDemoBase.js +++ /dev/null @@ -1,34 +0,0 @@ -import { Base } from '@studiometa/js-toolkit'; - -/** - * - */ -export default class BreakpointManagerDemoBase extends Base { - static config = { - name: 'BreakpointManagerDemoBase', - log: false, - refs: ['content'], - }; - - /** - * - */ - async mounted() { - this.$log('mounted'); - this.$refs.content.innerHTML = this.$options.name; - } - - /** - * - */ - async destroyed() { - this.$log('destroyed'); - } - - /** - * - */ - onClick(event) { - this.$log('click', event); - } -} diff --git a/packages/demo/src/js/components/BreakPointManagerDemo/BreakpointManagerDemoDesktop.js b/packages/demo/src/js/components/BreakPointManagerDemo/BreakpointManagerDemoDesktop.js deleted file mode 100644 index ef9e79c5d..000000000 --- a/packages/demo/src/js/components/BreakPointManagerDemo/BreakpointManagerDemoDesktop.js +++ /dev/null @@ -1,11 +0,0 @@ -import BreakpointManagerDemoBase from './BreakpointManagerDemoBase.js'; - -/** - * - */ -export default class BreakpointManagerDemoDesktop extends BreakpointManagerDemoBase { - static config = { - ...BreakpointManagerDemoBase.config, - name: 'BreakpointManagerDemoDesktop', - }; -} diff --git a/packages/demo/src/js/components/BreakPointManagerDemo/BreakpointManagerDemoMobile.js b/packages/demo/src/js/components/BreakPointManagerDemo/BreakpointManagerDemoMobile.js deleted file mode 100644 index f4fad24e5..000000000 --- a/packages/demo/src/js/components/BreakPointManagerDemo/BreakpointManagerDemoMobile.js +++ /dev/null @@ -1,11 +0,0 @@ -import BreakpointManagerDemoBase from './BreakpointManagerDemoBase.js'; - -/** - * - */ -export default class BreakpointManagerDemoMobile extends BreakpointManagerDemoBase { - static config = { - ...BreakpointManagerDemoBase.config, - name: 'BreakpointManagerDemoMobile', - }; -} diff --git a/packages/demo/src/js/components/BreakPointManagerDemo/BreakpointManagerDemoTablet.js b/packages/demo/src/js/components/BreakPointManagerDemo/BreakpointManagerDemoTablet.js deleted file mode 100644 index 5bbd846b2..000000000 --- a/packages/demo/src/js/components/BreakPointManagerDemo/BreakpointManagerDemoTablet.js +++ /dev/null @@ -1,11 +0,0 @@ -import BreakpointManagerDemoBase from './BreakpointManagerDemoBase.js'; - -/** - * - */ -export default class BreakpointManagerDemoTablet extends BreakpointManagerDemoBase { - static config = { - ...BreakpointManagerDemoBase.config, - name: 'BreakpointManagerDemoTablet', - }; -} diff --git a/packages/demo/src/js/components/BreakPointManagerDemo/index.js b/packages/demo/src/js/components/BreakPointManagerDemo/index.js deleted file mode 100644 index 21c5a9e14..000000000 --- a/packages/demo/src/js/components/BreakPointManagerDemo/index.js +++ /dev/null @@ -1,33 +0,0 @@ -import { Base, withBreakpointManager } from '@studiometa/js-toolkit'; -import BreakpointManagerDemoMobile from './BreakpointManagerDemoMobile.js'; -import BreakpointManagerDemoTablet from './BreakpointManagerDemoTablet.js'; -import BreakpointManagerDemoDesktop from './BreakpointManagerDemoDesktop.js'; - -/** - * - */ -export default class BreakpointManagerDemo extends withBreakpointManager(Base, [ - ['s', BreakpointManagerDemoMobile], - ['m', BreakpointManagerDemoTablet], - ['l', BreakpointManagerDemoDesktop], -]) { - static config = { - name: 'BreakpointManagerDemo', - log: true, - refs: ['content'], - }; - - /** - * - */ - mounted() { - this.$log('mounted'); - } - - /** - * - */ - resized({ breakpoint }) { - this.$log('breakpoint:', breakpoint); - } -} diff --git a/packages/demo/src/js/components/BreakpointObserverDemo.js b/packages/demo/src/js/components/BreakpointObserverDemo.js deleted file mode 100644 index 0a33d503a..000000000 --- a/packages/demo/src/js/components/BreakpointObserverDemo.js +++ /dev/null @@ -1,54 +0,0 @@ -import { Base, withBreakpointObserver } from '@studiometa/js-toolkit'; - -/** - * - */ -export default class BreakpointObserverDemo extends withBreakpointObserver(Base) { - static config = { - name: 'BreakpointObserverDemo', - log: true, - refs: ['content'], - }; - - /** - * - */ - mounted() { - this.$log('mounted'); - this.status = 'mounted'; - } - - /** - * - */ - destroyed() { - this.$log('destroyed'); - this.status = 'destroyed'; - } - - /** - * - */ - onClick(event) { - this.$log('click', event); - } - - /** - * - */ - set status(value) { - let content = `${this.$options.name}
`; - - const { activeBreakpoints, inactiveBreakpoints } = this.$options; - - if (activeBreakpoints) { - content += `activeBreakpoints: ${activeBreakpoints}
`; - } else if (inactiveBreakpoints) { - content += `inactiveBreakpoints: ${inactiveBreakpoints}
`; - } - - content += `status: ${value}`; - - this.$refs.content.innerHTML = content; - } -} diff --git a/packages/demo/src/js/components/Cursor.js b/packages/demo/src/js/components/Cursor.js deleted file mode 100644 index 104b5f1f0..000000000 --- a/packages/demo/src/js/components/Cursor.js +++ /dev/null @@ -1,43 +0,0 @@ -import { Base } from '@studiometa/js-toolkit'; -import { smoothTo, transform } from '@studiometa/js-toolkit/utils'; - -/** - * Cursor class. - */ -export default class Cursor extends Base { - /** - * Config. - * @type {import('@studiometa/js-toolkit').BaseConfig} - */ - static config = { - name: 'Cursor', - }; - - x = smoothTo(window.innerWidth / 2); - - y = smoothTo(window.innerHeight / 2); - - scale = smoothTo(1, { spring: true }); - - /** - * Moved hook. - * Update position and scale based on pointer state. - * @param {import('@studiometa/js-toolkit').PointerServiceProps} props - */ - async moved({ x, y, isDown }) { - this.x(x); - this.y(y); - this.scale(isDown ? 0.75 : 1); - } - - /** - * Ticked hook. - * Update the element's transform on each frame. - * @returns {() => void} A function to be executed on the "write" step of the DOM Scheduler - */ - async ticked() { - return () => { - transform(this.$el, { x: this.x(), y: this.y(), scale: this.scale() }); - }; - } -} diff --git a/packages/demo/src/js/components/Lazyload.js b/packages/demo/src/js/components/Lazyload.js deleted file mode 100644 index f8aff725e..000000000 --- a/packages/demo/src/js/components/Lazyload.js +++ /dev/null @@ -1,77 +0,0 @@ -import { Base, withIntersectionObserver } from '@studiometa/js-toolkit'; -import { transition, isString, isArray, addClass, addStyle } from '@studiometa/js-toolkit/utils'; - -/** - * - */ -function setClassesOrStyles(element, classesOrStyles) { - if (isString(classesOrStyles) || isArray(classesOrStyles)) { - addClass(element, classesOrStyles); - } else { - addStyle(element, classesOrStyles); - } -} - -/** - * - */ -export default class Lazyload extends withIntersectionObserver(Base) { - static config = { - name: 'Lazyload', - log: true, - options: { - styles: { - type: Object, - default: () => ({ - unloaded: { opacity: 0 }, - active: { transition: 'opacity 0.5s' }, - loaded: '', - }), - }, - }, - }; - - /** - * - */ - mounted() { - setClassesOrStyles(this.$el, this.$options.styles.unloaded); - } - - /** - * - */ - intersected([entry]) { - if (entry.isIntersecting) { - this.load(); - } - } - - /** - * - */ - load() { - const { unloaded, active, loaded } = this.$options.styles; - const { src } = this.$el.dataset; - - if (!src || this.isLoaded) { - this.$destroy(); - return; - } - - const img = new Image(); - img.addEventListener('load', () => { - this.$el.setAttribute('src', src); - delete this.$el.dataset.src; - this.isLoaded = true; - transition(this.$el, { - from: unloaded, - active, - to: loaded, - }); - setClassesOrStyles(this.$el, loaded); - this.$terminate(); - }); - img.src = src; - } -} diff --git a/packages/demo/src/js/components/MediaQueryDemo.js b/packages/demo/src/js/components/MediaQueryDemo.js deleted file mode 100644 index 6670bf23d..000000000 --- a/packages/demo/src/js/components/MediaQueryDemo.js +++ /dev/null @@ -1,28 +0,0 @@ -import { Base, withMountOnMediaQuery } from '@studiometa/js-toolkit'; - -/** - * - */ -export default class MediaQueryDemo extends withMountOnMediaQuery( - Base, - 'not (prefers-reduced-motion)', -) { - static config = { - name: 'MediaQueryDemo', - log: true, - }; - - /** - * - */ - mounted() { - this.$log('Mounted! The user accepts motion.'); - } - - /** - * - */ - destroyed() { - this.$log('Destroyed! The user prefers reduced motion.'); - } -} diff --git a/packages/demo/src/js/components/Parallax.js b/packages/demo/src/js/components/Parallax.js deleted file mode 100644 index 0dfbc23ef..000000000 --- a/packages/demo/src/js/components/Parallax.js +++ /dev/null @@ -1,25 +0,0 @@ -import { Base, withScrolledInView, withFreezedOptions } from '@studiometa/js-toolkit'; -import { map, transform } from '@studiometa/js-toolkit/utils'; - -/** - * - */ -export default class Parallax extends withScrolledInView(withFreezedOptions(Base)) { - static config = { - name: 'Parallax', - refs: ['target'], - options: { - speed: Number, - }, - }; - - /** - * - */ - scrolledInView(props) { - const { target } = this.$refs; - const y = map(props.dampedProgress.y, 0, 1, 100, -100) * this.$options.speed; - const scale = map(props.dampedProgress.x, 0, 1, 0.5, 2); - return () => transform(target, { y, scale }); - } -} diff --git a/packages/demo/src/js/components/ParentNativeEvent/Child.js b/packages/demo/src/js/components/ParentNativeEvent/Child.js deleted file mode 100644 index 66cd833ea..000000000 --- a/packages/demo/src/js/components/ParentNativeEvent/Child.js +++ /dev/null @@ -1,13 +0,0 @@ -import { Base } from '@studiometa/js-toolkit'; - -/** - * Child class. - */ -export default class Child extends Base { - /** - * Config. - */ - static config = { - name: 'Child', - }; -} diff --git a/packages/demo/src/js/components/ParentNativeEvent/index.js b/packages/demo/src/js/components/ParentNativeEvent/index.js deleted file mode 100644 index 54f489f23..000000000 --- a/packages/demo/src/js/components/ParentNativeEvent/index.js +++ /dev/null @@ -1,32 +0,0 @@ -import { Base } from '@studiometa/js-toolkit'; -import Child from './Child.js'; - -/** - * ParentNativeEvent class. - */ -export default class ParentNativeEvent extends Base { - /** - * Config. - */ - static config = { - name: 'ParentNativeEvent', - log: true, - components: { - Child, - }, - }; - - /** - * - */ - onChildClick(...args) { - this.$log(this.$id, 'onChildClick', ...args); - } - - /** - * - */ - onChildDede(...args) { - this.$log(this.$id, 'onChildDede', ...args); - } -} diff --git a/packages/demo/src/js/components/PointerProps.ts b/packages/demo/src/js/components/PointerProps.ts deleted file mode 100644 index 31bc23374..000000000 --- a/packages/demo/src/js/components/PointerProps.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Base, withRelativePointer } from '@studiometa/js-toolkit'; -import type { BaseConfig, BaseProps, PointerServiceProps } from '@studiometa/js-toolkit'; -import { transform, clamp01 } from '@studiometa/js-toolkit/utils'; - -export interface PointerPropsProps extends BaseProps { - $refs: { - props: HTMLElement; - }; -} - -/** - * PointerProps class. - */ -export default class PointerProps extends withRelativePointer(Base) { - /** - * Config. - */ - static config: BaseConfig = { - name: 'PointerProps', - refs: ['props', 'scaler'], - }; - - movedrelative(props: PointerServiceProps) { - this.$refs.props.textContent = JSON.stringify(props, null, 2); - transform(this.$refs.scaler, { - scaleX: clamp01(props.progress.x) + 0.5, - scaleY: clamp01(props.progress.y) + 0.5, - }); - } -} diff --git a/packages/demo/src/js/components/ResponsiveOptions.js b/packages/demo/src/js/components/ResponsiveOptions.js deleted file mode 100644 index 47d6c05fe..000000000 --- a/packages/demo/src/js/components/ResponsiveOptions.js +++ /dev/null @@ -1,47 +0,0 @@ -import { Base, withResponsiveOptions } from '@studiometa/js-toolkit'; - -/** - * ResponsiveOptions class. - */ -export default class ResponsiveOptions extends withResponsiveOptions(Base) { - /** - * Config. - */ - static config = { - name: 'ResponsiveOptions', - options: { - fooBar: { - type: String, - responsive: true, - }, - }, - }; - - /** - * Mounted hook. - * @returns {void} - */ - mounted() { - this.print(); - } - - /** - * Resized hook. - * @returns {void} - */ - resized() { - this.print(); - } - - /** - * Print data to the DOM. - * @returns {void} - */ - print() { - this.$el.innerHTML = `${this.$services.get('resized').breakpoint}
${JSON.stringify( - this.$options, - null, - 2, - )}`; - } -} diff --git a/packages/demo/src/js/components/ScrollToDemo.js b/packages/demo/src/js/components/ScrollToDemo.js deleted file mode 100644 index 24eeb72dd..000000000 --- a/packages/demo/src/js/components/ScrollToDemo.js +++ /dev/null @@ -1,29 +0,0 @@ -import { Base } from '@studiometa/js-toolkit'; -import { scrollTo } from '@studiometa/js-toolkit/utils'; - -/** - * - */ -export default class ScrollToDemo extends Base { - static config = { - name: 'ScrollToDemo', - log: true, - refs: ['text', 'btn'], - }; - - /** - * - */ - async mounted() { - this.$log('mounted'); - } - - /** - * - */ - async onBtnClick() { - this.$log('start scroll'); - await scrollTo(this.$refs.text, { duration: 2, easing: [1, 0, 0, 1] }); - this.$log('end scroll'); - } -} diff --git a/packages/demo/src/js/components/ScrolledInViewOffset.js b/packages/demo/src/js/components/ScrolledInViewOffset.js deleted file mode 100644 index d2b3e13ea..000000000 --- a/packages/demo/src/js/components/ScrolledInViewOffset.js +++ /dev/null @@ -1,24 +0,0 @@ -import { Base, withScrolledInView } from '@studiometa/js-toolkit'; - -/** - * ScrolledInViewOffset class. - */ -export default class ScrolledInViewOffset extends withScrolledInView(Base) { - /** - * Config. - */ - static config = { - name: 'ScrolledInViewOffset', - refs: ['progress'], - }; - - /** - * Scrolled in view. - * @param {import('@studiometa/js-toolkit').ScrolledInViewProps} props - * @returns {void} - */ - scrolledInView(props) { - const { x, y } = props.progress; - this.$refs.progress.textContent = `{ x: ${x.toFixed(3)}, y: ${y.toFixed(3)} }`; - } -} diff --git a/packages/demo/src/js/components/Skew.js b/packages/demo/src/js/components/Skew.js deleted file mode 100644 index aa9a4e1ba..000000000 --- a/packages/demo/src/js/components/Skew.js +++ /dev/null @@ -1,52 +0,0 @@ -import { Base, withMountWhenInView, useScroll, useRaf } from '@studiometa/js-toolkit'; -import { damp, clamp, transform } from '@studiometa/js-toolkit/utils'; - -const scroll = useScroll(); -const raf = useRaf(); - -let skewY = 0; -let dampedSkewY = 0; - -scroll.add('Skew.js', (props) => { - skewY = clamp(props.delta.y * -0.005, -0.1, 0.1) * 40; - - if (!raf.has('Skew.js')) { - raf.add('Skew.js', () => { - dampedSkewY = damp(skewY, dampedSkewY, 0.1); - - if (dampedSkewY === skewY) { - raf.remove('Skew.js'); - } - }); - } -}); - -/** - * - */ -export default class Skew extends withMountWhenInView(Base) { - static config = { - name: 'Skew', - }; - - /** - * - */ - scrolled(props) { - if (props.changed.y && !this.$services.has('ticked')) { - this.$services.enable('ticked'); - } - } - - /** - * - */ - ticked() { - if (dampedSkewY === skewY) { - this.$services.disable('ticked'); - } - - const { $el } = this; - return () => transform($el, { skewY: dampedSkewY }); - } -} diff --git a/packages/demo/src/js/components/Slider.js b/packages/demo/src/js/components/Slider.js deleted file mode 100644 index 13e59114a..000000000 --- a/packages/demo/src/js/components/Slider.js +++ /dev/null @@ -1,12 +0,0 @@ -import { Base } from '@studiometa/js-toolkit'; - -/** - * - */ -export default class Slider extends Base { - static config = { - name: 'Slider', - }; - - // onChange({ previous, index, direction }) {} -} diff --git a/packages/demo/src/js/utils/isObjectFreed.js b/packages/demo/src/js/utils/isObjectFreed.js deleted file mode 100644 index 1f2bf8d6f..000000000 --- a/packages/demo/src/js/utils/isObjectFreed.js +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Determines if an object is freed - * @param obj is the object of interest - * @param freeFn is a function that frees the object. - * @returns a promise that resolves to {freed: boolean, memoryDiff:number} - * @author Steve Hanov - * @see http://stevehanov.ca/blog/?id=148 - */ -export default function isObjectFreed(obj, freeFn) { - return new Promise((resolve) => { - if (!performance.memory) { - throw new Error('Browser not supported.'); - } - - const initial = performance.memory.usedJSHeapSize; - - // When obj is GC'd, the large array will also be GCd and the impact will - // be noticeable. - const allocSize = 1024 * 1024 * 1024; - // eslint-disable-next-line no-unused-vars - const wm = new WeakMap([[obj, new Uint8Array(allocSize)]]); - - // wait for memory counter to update - setTimeout(() => { - const before = performance.memory.usedJSHeapSize; - - // Free the memory - freeFn(); - - const log = () => { - const diff = before - performance.memory.usedJSHeapSize; - console.log({ - initial, - before, - now: performance.memory.usedJSHeapSize, - diff, - freed: diff >= allocSize, - memoryDiff: diff - allocSize, - }); - }; - - log(); - - const interval = setInterval(log, 1000); - - // wait for GC to run, at least 10 seconds - setTimeout(() => { - clearInterval(interval); - log(); - resolve(); - }, 10000); - }, 100); - }); -} diff --git a/packages/demo/src/package.json b/packages/demo/src/package.json deleted file mode 100644 index 3dbc1ca59..000000000 --- a/packages/demo/src/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/packages/demo/src/templates/layouts/base.twig b/packages/demo/src/templates/layouts/base.twig deleted file mode 100644 index 940166cc6..000000000 --- a/packages/demo/src/templates/layouts/base.twig +++ /dev/null @@ -1,10 +0,0 @@ -{% extends '@pkg-layouts/default.twig' %} - -{% set head = { - title: '@studiometa/js-toolkit demo', - description: 'Demo of the @studiometa/js-toolkit components.' -} %} - -{% set body_attr = { - class: 'p-10' -} %} diff --git a/packages/demo/src/templates/pages/foo.twig b/packages/demo/src/templates/pages/foo.twig deleted file mode 100644 index 86293a000..000000000 --- a/packages/demo/src/templates/pages/foo.twig +++ /dev/null @@ -1,43 +0,0 @@ -{% extends '@layouts/base.twig' %} - -{% block body %} -
- -
-

Foo

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt - ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco - laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in - voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -

- {% include '@ui/Figure/Figure.twig' with { - src: 'https://picsum.photos/seed/foo/400/400', - width: 400, - height: 400, - attr: { - class: 'max-w-sm', - data_option_debug: true, - data_option_enter_from: 'scale-90 opacity-0', - data_option_enter_active: 'transition delay-100' - }, - img_attr: { - class: 'scale-90 opacity-0' - } - } %} -
-
-{% endblock %} diff --git a/packages/demo/src/templates/pages/index.twig b/packages/demo/src/templates/pages/index.twig deleted file mode 100644 index a59cd9572..000000000 --- a/packages/demo/src/templates/pages/index.twig +++ /dev/null @@ -1,51 +0,0 @@ -{% extends '@layouts/base.twig' %} - -{% block body %} -
- -
-

Home

-

- Praesent et eros quis justo ultrices luctus. Cras egestas ullamcorper quam, eget suscipit - ligula placerat a. Nullam eu erat ligula. Nulla facilisi. In vitae suscipit odio. Mauris - efficitur diam nec iaculis sollicitudin. Maecenas aliquet justo vitae augue tempor - dignissim. Mauris euismod nunc sed neque dignissim, eu interdum leo volutpat. Sed rhoncus eu - leo vitae molestie. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tortor - nunc, mollis nec molestie eget, porttitor eget risus. Proin nec accumsan elit. Aenean vitae - justo laoreet, faucibus risus ac, cursus est. Nunc justo nulla, venenatis cursus luctus - eget, ornare a lacus. -

- {% include '@ui/Figure/Figure.twig' with { - src: 'https://picsum.photos/seed/index/400/400', - width: 400, - height: 400, - attr: { - class: 'max-w-sm', - data_option_debug: true, - data_option_enter_from: 'scale-90 opacity-0', - data_option_enter_active: 'transition delay-100' - }, - img_attr: { - class: 'scale-90 opacity-0' - } - } %} -
-
-{% endblock %} diff --git a/packages/docs/.vitepress/config.ts b/packages/docs/.vitepress/config.ts deleted file mode 100644 index a84b4785b..000000000 --- a/packages/docs/.vitepress/config.ts +++ /dev/null @@ -1,470 +0,0 @@ -import { defineConfig } from 'vitepress'; -import { createTwoslashWithInlineCache } from '@shikijs/vitepress-twoslash/cache-inline'; -import pkg from '../package.json' with { type: 'json' }; - -const withTwoslashInlineCache = createTwoslashWithInlineCache(); - -export default withTwoslashInlineCache( - defineConfig({ - vite: { - build: { - chunkSizeWarningLimit: 600, - }, - }, - lang: 'en-US', - title: '@studiometa/js-toolkit', - description: - 'The JS Toolkit by Studio Meta is a JavaScript data-attributes driven micro-framework shipped with plenty of useful utility functions to boost your project.', - lastUpdated: true, - head: [['link', { rel: 'icon', type: 'image/x-icon', href: '/logo.png' }]], - markdown: { - // Explicitly load these languages for types hightlighting - languages: ['js', 'jsx', 'ts', 'tsx', 'bash'], - }, - themeConfig: { - outline: 'deep', - // @ts-expect-error - version: pkg.version, - repo: 'studiometa/js-toolkit', - docsDir: 'packages/docs', - lastUpdated: { - text: 'Last updated', - }, - editLinks: true, - editLinkText: 'Edit this page on GitHub', - sidebarDepth: 3, - footer: { - message: 'MIT Licensed', - copyright: 'Copyright © 2020–present Studio Meta', - }, - search: { - provider: 'local', - }, - socialLinks: [{ icon: 'github', link: 'https://github.com/studiometa/js-toolkit' }], - nav: [ - { text: 'Guide', link: '/guide/' }, - { text: 'API Reference', link: '/api/' }, - { text: 'Utils Reference', link: '/utils/' }, - { text: 'Examples', link: '/examples/' }, - { text: 'Concepts', link: '/guide/concepts/philosophy.html' }, - { - text: `v${pkg.version}`, - items: [ - { - text: 'Release Notes', - link: 'https://github.com/studiometa/js-toolkit/blob/master/CHANGELOG.md', - }, - { text: 'Demo', link: 'https://studiometa-js-toolkit-demo.netlify.app/' }, - { text: 'v2.x', link: 'https://support-2-x--studiometa-js-toolkit.netlify.app/' }, - ], - }, - ], - sidebar: { - '/guide/': getGuideSidebar(), - '/examples/': getExamplesSidebar(), - '/api/services/': getApiSidebar({ expanded: 'services' }), - '/api/decorators/': getApiSidebar({ expanded: 'decorators' }), - '/api/helpers/': getApiSidebar({ expanded: 'helpers' }), - '/api/autoload/': getApiSidebar({ expanded: 'autoload' }), - '/api/html/': getApiSidebar({ expanded: 'html' }), - '/api/': getApiSidebar({ expanded: 'api' }), - '/utils/': getUtilsSidebar(), - }, - }, - }), -); - -function getGuideSidebar() { - return [ - { text: 'Getting Started', link: '/guide/' }, - { text: 'Installation', link: '/guide/introduction/installation.html' }, - { text: 'Components', link: '/guide/introduction/managing-components.html' }, - { text: 'Refs', link: '/guide/introduction/managing-refs.html' }, - { text: 'Options', link: '/guide/introduction/managing-options.html' }, - { text: 'Lifecycle', link: '/guide/introduction/lifecycle-hooks.html' }, - { text: 'Events', link: '/guide/introduction/working-with-events.html' }, - { text: 'Services', link: '/guide/introduction/using-services.html' }, - { - text: 'Going further', - collapsed: true, - items: [ - { text: 'Lazy imports', link: '/guide/going-further/lazy-imports.html' }, - { text: 'Autoloading', link: '/guide/going-further/autoloading.html' }, - { text: 'Decorators', link: '/guide/going-further/using-decorators.html' }, - { - text: 'TypeScript', - link: '/guide/going-further/typing-components.html', - keywords: ['types', 'typings', 'typescript', 'jsdoc'], - }, - { text: 'Custom Services', link: '/guide/going-further/registering-new-services.html' }, - { text: 'Linting', link: '/guide/going-further/linting.html' }, - ], - }, - { - text: 'Concepts', - collapsed: false, - items: [ - { text: 'Philosophy', link: '/guide/concepts/philosophy.html' }, - { text: 'Component Tree', link: '/guide/concepts/component-tree.html' }, - { text: 'Service Architecture', link: '/guide/concepts/service-architecture.html' }, - ], - }, - { - text: 'Migration', - collapsed: true, - items: [ - { text: 'v1 → v2', link: '/guide/migration/v1-to-v2.html' }, - { text: 'v2 → v3', link: '/guide/migration/v2-to-v3.html' }, - { text: 'v3 → v4', link: '/guide/migration/v3-to-v4.html' }, - ], - }, - ]; -} - -function getExamplesSidebar() { - return [ - { text: 'Overview', link: '/examples/' }, - { - text: 'Basics', - items: [ - { text: 'Counter component', link: '/examples/counter-component/' }, - { text: 'Accordion', link: '/examples/accordion/' }, - ], - }, - { - text: 'Patterns', - items: [ - { text: 'Tabs', link: '/examples/tabs/' }, - { text: 'Modal / Dialog', link: '/examples/modal/' }, - { text: 'Form validation', link: '/examples/form-validation/' }, - ], - }, - { - text: 'Advanced', - items: [ - { text: 'Scroll-linked animation', link: '/examples/scroll-linked-animation/' }, - { text: 'Lazy image', link: '/examples/lazy-image/' }, - { text: 'Teleport refs', link: '/examples/teleport-refs/' }, - ], - }, - ]; -} - -function getApiSidebar({ expanded = 'api' } = {}) { - return [ - { - text: 'Base class', - link: '/api/', - collapsed: expanded !== 'api', - items: getBaseSidebar(), - }, - { - text: 'HTML', - link: '/api/html/', - collapsed: expanded !== 'html', - items: getHtmlSidebar(), - }, - { - text: 'Helpers', - link: '/api/helpers/', - collapsed: expanded !== 'helpers', - items: getHelpersSidebar(), - }, - { - text: 'Services', - link: '/api/services/', - collapsed: expanded !== 'services', - items: getServicesSidebar(), - }, - { - text: 'Decorators', - link: '/api/decorators/', - collapsed: expanded !== 'decorators', - items: getDecoratorsSidebar(), - }, - { - text: 'Autoload', - link: '/api/autoload/', - collapsed: expanded !== 'autoload', - items: getAutoloadSidebar(), - }, - ]; -} - -function getAutoloadSidebar() { - return [ - { text: 'defineManifest', link: '/api/autoload/defineManifest.html' }, - { text: 'registerManifests', link: '/api/autoload/registerManifests.html' }, - ]; -} - -function getBaseSidebar() { - return [ - { - text: 'Configuration', - link: '/api/configuration.html', - }, - { - text: 'Lifecycle hooks', - link: '/api/methods-hooks-lifecycle.html', - }, - { - text: 'Services hooks', - link: '/api/methods-hooks-services.html', - }, - { - text: 'Events hooks', - link: '/api/methods-hooks-events.html', - }, - { - text: 'Instantiation', - link: '/api/instantiation.html', - }, - { - text: 'Instance properties', - link: '/api/instance-properties.html', - }, - { - text: 'Instance methods', - link: '/api/instance-methods.html', - }, - { - text: 'Instance events', - link: '/api/instance-events.html', - }, - { - text: 'Static methods', - link: '/api/static-methods.html', - }, - ]; -} - -function getHtmlSidebar() { - return [ - { text: 'data-component', link: '/api/html/data-component.html' }, - { text: 'data-ref', link: '/api/html/data-ref.html' }, - { text: 'data-option-<​name>', link: '/api/html/data-option.html' }, - ]; -} - -function getServicesSidebar() { - return [ - { text: 'useDrag', link: '/api/services/useDrag.html' }, - { text: 'useKey', link: '/api/services/useKey.html' }, - { text: 'useLoad', link: '/api/services/useLoad.html' }, - { text: 'useMutation', link: '/api/services/useMutation.html' }, - { text: 'usePointer', link: '/api/services/usePointer.html' }, - { text: 'useRaf', link: '/api/services/useRaf.html' }, - { text: 'useResize', link: '/api/services/useResize.html' }, - { text: 'useScroll', link: '/api/services/useScroll.html' }, - ]; -} - -function getDecoratorsSidebar() { - return [ - { text: 'withBreakpointManager', link: '/api/decorators/withBreakpointManager.html' }, - { text: 'withBreakpointObserver', link: '/api/decorators/withBreakpointObserver.html' }, - { text: 'withDrag', link: '/api/decorators/withDrag.html' }, - { text: 'withExtraConfig', link: '/api/decorators/withExtraConfig.html' }, - { text: 'withFreezedOptions', link: '/api/decorators/withFreezedOptions.html' }, - { text: 'withGroup', link: '/api/decorators/withGroup.html' }, - { text: 'withIntersectionObserver', link: '/api/decorators/withIntersectionObserver.html' }, - { text: 'withMountOnMediaQuery', link: '/api/decorators/withMountOnMediaQuery.html' }, - { text: 'withMountWhenInView', link: '/api/decorators/withMountWhenInView.html' }, - { text: 'withMountWhenPrefersMotion', link: '/api/decorators/withMountWhenPrefersMotion.html' }, - { text: 'withMutation', link: '/api/decorators/withMutation.html' }, - { text: 'withRelativePointer', link: '/api/decorators/withRelativePointer.html' }, - { text: 'withResponsiveOptions', link: '/api/decorators/withResponsiveOptions.html' }, - { text: 'withScrolledInView', link: '/api/decorators/withScrolledInView.html' }, - ]; -} - -function getHelpersSidebar() { - return [ - { text: 'closestComponent', link: '/api/helpers/closestComponent.html' }, - { text: 'createApp', link: '/api/helpers/createApp.html' }, - { text: 'defineFeatures', link: '/api/helpers/defineFeatures.html' }, - { text: 'getClosestParent', link: '/api/helpers/getClosestParent.html' }, - { text: 'getDirectChildren', link: '/api/helpers/getDirectChildren.html' }, - { text: 'getInstanceFromElement', link: '/api/helpers/getInstanceFromElement.html' }, - { text: 'getInstances', link: '/api/helpers/getInstances.html' }, - { text: 'importOnInteraction', link: '/api/helpers/importOnInteraction.html' }, - { text: 'importOnMediaQuery', link: '/api/helpers/importOnMediaQuery.html' }, - { text: 'importWhenIdle', link: '/api/helpers/importWhenIdle.html' }, - { text: 'importWhenPrefersMotion', link: '/api/helpers/importWhenPrefersMotion.html' }, - { text: 'importWhenVisible', link: '/api/helpers/importWhenVisible.html' }, - { text: 'isDirectChild', link: '/api/helpers/isDirectChild.html' }, - { text: 'logTree', link: '/api/helpers/logTree.html' }, - { text: 'queryComponent', link: '/api/helpers/queryComponent.html' }, - { text: 'registerComponent', link: '/api/helpers/registerComponent.html' }, - { text: 'registerComponents', link: '/api/helpers/registerComponents.html' }, - ]; -} - -function getUtilsSidebar() { - return [ - { - text: 'Utils', - link: '/utils/', - collapsed: true, - items: [ - { text: 'cache', link: '/utils/cache.html' }, - { text: 'createElement', link: '/utils/createElement.html' }, - { text: 'debounce', link: '/utils/debounce.html' }, - { text: 'domScheduler', link: '/utils/domScheduler.html' }, - { text: 'keyCodes', link: '/utils/keyCodes.html' }, - { text: 'loadElement', link: '/utils/loadElement.html' }, - { text: 'loadIframe', link: '/utils/loadIframe.html' }, - { text: 'loadImage', link: '/utils/loadImage.html' }, - { text: 'loadLink', link: '/utils/loadLink.html' }, - { text: 'loadScript', link: '/utils/loadScript.html' }, - { text: 'memo', link: '/utils/memo.html' }, - { text: 'memoize', link: '/utils/memoize.html' }, - { text: 'nextFrame', link: '/utils/nextFrame.html' }, - { text: 'nextMicrotask', link: '/utils/nextMicrotask.html' }, - { text: 'nextTick', link: '/utils/nextTick.html' }, - { text: 'Queue', link: '/utils/Queue.html' }, - { text: 'random', link: '/utils/random.html' }, - { text: 'randomInt', link: '/utils/randomInt.html' }, - { text: 'randomItem', link: '/utils/randomItem.html' }, - { text: 'scrollTo', link: '/utils/scrollTo.html' }, - { text: 'SmartQueue', link: '/utils/SmartQueue.html' }, - { text: 'throttle', link: '/utils/throttle.html' }, - { text: 'trapFocus', link: '/utils/trapFocus.html' }, - { text: 'tween', link: '/utils/tween.html' }, - { text: 'useScheduler', link: '/utils/useScheduler.html' }, - ], - }, - { - text: 'Value utils', - link: '/utils/is/', - collapsed: true, - items: [ - { text: 'isArray', link: '/utils/is/isArray.html' }, - { text: 'isBoolean', link: '/utils/is/isBoolean.html' }, - { text: 'isDefined', link: '/utils/is/isDefined.html' }, - { text: 'isEmpty', link: '/utils/is/isEmpty.html' }, - { text: 'isEmptyString', link: '/utils/is/isEmptyString.html' }, - { text: 'isNull', link: '/utils/is/isNull.html' }, - { text: 'isDev', link: '/utils/is/isDev.html' }, - { text: 'isFunction', link: '/utils/is/isFunction.html' }, - { text: 'isNumber', link: '/utils/is/isNumber.html' }, - { text: 'isObject', link: '/utils/is/isObject.html' }, - { text: 'isString', link: '/utils/is/isString.html' }, - ], - }, - { - text: 'Collision utils', - link: '/utils/collision/', - collapsed: true, - items: [ - { text: 'boundingRectToCircle', link: '/utils/collision/boundingRectToCircle.html' }, - { text: 'collideCircleCircle', link: '/utils/collision/collideCircleCircle.html' }, - { text: 'collideCircleRect', link: '/utils/collision/collideCircleRect.html' }, - { text: 'collidePointCircle', link: '/utils/collision/collidePointCircle.html' }, - { text: 'collidePointRect', link: '/utils/collision/collidePointRect.html' }, - { text: 'collideRectRect', link: '/utils/collision/collideRectRect.html' }, - ], - }, - { - text: 'CSS utils', - // link: '/utils/css/', - collapsed: true, - items: [ - { text: 'addClass', link: '/utils/css/addClass.html' }, - { text: 'addStyle', link: '/utils/css/addStyle.html' }, - { text: 'animate', link: '/utils/css/animate.html' }, - { text: 'getOffsetSizes', link: '/utils/css/getOffsetSizes.html' }, - { text: 'matrix', link: '/utils/css/matrix.html' }, - { text: 'removeClass', link: '/utils/css/removeClass.html' }, - { text: 'removeStyle', link: '/utils/css/removeStyle.html' }, - { text: 'toggleClass', link: '/utils/css/toggleClass.html' }, - { text: 'transform', link: '/utils/css/transform.html' }, - { text: 'transition', link: '/utils/css/transition.html' }, - ], - }, - { - text: 'Storage utils', - link: '/utils/storage/', - collapsed: true, - items: [ - { text: 'createStorage', link: '/utils/storage/createStorage.html' }, - { text: 'createLocalStorage', link: '/utils/storage/createLocalStorage.html' }, - { text: 'createSessionStorage', link: '/utils/storage/createSessionStorage.html' }, - { - text: 'createUrlSearchParamsStorage', - link: '/utils/storage/createUrlSearchParamsStorage.html', - }, - { - text: 'createUrlSearchParamsInHashStorage', - link: '/utils/storage/createUrlSearchParamsInHashStorage.html', - }, - { text: 'Providers', link: '/utils/storage/providers.html' }, - ], - }, - { - text: 'History utils', - link: '/utils/history/', - collapsed: true, - items: [ - { text: 'historyPush', link: '/utils/history/historyPush.html' }, - { text: 'historyReplace', link: '/utils/history/historyReplace.html' }, - { text: 'objectToURLSearchParams', link: '/utils/history/objectToURLSearchParams.html' }, - ], - }, - { - text: 'Math utils', - // link: '/utils/math/', - collapsed: true, - items: [ - { text: 'clamp', link: '/utils/math/clamp.html' }, - { text: 'clamp01', link: '/utils/math/clamp01.html' }, - { text: 'createEaseInOut', link: '/utils/math/createEaseInOut.html' }, - { text: 'createEaseOut', link: '/utils/math/createEaseOut.html' }, - { text: 'createRange', link: '/utils/math/createRange.html' }, - { text: 'damp', link: '/utils/math/damp.html' }, - { text: 'ease', link: '/utils/math/ease.html' }, - { text: 'fold', link: '/utils/math/fold.html' }, - { text: 'inertiaFinalValue', link: '/utils/math/inertiaFinalValue.html' }, - { text: 'lerp', link: '/utils/math/lerp.html' }, - { text: 'map', link: '/utils/math/map.html' }, - { text: 'mean', link: '/utils/math/mean.html' }, - { text: 'round', link: '/utils/math/round.html' }, - { text: 'smoothTo', link: '/utils/math/smoothTo.html' }, - { text: 'spring', link: '/utils/math/spring.html' }, - { text: 'wrap', link: '/utils/math/wrap.html' }, - ], - }, - { - text: 'String utils', - link: '/utils/string/', - collapsed: true, - items: [ - { text: 'camelCase', link: '/utils/string/camelCase.html' }, - { text: 'dashCase', link: '/utils/string/dashCase.html' }, - { text: 'pascalCase', link: '/utils/string/pascalCase.html' }, - { text: 'snakeCase', link: '/utils/string/snakeCase.html' }, - { text: 'lowerCase', link: '/utils/string/lowerCase.html' }, - { text: 'upperCase', link: '/utils/string/upperCase.html' }, - { text: 'startsWith', link: '/utils/string/startsWith.html' }, - { text: 'endsWith', link: '/utils/string/endsWith.html' }, - { text: 'withLeadingCharacters', link: '/utils/string/withLeadingCharacters.html' }, - { text: 'withLeadingSlash', link: '/utils/string/withLeadingSlash.html' }, - { text: 'withoutLeadingCharacters', link: '/utils/string/withoutLeadingCharacters.html' }, - { - text: 'withoutLeadingCharactersRecursive', - link: '/utils/string/withoutLeadingCharactersRecursive.html', - }, - { text: 'withoutLeadingSlash', link: '/utils/string/withoutLeadingSlash.html' }, - { text: 'withoutTrailingCharacters', link: '/utils/string/withoutTrailingCharacters.html' }, - { - text: 'withoutTrailingCharactersRecursive', - link: '/utils/string/withoutTrailingCharactersRecursive.html', - }, - { text: 'withoutTrailingSlash', link: '/utils/string/withoutTrailingSlash.html' }, - { text: 'withTrailingCharacters', link: '/utils/string/withTrailingCharacters.html' }, - { text: 'withTrailingSlash', link: '/utils/string/withTrailingSlash.html' }, - ], - }, - ]; -} diff --git a/packages/docs/api/autoload/defineManifest.md b/packages/docs/api/autoload/defineManifest.md deleted file mode 100644 index 55d3f65fb..000000000 --- a/packages/docs/api/autoload/defineManifest.md +++ /dev/null @@ -1,173 +0,0 @@ ---- -outline: deep ---- - -# defineManifest - -`defineManifest` builds a [`ComponentManifest`](/api/autoload/#types) from a record of lazy importers, so your own js-toolkit components autoload from `data-component` attributes. It is pure: it never touches the DOM and never registers anything. Pass its result to [`registerManifests`](/api/autoload/registerManifests.html) or [`autoload`](/api/autoload/#autoload) to start discovery. - -This page also documents the two adapters that produce the `modules` record it consumes — [`fromMetaGlob`](#frommetaglob) for Vite and [`fromWebpackContext`](#fromwebpackcontext) for webpack. - -## Signature - -```ts -function defineManifest(options: DefineManifestOptions): ComponentManifest; -``` - -## Parameters - -The single `DefineManifestOptions` argument: - -- `modules` (`ModuleRecord`, required): the lazy importers to build entries from, keyed by module path. Feed a bundler glob through an adapter. -- `packageName` (`string`): the npm package the components belong to. Informational only — the loader never reads it. -- `strategy` (`ComponentLoadStrategy`): the default [load strategy](/api/autoload/#loading-strategies) applied to every component. Defaults to `'eager'`. -- `group` (`string`): the default grouping key applied to every component. Informational only. Defaults to each component's token. -- `components` (`Record`): per-token overrides, keyed by the **derived** token (see [Token derivation](#token-derivation)). - -### ComponentOverride - -Every field is optional; an omitted field keeps the derived or option-level default. - -- `token` (`string`): replace the token derived from the module key (renames the entry). -- `strategy` (`ComponentLoadStrategy`): override the load strategy for this one component. -- `group` (`string`): override the grouping key for this one component. -- `exportName` (`string`): the named export to resolve from the module. Defaults to the token. -- `children` (`readonly string[]`): tokens of the constructor's configured child components, for recursive registration. -- `styles` (`readonly string[]`): stylesheet paths associated with this component. Informational only. -- `integrations` (`readonly string[]`): integration keys associated with this component. Informational only. - -## Return value - -Returns a [`ComponentManifest`](/api/autoload/#types). For every `[key, importer]` in `options.modules`, `defineManifest` produces one entry whose `load()` thunk calls the importer and resolves the export named by `exportName` (defaulting to the token), falling back to the module's `default` export. - -The factory does **not** validate that the resolved value is a `Base` constructor — the loader does that on load and dispatches a [`js-toolkit:error`](/api/autoload/#error-diagnostics) event when it is not. - -## Token derivation - -The `data-component` token comes from each module key: the basename without its extension, or the parent directory name when the basename is `index`. - -| Module key | Derived token | -| ------------------------------- | ------------- | -| `./components/MyComponent.js` | `MyComponent` | -| `./components/Card/Card.js` | `Card` | -| `./components/Gallery/index.js` | `Gallery` | - -Name each file after the token you want in the markup. When a file's exported class name differs from the token, set `exportName`; to expose a different token than the filename, set `token`. - -## Duplicate tokens - -When two module keys derive the same token, a warning is logged under the `[@studiometa/js-toolkit/autoload]` prefix and the later key wins. Keep component filenames unique across the folders you glob, or disambiguate with a `token` override. - -## Examples - -### Vite - -```js -import { defineManifest, fromMetaGlob } from '@studiometa/js-toolkit'; - -const manifest = defineManifest({ - packageName: '@my/app', - strategy: 'visible', - modules: fromMetaGlob(import.meta.glob('./components/*/*.js')), -}); -``` - -### webpack - -```js -import { defineManifest, fromWebpackContext } from '@studiometa/js-toolkit'; - -const manifest = defineManifest({ - packageName: '@my/app', - strategy: 'visible', - modules: fromWebpackContext( - import.meta.webpackContext('./components', { - recursive: true, - regExp: /\.js$/, - mode: 'lazy', - }), - ), -}); -``` - -### Per-token overrides - -```js -const manifest = defineManifest({ - strategy: 'eager', - modules: fromMetaGlob(import.meta.glob('./components/*/*.js')), - components: { - // Load this one lazily and pull in a child it configures. - Gallery: { strategy: 'idle', children: ['GalleryItem'] }, - // The file is Card.js but the exported class is `SpecialCard`. - Card: { exportName: 'SpecialCard' }, - // Rename the token exposed in the markup. - Legacy: { token: 'LegacyComponent' }, - }, -}); -``` - -### Registering the result - -`defineManifest` only builds data. Register it to start discovery: - -```js -import { registerManifests } from '@studiometa/js-toolkit'; - -registerManifests(manifest); -``` - -## Adapters - -`defineManifest` needs a `ModuleRecord` — a map of keys to lazy importers. Vite and webpack each expose a glob primitive, but they return different shapes, so there is one adapter for each. - -### fromMetaGlob - -```ts -function fromMetaGlob(glob: Record): ModuleRecord; -``` - -Normalizes the record returned by Vite's `import.meta.glob('./x/*.js')` into a `ModuleRecord`. The lazy form of `import.meta.glob` already returns `Record Promise>`, so this is an identity pass with a guard. - -**Throws** a `TypeError` when any value is not a function — that means an eager glob (`import.meta.glob('...', { eager: true })`) was passed, which resolves the modules synchronously and defeats on-demand loading. - -```js -import { fromMetaGlob } from '@studiometa/js-toolkit'; - -const modules = fromMetaGlob(import.meta.glob('./components/*/*.js')); -``` - -### fromWebpackContext - -```ts -function fromWebpackContext(context: WebpackContextLike): ModuleRecord; -``` - -Normalizes a webpack context — the value returned by `import.meta.webpackContext(dir, options)` — into a `ModuleRecord`. A webpack context is a callable with a `keys()` method rather than a record of importers, so this wraps each key in `() => Promise.resolve(context(key))`. - -`Promise.resolve` tolerates both a synchronous module (`mode: 'sync'`) and a promise (`mode: 'lazy'`). Pass `mode: 'lazy'` for real code-splitting and on-demand loading; the other modes bundle every match eagerly. - -```js -import { fromWebpackContext } from '@studiometa/js-toolkit'; - -const modules = fromWebpackContext( - import.meta.webpackContext('./components', { - recursive: true, - regExp: /\.js$/, - mode: 'lazy', - }), -); -``` - -## Types - -- `ModuleRecord` — `Record Promise>>`: a map of module keys to lazy importers, the shape the adapters produce and `defineManifest` consumes. -- `DefineManifestOptions` — the options object above. -- `ComponentOverride` — a per-token override. -- `WebpackContextLike` — the structural shape of a webpack context accepted by [`fromWebpackContext`](#fromwebpackcontext). -- `ComponentManifest`, `ComponentManifestEntry`, `ComponentLoadStrategy` — documented in the [autoload API](/api/autoload/#types). - -## See also - -- [`registerManifests`](/api/autoload/registerManifests.html) — register the manifest you build here. -- [Autoload API](/api/autoload/) — every export of the autoload engine. diff --git a/packages/docs/api/autoload/index.md b/packages/docs/api/autoload/index.md deleted file mode 100644 index 84918346b..000000000 --- a/packages/docs/api/autoload/index.md +++ /dev/null @@ -1,135 +0,0 @@ -# Autoload - -The autoload engine discovers `data-component` elements in the DOM and loads and registers their component constructors on demand, driven entirely by a **manifest** you give it. It knows nothing hard-coded about any component: it works purely from the manifest, so it autoloads your own [`Base`](/api/) components as well as any packaged ones. - -The whole API is exported from the package root and from a per-symbol subpath (`@studiometa/js-toolkit/autoload`, `@studiometa/js-toolkit/registerManifests`, …). - -```js -import { - autoload, - defineManifest, - fromMetaGlob, -} from '@studiometa/js-toolkit'; -``` - -Everything here is **pure**: importing a module never touches the DOM. Discovery starts only when you call `autoload()` or `registerManifests()`. - -## Mental model - -A manifest maps each `data-component` token to an entry describing how to load it. The loader scans the DOM for `[data-component]`, reads each token, and schedules the matching entry according to its **load strategy**. When the strategy's signal fires it imports the constructor, validates that it is a `Base` constructor, and registers it with [`registerComponent`](/api/helpers/registerComponent.html). - -```html -
-
-``` - -## Loading strategies - -Each entry has a default strategy, overridable per element with the `data-load` attribute. - -- `eager` — load immediately (the default). -- `visible` — load shortly before the element enters the viewport (via `IntersectionObserver`, root margin `200px 0px`). -- `idle` — load when the main thread is idle (via `requestIdleCallback`, with a `2000ms` timeout fallback). -- `interaction` — load on the first `pointerover`, `pointerdown` or `focusin` on the element. - -When a required browser API is unavailable the loader degrades gracefully (it loads eagerly, or falls back to a timeout) and logs a warning under the `[@studiometa/js-toolkit/autoload]` prefix. - -## autoload - -Start a standalone loader over one or more manifests and get a stoppable handle back. - -```ts -function autoload(options: AutoloadOptions): AutoloadHandle; -``` - -### Parameters - -- `manifests` (`readonly ComponentManifest[]`): the manifests to compose into a single lookup table. On a token collision, the manifest later in the array wins. -- `root` (`Document | Element`): the DOM scope to scan and observe. Defaults to `document`. -- `eager` (`readonly string[]`): tokens to force-load eagerly regardless of their strategy or `data-load` attribute. -- `dependencies` (`Partial`): dependency-injection seams, kept for testability. - -### Return value - -An `AutoloadHandle` with: - -- `loader` (`ComponentLoader`): the underlying loader instance. -- `manifest` (`ComponentManifest`): the composed manifest the loader was started with. -- `stop()`: stop discovery and release every scheduled trigger. - -### Example - -```js -import { - autoload, - defineManifest, - fromMetaGlob, -} from '@studiometa/js-toolkit'; - -const manifest = defineManifest({ - modules: fromMetaGlob(import.meta.glob('./components/*/*.js')), -}); - -const handle = autoload({ manifests: [manifest] }); -// later, to tear everything down: -handle.stop(); -``` - -## composeManifests - -Merge several manifests into one, later entries winning on token collision. - -```ts -function composeManifests( - manifests: readonly ComponentManifest[], -): ComponentManifest; -``` - -This is the pure merge `autoload()` uses internally. It never touches the DOM. - -## ComponentLoader - -The class behind `autoload()`. Instantiate it directly when you need full control over its lifecycle. - -```ts -const loader = new ComponentLoader({ manifest, root, dependencies }); -loader.start({ eagerComponents: ['Header'] }); -loader.stop(); -``` - -Importing the class does nothing; discovery only starts on `start()`. - -## Eager `` - -The shared runtime (see [`registerManifests`](/api/autoload/registerManifests.html)) reads a `` tag to force-load a comma-separated list of tokens, whatever their strategy: - -```html - -``` - -`readEagerTokens(document)` returns the normalized (split, trimmed, de-duplicated) token list. - -## Error diagnostics - -When an import, validation or registration fails for a token, the loader logs an error under the `[@studiometa/js-toolkit/autoload]` prefix and dispatches a bubbling `js-toolkit:error` `CustomEvent` on the document element: - -```js -document.addEventListener('js-toolkit:error', (event) => { - const { token, stage, error } = event.detail; // stage: 'import' | 'registration' -}); -``` - -A failure is isolated to its own token; the other components keep loading. - -## Types - -- `ComponentManifest` — `Record`, a map of tokens to entries. -- `ComponentManifestEntry` — one entry: `token`, `strategy`, a `load()` thunk resolving the `Base` constructor, plus optional informational metadata (`packageName`, `group`, `children`, `styles`, `integrations`). -- `ComponentLoadStrategy` — `'eager' | 'visible' | 'idle' | 'interaction'`. -- `AutoloadOptions`, `AutoloadHandle`, `LoaderDependencies`, `AutoloadRuntime`, `RegisterManifestOptions` — the option and handle shapes documented above and on the related pages. - -## See also - -- [`defineManifest`](/api/autoload/defineManifest.html) — build a manifest from a record of lazy importers. -- [`registerManifests`](/api/autoload/registerManifests.html) — register manifests with the shared cross-copy runtime. -- [`registerComponent`](/api/helpers/registerComponent.html) — the helper the loader registers each constructor with. diff --git a/packages/docs/api/autoload/registerManifests.md b/packages/docs/api/autoload/registerManifests.md deleted file mode 100644 index d9d99985c..000000000 --- a/packages/docs/api/autoload/registerManifests.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -outline: deep ---- - -# registerManifests - -`registerManifests` registers several component manifests with the shared autoload runtime in one call, then lets a single coalesced start flush over the composed set. Use it from an application entry point to activate your components (built with [`defineManifest`](/api/autoload/defineManifest.html)). - -It is the variadic convenience wrapper over [`registerManifest`](#registermanifest): it calls `registerManifest` on each argument in order and returns the runtime from the final call. - -## Signature - -```ts -function registerManifests( - ...manifests: ComponentManifest[] -): AutoloadRuntime | undefined; -``` - -## Parameters - -- `...manifests` (`ComponentManifest[]`): one or more manifests, registered in argument order. Passing none is allowed and is a no-op. - -Each manifest is a `Record` — usually one built with [`defineManifest`](/api/autoload/defineManifest.html). - -## Return value - -Returns the shared [`AutoloadRuntime`](/api/autoload/#types) from the final registration, or `undefined` when a conflicting runtime version already owns `globalThis` (the version guard warns and no-ops) or when no manifest was passed. - -## Behaviour - -- **One coalesced start.** The first registration schedules a single start through a microtask. Because every ES module import in a graph evaluates before microtasks flush, registering several manifests in one call — or across side-effect entries imported at the top of a module — results in exactly one [`autoload`](/api/autoload/#autoload) call over the composed set. Only one loader ever scans the DOM. -- **Last manifest wins.** The runtime composes the accumulated manifests later-wins, and `registerManifests` registers its arguments in order, so the **last** manifest wins on token collisions. Pass your custom manifest last to override a component that shares a token. -- **Shared runtime.** Registration goes through a cross-copy runtime keyed by `Symbol.for('@studiometa/js-toolkit/autoload/runtime')`, so several bundle copies coordinate through a single runtime object and still coalesce into one loader. -- **Version guard.** A manifest registered by a conflicting runtime version is ignored with a console warning, and the call returns `undefined`. - -## Examples - -### Register your components - -```js -import { - registerManifests, - defineManifest, - fromMetaGlob, -} from '@studiometa/js-toolkit'; - -const app = defineManifest({ - packageName: '@my/app', - modules: fromMetaGlob(import.meta.glob('./components/*/*.js')), -}); - -registerManifests(app); -``` - -### Layer a custom manifest over a base one - -```js -import { registerManifests } from '@studiometa/js-toolkit'; -import { manifest as baseManifest } from './base-manifest.js'; -import { manifest as appManifest } from './app-manifest.js'; - -// `appManifest` is last, so it wins on any token it shares with the base manifest. -registerManifests(baseManifest, appManifest); -``` - -## registerManifest - -Register a single manifest with the shared runtime, with injectable options — use it to build your own side-effect entry module. - -```ts -function registerManifest( - manifest: ComponentManifest, - options?: RegisterManifestOptions, -): AutoloadRuntime | undefined; -``` - -### Options - -Every seam is optional and testability-oriented: - -- `document` (`Document`): the document to scan and to read the eager `` from. Defaults to the global `document`. -- `globalObject` (`object`): the object the shared runtime is stored on. Defaults to `globalThis`. -- `version` (`string`): the identity used by the duplicate/conflict guard. Defaults to this package's version. -- `root` (`Document | Element`): the DOM scope handed to the loader. Defaults to the resolved document. -- `dependencies` (`Partial`): loader dependency-injection seams, forwarded to `autoload`. -- `console` (`Pick`): the logger used by the conflict guard. Defaults to the global `console`. -- `scheduleMicrotask` (`(callback: () => void) => void`): schedules the single coalesced start. Defaults to `queueMicrotask`. - -## readEagerTokens - -Read the eager tokens declared by ``. - -```ts -function readEagerTokens(documentObject: Document): string[]; -``` - -The `content` values of every matching meta (in document order) are concatenated, split on commas, trimmed, stripped of empties and de-duplicated. When no such meta exists the list is empty. - -## Types - -- `ComponentManifest` — a `Record`; see the [autoload API](/api/autoload/#types). -- `AutoloadRuntime` — the shared, cross-copy runtime object stored on `globalThis`. -- `RegisterManifestOptions` — the [options](#options) object. - -## See also - -- [`defineManifest`](/api/autoload/defineManifest.html) — build the manifest you pass here from your component files. -- [`autoload`](/api/autoload/#autoload) — start a standalone loader without the shared runtime, e.g. to scope discovery to a `root` element or keep a `stop()` handle. -- [Autoload API](/api/autoload/) — every export of the autoload engine. diff --git a/packages/docs/api/configuration.md b/packages/docs/api/configuration.md deleted file mode 100644 index 3646d8009..000000000 --- a/packages/docs/api/configuration.md +++ /dev/null @@ -1,259 +0,0 @@ -# Configuration - -::: tip See also -For a practical introduction, see the [Components guide](/guide/introduction/managing-components.html). For refs and options, see [Refs](/guide/introduction/managing-refs.html) and [Options](/guide/introduction/managing-options.html). -::: - -The static `config` property is required on each class extending the `Base` class. Use it to configure the class. - -## `config.name` - -- Type: `String` - -The **required** name of the component. - -```js {3} twoslash -// @twoslash-cache: {"v":1,"hash":"29b5c9774086ecf81b53c698327ffd82c582fbc606811b54b79af6a9c7626513","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808BjAGwEM44ACAYQgFssEMDDAMqcNK1INEANirMRAczT4kATiqTSSmDJC8BQkWJDMAlsKQAGKo3xTWjGuTkBfCumy5EBYmUpqOn0AClYLdgBKThZ2LgAhdhgAHgAVTmCRKASkgAVSCCwuAF5ORLgYfMK4AD4AHTBzI2kypMCoCEYEX3KYGLYOADpAySVu5GQzSwBrQPw0NCLEAHplgCs4AFo0CAhmafM0QYkAVyhzfj1WQdgiZdYsc2WQAF0X8W0ZACYAFgVlVRIP7UKS6fS9QIWKyIWwgeyOZwBRC/DxeHB4QgkchaYJ4EJYAo4aQYaKGQTCUSDRhCABm5iUiE4wAanFZnDArD4MEZElIliUAG4Gm52p1ugZafThlpWGMkBMpmBZlR5os4Ct1lsdnsDkdTudLpIbjA7g8ntSwHSlCdSKw0BcwIN5nxmK93iAJFIZD9YYowCo1HIZTo9ExJUpIZYfABGOwOW2I1zqVHUbwY/zYoL0PEEwpkTDRDlcnloPn+wKe6RIACs1f+/sBiGB2jBeCLuAUUaQXzjCJcQLc7upsCYAy4ZOMogy9CyOQqTJZnE99sYMXDnFKzLAbPZnO5nAA5BOKWgDxRF24hWARVQuZIkKBMmA4A68BsQG43EA="} -import { Base } from '@studiometa/js-toolkit'; -// ---cut--- -class Component extends Base { - static config = { - name: 'Component', - }; -} -``` - -## `config.options` - -- Type: `Object` -- Default: `{}` - -Define values configurable with `data-option-...` attributes for the component. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"0cf5abc3e0b2d431bdddbca6bae779ba5dcc99a1ca06bb519ea8d92f761d6e48","data":"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"} -import { Base } from '@studiometa/js-toolkit'; -// ---cut--- -class Component extends Base { - static config = { - name: 'Component', - options: { - stringOption: String, // default to '' - stringWithDefault: { type: String, default: 'Default value' }, - stringWithDefaultAsAFunction: { - type: String, - default: (component) => component.$el.id, - }, - numberOption: Number, // default to 0 - numberWithDefault: { type: Number, default: 10 }, - numberWithDefaultAsAFunction: { - type: Number, - default: (component) => component.$el.childElementCount, - }, - booleanOption: Boolean, // default to false - // default to true, can be negated with the `data-option-no-boolean-with-default` attribute - booleanWithDefault: { - type: Boolean, - default: true, - }, - booleanWithDefaultAsAFunction: { - type: Boolean, - default: (component) => component.$el.classList.has('bool'), - }, - arrayOption: Array, // default to [] - arrayWithDefault: { type: Array, default: () => [1, 2] }, - objectOption: Object, // default to {} - objectWithDefault: { - type: Object, - default: () => ({ foo: 'foo' }), - merge: true, // Optional, whether to merge values or not - }, - }, - }; - - mounted() { - this.$options.stringOption; // '' - this.$options.stringWithDefault; // 'Default value' - this.$options.numberOption; // 0 - this.$options.numberWithDefault; // 10 - this.$options.booleanOption; // false - this.$options.booleanWithDefault; // true - this.$options.arrayOption; // [] - this.$options.arrayWithDefault; // [1,2] - this.$options.objectOption; // {} - this.$options.objectWithDefault; // { foo: 'foo' } - - this.$el.hasAttribute('data-option-boolean-option'); // false - this.$options.booleanOption = true; - this.$el.hasAttribute('data-option-boolean-option'); // true - } -} -``` - -## `config.components` - -- Type: `Object` -- Default: `{}` - -The children components of the current one, mounted and destroyed automatically according to the state of the current component. Define children components like the following: - -::: code-group - -```js twoslash [app.js] -// @twoslash-cache: {"v":1,"hash":"fb897260465f5aecae26fd3ccbe085056ae05c161822f893d7232778ee114de3","data":"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"} -import { Base } from '@studiometa/js-toolkit'; -import { Figure, PrefetchWhenOver } from '@studiometa/ui'; - -class App extends Base { - static config = { - name: 'App', - components: { - // Direct reference, Figure instances will be mounted - // on every `[data-component="Figure"]` elements. - Figure, - // Async loading, the Slider component will be loaded only if there - // is one or more `[data-component="Slider"]` element in the DOM. - Slider: () => import('@studiometa/ui').then(({ Slider }) => Slider), - // Custom selector, ComponentThree instances will be mounted - // on every `a[href]` elements. - 'a[href]': PrefetchWhenOver, - // Custom selector with async loading, the Component component will be loaded - // only if there is one or more `.other-custom-selector` element in the DOM. - '.other-custom-selector': () => import('./Component.js'), - }, - }; -} -``` - -```js twoslash [Component.js] -// @twoslash-cache: {"v":1,"hash":"bb4cbb4fc3398dcf8167d6bc92672ea4b5802320374e1ccaaeeb04faa26e05be","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADc5iOgtc7khmezEuooXCkWicSoCSScFSGWyuXyhWKpQqVRqdQaTRaKXTYCzITKGLQVTA/gSllYxs+vW+2LW/tto3tv0d4LuLZCy3dSBPXvRmL9QfxFyJ11J9CYsa0ZEwPgSzLXgKyrJwzUPbELVPIEHXbJ0IWA3A3SRRBpifH0sXQo4TXTWA8F5Wx7GAOleCOXgM00SxeAAcgAAQnLVp2YIcVVHIpaNrMBzDoPl7FgDNmDKVh7BpERkxhd45HoJllFFfMwELHp134AQb3ZPMCyLZDc1oyTYTQWiKG0o5uPrKgWKQUBGTAOANzwTIQCOI4gA="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - }; -} -``` - -::: tip -The [lazy import helpers](/api/helpers/#lazy-import-helpers) can be used for more fine-grained imports. -::: - -## `config.refs` - -- Type : `Array` -- Default : `[]` - -Define the refs of the components by specifying their name in the configuration. Multiple refs should be suffixed with `[]`. Refs names can be configured and used in HTML following the `dash-case` pattern, and are available in the `this.$refs` object following the `camelCase` pattern. - -```html -
- -
    -
  • #1
  • -
-
    -
  • #1
  • -
  • #2
  • -
- - -
-``` - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"db1d387c6b9c9afd339eb6f75ffe043916779d80eb9689cab828c4f20618a705","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808BjAGwEM44ACAYQgFssEMDDAMqcNK1INEANirMRAczT4kATiqTSSmDJC8BQkWJDMAlsKQAGKo3xTWjGuTkBfCumy5EBYmUpqOn0AClYLdgBKThZ2LgAhdhgAHgAVTmCRKASkgAVSCCwuAF5ORLgYfMK4AD4AHTBzI2kypMCoCEYEX3KYGLYOADpAySVu5GQzSwBrQPw0NCLEAHplgCs4AFo0CAhmafM0QYkAVyhzfj1WQdgiZdYsc2WQAF0X8W0ZACYAFgVlVRIP7UKS6fS9QIWKyIWwgeyOZwBRC/DxeHB4QgkchaYJ4EJYAo4aQYaKGQTCUSDRhCABm5iUiE4wAanFZnDArD4MEZElIliUAG4WWzSDAaXAeWg+WAlMgXkKwG52p1ugZafThlpWGMkBMpmBZlR5osJasNttdvtDsc0GcLlzJDcYHcHk9qWA6UoTqRWGgLmBBvM+MxXu8QBIpDIfrDFDLAXItTo9Ex1UpIZYfABGOwOH2I1zqVHUbwY/zYoL0PEEwpkTDRDlcyXStMfSNIACs7f+cbUiGB2jBeAbuAUGaQXxzCJcQKLmHRvkxARxld8+MJtZJnFF4qb/LlgQj0iQAHYABzdlS9/ug5O+bcIUfQgDMk7z077s5LC7LI1xq4dhBQKS/DkiYgx8BAJyiDAUAhJEjJEBA5hQAenxIJmXyaGYAK9seiaDr4EFQTQKGPj48hwrmTjvl8n7zn4WK/iuIBrjWxLRL0yS9FURQ1IMAAk96Mr0ABKYoPiAHRdHgYnipqII6igkxQoaBALEsZpbDsewHEcpznJcjq3PcjzLJYEZgIwMCbNWRJ+vAgZoMGADE96hq2R6IJm7YxjhHb4beICCeJ6bQnhlFTkihaeMW9GLuWNDMSEliwLQHFJLJcDILy/IvIyAASqQALIADIAKKKFyoicAAPpwhWlRVMBVWg+4eTI3kUbGl5IC+IJJvoABGaBgKFPjhfCb5It5dE+AxS4VqEtkbulFRcXkhK1AJQmtBUmXKtJviZfJozjMpMxzOpprrFplq6TadqGdcxmumZYAWVZNnrtI5gOUGzCuSFbzteOmbAt18Zdv1BFBW5ZFIOeEVTQWs2loxy6hCldCrTAmXZVKuUFcV5WVSYtX1cTTUtW14ZociXy+T2/nQ4FhzNRJUI+Ijk3UdN7ao9+6OLVW311rtKTcZtfHBTu4v7VQUmqsdIzamd+qqcaGk3RaOnWvp9pXE6LqmeZkiWdZy0/X9TkA25wO022yLHhO2FM4gUMDoFMsc2OiBYTz+YaAL80JX+LFY2lcvifjzZ5RTjWk9VdUNSTzUmDTh7fGeF7xpmsKe/oECqGQACSNB8D70L+1RgdefzYbUrATADFwZLGNVmRgNk4tMsKEZ+owMSppwpTMmAbLspy3KcAA5G3FJoDPFDCqyO3IDPw1gEvs9sxXcrbzPRf4GQmy71lLwz+8wpuAqwpEdBsHRGPE+qOYcDbeJgybwKnCrJwySDROAsIQnAoC+lYJsbcxQ6ggE3jAmo3ALCMGmJwLkyRliAOAWAeo482Sv3ft7QYZ8f5/2QMkCwoDwGQLFNAkAZ85TwOcpmdBFgagvBXpwfBH85JH1LuXOAJDlicDIRQsBkhqE0lobw0gp9+EMJADUJhLDzA1AoP/URVCoEwOkbI9m8jFFfGUWw6+DQlRUAdKwJAoBO5wH9HgDYIA3BuCAA==="} -import { Base } from '@studiometa/js-toolkit'; -// ---cut--- -class Component extends Base { - static config = { - name: 'Component', - refs: ['btn', 'items[]', 'other-items[]'], - }; - - mounted() { - this.$refs.btn; // - this.$refs.items; // [
  • #1
  • ] - this.$refs.otherItems; // [
  • #1
  • ,
  • #2
  • ] - } -} -``` - -## `config.emits` - -- Type: `string[]` -- Default: `undefined` - -Define the events emitted by the component by specifying their name. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"6e424d5df6232e7f352e42a771fd2946c4a755a00ee245d7c416735405abee41","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808BjAGwEM44ACAYQgFssEMDDAMqcNK1INEANirMRAczT4kATiqTSSmDJC8BQkWJDMAlsKQAGKo3xTWjGuTkBfCumy5EBYmUpqOn0AClYLdgBKThZ2LgAhdhgAHgAVTmCRKASkgAVSCCwuAF5ORLgYfMK4AD4AHTBzI2kypMCoCEYEX3KYGLYOADpAySVu5GQzSwBrQPw0NCLEAHplgCs4AFo0CAhmafM0QYkAVyhzfj1WQdgiZdYsc2WQAF0X8W0ZACYAFgVlVRIP7UKS6fS9QIWKyIWwgeyOZwBRC/DxeHB4QgkchaYJ4EJYAo4aQYaKGQTCUSDRhCABm5iUiE4wAanFZnDArD4MEZElIliUAG4WWyYHxDnAeWg+WAlMgXkKwG52p1ugZafThlpWGMkBMpmBZlR5osJasNttdvtDsc0GcLlzJDcYHcHk9qWA6UoTqRWGgLmBBvM+MxXu8QBIpDIfrDFDLAXItTo9Ex1UpIZYfABGOwOH2I1zqVHUbwY/zYoL0PEEwpkTDRDlcyXStMfSNIACs7f+cbUiGB2jBeAbuAUGaQXxzCJcQKLmHRvkxARxld8+MJtZJGTFaAlnF5/LlgQj0iQAHYABzdlS9rsgpP6UXi9PQgDMk7z077s5LC7LI1xq4OoQUCkvw5ImIMNZgCEkSMkQEDmFAR6fEgmaZhOZgAr2/agsmvhQc+PjyHCuZOJ+XzfvOfhYv+K4gCEQHQNEvTJL0VRFDUgwACSPmgITOiYTb8pwAA+nAAKIkKIFCcIMcmgruJwGpAADuYByrBnDwYhypdHg4nblwrBgBkUlHCM2rjJMWCOHwgQCaInAAHKcn0EA0pwqh9A55nvNZtmBApnCpPgfSgicXKiFwOycA8WDMBgnkQJ5oWcDSSnOP6XAAEYQEpUBJSl5hcD5wx+SApB6N6YCUGAJzMMw5VQoaBALEsZpbDsewHEcpznJcjq3PcjzLJYEZgIwMCbIx2SBmgwYAMS8ZsPmbApoatieiCZi+MZYR2iaDr4PHboRZ7vmRSKFp4xZUYu5Y0HRDF6MBoFGBSRwsBAFQwXBCFIZtMiZu2GGxteB13kdcLMN9I76lmsLwh+SIUTdc4+NRS4VqEM3MUkrF5IStTcbx/FmUJMqiRJZkyXJgwKYySnTKp6kvJp2kAyAHR6b4BnirFJmlRZOooP5Pp2VQPnOa5nDuSl3lmWVFBi5ygU6FwIVhToEUmNFyVxQlhVeWlGV+kIOV5WABUxaoxWmRBrzKxVVWkDVFB1Q1TUzHMbWmusnWWj1Np2gN1xDa6o1gONk3TS90BwHNi3Lat61vIDqGntmmE9hDA54SAJ2HGd21Z0jl0FpRGP3bRONxyBPBgcYlI7EoSiKL9Wn/chbbbeowJg/GxF5/oLdt3DUJZsCZf5uOleljRy616oTGtBUBMVOxxOF3xPkU0oVOSSYtPyerjPKRAakaX9OlUNzqp8zuAv25SwtWSANni/ZZnS1yssecbQtyof1VlQIKmtYra0io/GKBtEo21SulCaZso6cFyvlI2+A7aAKdpVW0rtar1Uak7ZqPsTQrH9habq1o+r2iuE6F0I0xqSAmlNGaCcgzMCWtuFaZk1rqw2uGFCyJMz932ogW8w88Db2LsDC6M9ECFjDNSWATABhcDJE3NAGR6BZByBUJkwoIx+kYDEVMnBSjMhMmyYcjIADkGiPq2IoMKVkvFdzIFsVBJxnBbFfQqLY94wo3AKmFFBGCBirGsltgnbeIRPE4DALYyICpWRuAaMKPxMBwmWLZEVGJpNfEw38ckoJ6SrGj3btEHJbJokk23HEipMAkkCk4KsTgKlzANXZBALR2VvLbhoAVYyBUOldKlPSXQpBYrtKkI0GUpTFSBAdKwJAoBMhR39HgDYIA3BuCAA=="} -import { Base } from '@studiometa/js-toolkit'; -// ---cut--- -class Component extends Base { - static config = { - name: 'Component', - emits: ['open', 'close'], - }; - - open() { - this.$emit('open'); - } - - close() { - this.$emit('close'); - } - - toggle() { - this.$emit('toggle'); // will not be emitted and will trigger a warning - } -} -``` - -## `config.log` - -- Type: `Boolean` -- Default: `false` - -Enable the `this.$log(...args)` method when `true`. - -## `config.debug` - -- Type: `Boolean` -- Default: `false` - -When `true`, js-toolkit logs the lifecycle hooks and services hooks to the console. - -:::tip -The debug logs are conditionally rendered based on a `__DEV__` global variable which defaults to `false`. To enable it in dev mode, use the [`DefinePlugin`](https://webpack.js.org/plugins/define-plugin/) with Webpack or the [`@rollup/plugin-replace`](https://github.com/rollup/plugins/tree/master/packages/replace) with Rollup. - -**Example Vite configuration** - -```js -// vite.config.js -import { defineConfig } from 'vite'; - -export default defineConfig({ - define: { - __DEV__: JSON.stringify(process.env.NODE_ENV !== 'production'), - }, -}); -``` - -**Example Webpack configuration** - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"641939dbaa5a0f1601ad2b42babf70a79136e704efdb7a0d33cadc3686128916","data":"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="} -import webpack from 'webpack'; - -export default { - plugins: [ - new webpack.DefinePlugin({ - __DEV__: JSON.stringify(process.env.NODE_ENV === 'development'), - }), - ], -}; -``` - -::: diff --git a/packages/docs/api/decorators/index.md b/packages/docs/api/decorators/index.md deleted file mode 100644 index 009b97d33..000000000 --- a/packages/docs/api/decorators/index.md +++ /dev/null @@ -1,20 +0,0 @@ -# Decorators - -Decorators are used to add extra functionalities to a Base class. For a practical introduction, see the [Decorators guide](/guide/going-further/using-decorators.html). - -The following ones are available: - -- [withBreakpointManager](./withBreakpointManager.html) -- [withBreakpointObserver](./withBreakpointObserver.html) -- [withDrag](./withDrag.html) -- [withExtraConfig](./withExtraConfig.html) -- [withFreezedOptions](./withFreezedOptions.html) -- [withGroup](./withGroup.html) -- [withIntersectionObserver](./withIntersectionObserver.html) -- [withMountOnMediaQuery](./withMountOnMediaQuery.html) -- [withMountWhenInView](./withMountWhenInView.html) -- [withMountWhenPrefersMotion](./withMountWhenPrefersMotion.html) -- [withMutation](./withMutation.html) -- [withRelativePointer](./withRelativePointer.html) -- [withResponsiveOptions](./withResponsiveOptions.html) -- [withScrolledInView](./withScrolledInView.html) diff --git a/packages/docs/api/decorators/withBreakpointManager.md b/packages/docs/api/decorators/withBreakpointManager.md deleted file mode 100644 index b24463bc9..000000000 --- a/packages/docs/api/decorators/withBreakpointManager.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -outline: deep ---- - -# withBreakpointManager - -Switches between different child components based on the active breakpoint. - -## Usage - -```js {5-8} twoslash -// @twoslash-cache: {"v":1,"hash":"002adc63152512737ba35a6b627138bfe344172fc5131b0beb7a465299b0c9fc","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLwA7kX4oqQwZgxGzsMBoACyzDAoTIkgAynJ6CMlA4YMZGF4AMK+OCIXiYHAQJ6oii8ABGAKBILBuN4AEFSKRmBhJMhSqRQSFSViIGB2WU9rZJF5jO1jNw8V4ACIwfi2Zi5UjCiQASTBZCeuxgpLhZgs1ls9h+43+gOBEFBEKhMPIVBcbkWlPNlsh0PmpB8wkCM1C4Ui0TiVASSVxaUyOTyBSKJXKlWqtWY9RgjWarVgcqZirgKWNfyd1KtbrI/gSllYHS6IB6fUQAEYAKxDEZjCaIABMtZ9cwWHlzpqpFrBrpty1Bqw2IC2Oz21zr9ZOZxweEIJFt1FuHisNjsvHBIzK4IgZPYwyc1YYiAA7Jem6NxkhaxPZvMLyA92AD0eT7ghmOH5ttiZGcDkvBdqHOZcrjXGh6DwLdDV3fcZTgGJciwM9ZgvWtawANlvFsH07ahehfPB3zKZDUK0UcwFWNsAOnfYkFA05wKXDwV2uGYN0nHFEI/DDeiwy96KiZt70QaZiO7V9yJo1YpKnICmPbWswIJC5OOgniWA4Lg+D7fNB0LG1lVUMz1E0bRjHRLEcTxDSiRJckjMtWkGSZFk2TQDlRm5CRMV5flBSVEUxQlVEZQzBUhS8NV9k1fhtVRCzDGsvV4J3QyzQLYd3Sce13E8Vyh2td1PT8b1iLCJAIiiUFAwIRJkjDbJcnyQpilKCoqhqOoGiaFoUnTeUsxzX5+2dUqi1IEs0DLCtukwh8AA5GzEu9Ww7LtSN7CaSpM/Lf1oqYGOU2cAGZJnUiCOKgm5YI8XSHj4QRhBS2R5GRZQDCs3RUTSkxzEy+wljtVwiq8CqAiCX1av9Br4ma0MMjayNOpjHr4365NBtaRaq2W9s1hvDaCMknae08CR5NOydAN2FT6xwm72MuVcHtfEH+M/Y9TyWoSkDbC6J2GTaHyfEiqfIw8+Z/eqTsQdalMZ2cG1ZzT7u4x6QG58jKLQwSazbHDRfE1tsMp2SkPgKj0OO1Y8Ppxi1ZYxdNY57XX0YLArLITA+HI/w5TAJ52BCPFgHMXgY94aEajxdlOQAbnMI4jYvNsVpW/CJKd58qZDsOQlpxAc+d86DmOViNMgz31x1n2/bsDA+HjmBE58zkM6QEWLtz1spIL1929LwYK9Vg5rsrOVYDgg0d2AZzsoHF0yrIXgjmeTRLF4AByAABbq4z65hUYjDqij31P9W3ewZa/YZt+qff/BSB+5ev4GF/vm2ULQ5+u895v31rbNCX8wDmDoHfXgsBNRlFYPYN6fgeaIgUCiFeU1DpkAxBIUkyBo68GQHvWgtARBkN4HAPepIP7fi6IQ4hu9WC8FoMw0hrBqE8wNloehYB2h8Cjp8ShwQ0DsH4AIXkxdeB6EEbHOOzAE773ItQwhRwb7pyoKfJAoAvp8g+HgTIIAjhHCAA="} -import { Base, withBreakpointManager } from '@studiometa/js-toolkit'; -import MenuMobile from './MenuMobile'; -import MenuDesktop from './MenuDesktop'; - -export default class Menu extends withBreakpointManager(Base, [ - ['xxs xs s', MenuMobile], - ['m l xl xxl', MenuDesktop], -]) { - static config = { - name: 'Menu', - }; -} -``` - -### Parameters - -- `Base` (`BaseConstructor`): The `Base` class or a class extending it. -- `options` (`Array<[string, BaseConstructor]>`): Definition for the components to be used for each breakpoints - -### Return value - -- `BaseConstructor`: A child class of the given class which will mount the given components based on the current active breakpoint - -## Examples - -### Switch between component classes - -In the following example, the `MenuMobile` class will be mounted along the `Menu` class on small devices and destroyed on large devices. The `MenuDesktop` class will be mounted on large devices and destroyed on small ones. - -The root element `this.$el` of each class will be the same. - -```js {5-8} twoslash -// @twoslash-cache: {"v":1,"hash":"002adc63152512737ba35a6b627138bfe344172fc5131b0beb7a465299b0c9fc","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLwA7kX4oqQwZgxGzsMBoACyzDAoTIkgAynJ6CMlA4YMZGF4AMK+OCIXiYHAQJ6oii8ABGAKBILBuN4AEFSKRmBhJMhSqRQSFSViIGB2WU9rZJF5jO1jNw8V4ACIwfi2Zi5UjCiQASTBZCeuxgpLhZgs1ls9h+43+gOBEFBEKhMPIVBcbkWlPNlsh0PmpB8wkCM1C4Ui0TiVASSVxaUyOTyBSKJXKlWqtWY9RgjWarVgcqZirgKWNfyd1KtbrI/gSllYHS6IB6fUQAEYAKxDEZjCaIABMtZ9cwWHlzpqpFrBrpty1Bqw2IC2Oz21zr9ZOZxweEIJFt1FuHisNjsvHBIzK4IgZPYwyc1YYiAA7Jem6NxkhaxPZvMLyA92AD0eT7ghmOH5ttiZGcDkvBdqHOZcrjXGh6DwLdDV3fcZTgGJciwM9ZgvWtawANlvFsH07ahehfPB3zKZDUK0UcwFWNsAOnfYkFA05wKXDwV2uGYN0nHFEI/DDeiwy96KiZt70QaZiO7V9yJo1YpKnICmPbWswIJC5OOgniWA4Lg+D7fNB0LG1lVUMz1E0bRjHRLEcTxDSiRJckjMtWkGSZFk2TQDlRm5CRMV5flBSVEUxQlVEZQzBUhS8NV9k1fhtVRCzDGsvV4J3QyzQLYd3Sce13E8Vyh2td1PT8b1iLCJAIiiUFAwIRJkjDbJcnyQpilKCoqhqOoGiaFoUnTeUsxzX5+2dUqi1IEs0DLCtukwh8AA5GzEu9Ww7LtSN7CaSpM/Lf1oqYGOU2cAGZJnUiCOKgm5YI8XSHj4QRhBS2R5GRZQDCs3RUTSkxzEy+wljtVwiq8CqAiCX1av9Br4ma0MMjayNOpjHr4365NBtaRaq2W9s1hvDaCMknae08CR5NOydAN2FT6xwm72MuVcHtfEH+M/Y9TyWoSkDbC6J2GTaHyfEiqfIw8+Z/eqTsQdalMZ2cG1ZzT7u4x6QG58jKLQwSazbHDRfE1tsMp2SkPgKj0OO1Y8Ppxi1ZYxdNY57XX0YLArLITA+HI/w5TAJ52BCPFgHMXgY94aEajxdlOQAbnMI4jYvNsVpW/CJKd58qZDsOQlpxAc+d86DmOViNMgz31x1n2/bsDA+HjmBE58zkM6QEWLtz1spIL1929LwYK9Vg5rsrOVYDgg0d2AZzsoHF0yrIXgjmeTRLF4AByAABbq4z65hUYjDqij31P9W3ewZa/YZt+qff/BSB+5ev4GF/vm2ULQ5+u895v31rbNCX8wDmDoHfXgsBNRlFYPYN6fgeaIgUCiFeU1DpkAxBIUkyBo68GQHvWgtARBkN4HAPepIP7fi6IQ4hu9WC8FoMw0hrBqE8wNloehYB2h8Cjp8ShwQ0DsH4AIXkxdeB6EEbHOOzAE773ItQwhRwb7pyoKfJAoAvp8g+HgTIIAjhHCAA="} -import { Base, withBreakpointManager } from '@studiometa/js-toolkit'; -import MenuMobile from './MenuMobile'; -import MenuDesktop from './MenuDesktop'; - -export default class Menu extends withBreakpointManager(Base, [ - ['xxs xs s', MenuMobile], - ['m l xl xxl', MenuDesktop], -]) { - static config = { - name: 'Menu', - }; -} -``` - -:::tip -See the [`resize` service documentation on breakpoints](/api/services/useResize.html#breakpoint) for a more comprehensive view of the potential values of the `activeBreakpoint` property. -::: diff --git a/packages/docs/api/decorators/withBreakpointObserver.md b/packages/docs/api/decorators/withBreakpointObserver.md deleted file mode 100644 index 42526612e..000000000 --- a/packages/docs/api/decorators/withBreakpointObserver.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -outline: deep ---- - -# withBreakpointObserver - -Mounts or destroys a component when the active breakpoint changes. - -## Usage - -```js {1,3,7-10} twoslash -// @twoslash-cache: {"v":1,"hash":"97148ff2f9540e210922119197af6dbe673bf0528ddadaa3af43c40753721007","data":"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"} -import { Base, withBreakpointObserver } from '@studiometa/js-toolkit'; - -export default class MobileComponent extends withBreakpointObserver(Base) { - static config = { - name: 'MobileComponent', - options: { - activeBreakpoints: { - type: String, - default: 'xxs xs s', - }, - }, - }; -} -``` - -### Parameters - -- `Base` (`BaseConstructor`): The `Base` class or a class extending it. - -### Return value - -- `BaseConstructor`: A child class of the given class which will be mounted when visible and destroyed when invisible. - -## Examples - -### Enable for the given breakpoints - -In the following example, the `MobileComponent` class will self mount on devices matching any of the breakpoint defined in the `activeBreakpoints` property, and self destroy on all others: - -```js {1,3,7-10} twoslash -// @twoslash-cache: {"v":1,"hash":"97148ff2f9540e210922119197af6dbe673bf0528ddadaa3af43c40753721007","data":"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"} -import { Base, withBreakpointObserver } from '@studiometa/js-toolkit'; - -export default class MobileComponent extends withBreakpointObserver(Base) { - static config = { - name: 'MobileComponent', - options: { - activeBreakpoints: { - type: String, - default: 'xxs xs s', - }, - }, - }; -} -``` - -### Disable for the given breakpoints - -The same behaviour as before can be achieved by specifying all the other breakpoints in the `inactiveBreakpoints` property instead: - -```js {1,3,7-10} twoslash -// @twoslash-cache: {"v":1,"hash":"b5a37f3cf7648b37ab8b30c0f220de3b0cf662e3168c1da59eb1fba3aa527778","data":"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"} -import { Base, withBreakpointObserver } from '@studiometa/js-toolkit'; - -export default class MobileComponent extends withBreakpointObserver(Base) { - static config = { - name: 'MobileComponent', - options: { - inactiveBreakpoints: { - type: String, - default: 'm l xl xxl', - }, - }, - }; -} -``` - -### Extend existing components - -You can add the `BreakpointObserver` behaviour on an existing component by wrapping it with the `withBreakpointObserver` function: - -```js {1,9} twoslash -// @twoslash-cache: {"v":1,"hash":"2075a07e7999e7f58daaeaeb25905274ed608aca53b6dcffbcddb70d04f52010","data":"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"} -import { Base, withBreakpointObserver } from '@studiometa/js-toolkit'; -import { Modal } from '@studiometa/ui'; - -class App extends Base { - static config = { - name: 'App', - components: { - Modal, - ResponsiveModal: withBreakpointObserver(Modal), - }, - }; -} -``` - -The `ResponsiveModal` registered component will have the capacity to use either one of the `activeBreakpoints` and `inactiveBreakpoints` configuration options by setting the `data-option-active-breakpoints` or the `data-option-inactive-breakpoints` attribute. - -:::tip -See the [`resize` service documentation on breakpoints](/api/services/useResize.html#breakpoint) for a more comprehensive view of the potential values of the `activeBreakpoints` property. -::: diff --git a/packages/docs/api/decorators/withDrag.md b/packages/docs/api/decorators/withDrag.md deleted file mode 100644 index fe96ebb5b..000000000 --- a/packages/docs/api/decorators/withDrag.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -outline: deep ---- - -# withDrag - -Adds a `dragged(props)` hook from the [drag](/api/services/useDrag.html) service. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"ab5eec626c7736214d920e7364fb4371f350790fee310d8aabb282b8c9ae394a","data":"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"} -import { Base, withDrag } from '@studiometa/js-toolkit'; - -export default class Draggable extends withDrag(Base, { - target: (instance) => instance.$el, - dampFactor: 0.5, -}) { - static config = { - name: 'Draggable', - }; - - /** - * @param {import('@studiometa/js-toolkit').DragServiceProps} props - */ - dragged(props) { - this.$el.style.transform = `translate(${props.x}px, ${props.y}px)`; - } -} -``` - -### Parameters - -- `BaseClass` (`Base`): The class to add draggable capabilities to -- `options?` (`{ target?: (instance:Base) => HTMLElement, dampFactor?: number }`): Options to choose the draggable target element and the drag dampFactor. - -### Return value - -- `Base`: A child of the given class with draggable capabilities - -## API - -### Hooks - -#### `dragged` - -The `dragged` hook runs while the user drags the target element. - -**Arguments** - -- `props` (`DragServiceProps`): the [drag service props](/api/services/useDrag.md#props) - -## Examples - -### Move the root element - -This decorator adds drag capabilities to the root element of a component. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"99cc2b12e80f11ad72f8f342d6cdd1e4b887a2b5d4a3bbeb4978daac55a9576f","data":"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="} -import { Base, withDrag } from '@studiometa/js-toolkit'; - -export default class Draggable extends withDrag(Base) { - static config = { - name: 'Draggable', - }; - - /** - * @param {import('@studiometa/js-toolkit').DragServiceProps} props - */ - dragged(props) { - this.$el.style.transform = `translate(${props.x}px, ${props.y}px)`; - } -} -``` - -:::tip -We recommend using the [`domScheduler` utility](/utils/domScheduler.md) to update the root element position, see the [`Draggable`](https://github.com/studiometa/ui/blob/master/packages/ui/Draggable/Draggable.ts) component source for more details. -::: - -### Move a ref element - -```js {4,8,14-16} twoslash -// @twoslash-cache: {"v":1,"hash":"4f56ed367db5e185b238215f398c5d91b27cf48c5274d964579c4b037b20ca0a","data":"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="} -import { Base, withDrag } from '@studiometa/js-toolkit'; - -export default class Draggable extends withDrag(Base, { - target: (instance) => instance.$refs.draggbale, -}) { - static config = { - name: 'Draggable', - refs: ['draggable'], - }; - - /** - * @param {import('@studiometa/js-toolkit').DragServiceProps} props - */ - dragged(props) { - this.$refs.draggable.style.transform = `translate(${props.x}px, ${props.y}px)`; - } -} -``` - -::: tip -You can use the [`transform(element, transforms)` function](/utils/css/transform.md) to apply transform to an element. -::: diff --git a/packages/docs/api/decorators/withExtraConfig.md b/packages/docs/api/decorators/withExtraConfig.md deleted file mode 100644 index 06b9ad808..000000000 --- a/packages/docs/api/decorators/withExtraConfig.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -outline: deep ---- - -# withExtraConfig - -Creates variants of an existing class by merging in extra configuration. - -## Usage - -```js -import { withExtraConfig } from '@studiometa/js-toolkit'; -import Component from './Component.js'; - -export default withExtraConfig(Component, { log: true }); -``` - -### Parameters - -- `BaseClass` (`Base`): The class to add extra configuration to. -- `config` (`BaseConfig`): The extra config to merge with the existing one, see [Configuration](/api/configuration.html) for more details - -### Return value - -- `Base`: A child class of the given class with the merge configuration - -## Examples - -### Add new refs - -This decorator adds a new ref to an existing component. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"0c537c1ec299f48ae83db32c2fa19a689da001c6a3ac0c780aea0f66a4a3d3c2","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AstDYAeACq86NMFBEAhLjAAKpCFhEBeXqrgatOgHwAdMOwC2WCKTRiJrSiCgR+CRCHFQ2AoTg4ADpXNGYAcy9kZBAOMABrV3w0NB1EAHoMgFd2YLg0bKh2CGsYcODYIgz+UrswGDA0OAzfNgyQAF1OqgLmByQATipWRoi0fCQAVipw0gjyvDaXEfYGpAAGKn58fuZ+GnJEQYBfCnRsXG9CEnJZ+SY2Th5eADNssAOSsF4Ad3YJgBReikZgAYQgYFe7AikgAynJ6I0lAY1KZGIYYGDAnBELxMDgIK9UUYKAJIdCInj1P00JxWJJMRCoTDTGTtHTIXAAPx42AwLBleYwYIAeSwnLAPDxmIAIjBaqC0PZGWoAJJNMivfYwMlwixWWz2Rz/IEg8EUmGudyePDAhQoiYwcksiLZJXfXhE3jMH50dgFNYRALCUKzSLRWLxJJUFJpXFZABWcAAtMqIKwEgD8oViqVysxKjBqswsOwMrBFcxlaQWqb8PbQczKcEUtYXN1enMGIgpjM4mMJkgAIz9uYLHsgeuNi2u1zxK7D7a7UEHMhDM4XHB4G7r+70R4cLh8afm5sw1VGS/GbRwUzopk4vEEmDezFk2qu6m0+nX88RNkvQlb4eT5GABSFBYxWArluBlNR5SrGtrw1Q5tX4XUSRga9NFve9LBsOwHD+AEGzPS0ImtDwvBAe1kREJ0XUpd1q09b1fURAM6TAYNBFDMIIyQGI4jWGMCFSdIk1TdNM2zAoihKMoKiqDJS3LSt7Grew61Imd/1bNB2y6HoQD6AZEGHAAmLYBx4ocLLHfoJzwU80CbCj5zWK4AGZlz2NcjlHTdqEuHdiD3agHm8FgjxePigicPwGVkeR6Kw3CdF4fRMQyu8CKNYjlio21vGWEMgjDahBJQKNROSCSExyPJ5LzJTCxU2ojQaJoWmWDpO1M7sR28gA2EZB0mXtw2FScitWdZEF8kAdn8w4kG84dgpfMLbjCKKQEYLATDITA+FIGBXlA3gClIINkE6XgAB9eA+WBoQaKBXDMnthwAFn7UY7Mm37puc7xzsuzyFqWlbVzWxBfo2E4TNqWA8EI41eGARL/BON4tGsXgAHIAAEWsUgsmtaZwiYAbnyojHGx1z3NdXg8deAnibJ3MKfCDJkzTCAMyzNA6csSw6EZ3g3uYbJWBNXTyNdRhljJbGIdxXhkCJ5UIgiUYiYek5uFp1w2qQUBUqlb48GTEAThOIA=="} -import { Modal } from '@studiometa/ui/Modal'; -import { withExtraConfig } from '@studiometa/js-toolkit'; - -export default withExtraConfig(Modal, { refs: ['toggle'] }); -``` - -### Change default options - -Components can define default values for their options, this decorator can be used to change them without the hassle of re-writing the whole configuration. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"18422e655d001c5caee1d10d33a8e7d2ab3c9e18a033eb70f8b6441e31e5fd8a","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AstDYAeACq86NMFBEAhLjAAKpCFhEBeXqrgatOgHwAdMOwC2WCKTRiJrSiCgR+CRCHFQ2AoTg4ADpXNGYAcy9kZBAOMABrV3w0NB1EAHoMgFd2YLg0bKh2CGsYcODYIgz+UrswGDA0OAzfNgyQAF1OqgLmByQATipWRoi0fCQAVipw0gjyvDaXEfYGpAAGKn58fuZ+GnJEQYBfCnRsXG9CEnJZ+TwbOwdeAHd2CYBRelJmAGEIGAAGbsCKuPoDRBTGZxMYTJAARhhcwWDG87y+P3+gJBYNW60QCO2u1+BzIQzOFxweBu5Pu9Eetnsjgx+G+aF+AOBoPBczRCIATFtYWBxpNCcj+qi8Kz2ZycTz8VcAMzEvZko5IynUS404h06gPbwsDhcPiCYROPysGRyeiNJQGNSabR6J1GF1mSxPZlWtiudyeJbOALCUKzSLRWLxJJUFJpOCZHJ5ApFEplCpVGp1QGNZqtZwdbq9PmI5UANhGcPFkvmi28y1c8RVatJhyQyoR2sw1Ou+ruhoZxqwJjImD42jQJTAid4wEsvEXvAKGFGs/nYCXW94sCBzGyrDQiF4jD4ulMc5OAG4F0vr5YTrz+vyACwAdirovhiA/1Cl9ZASdpwQJUkBfVt9nbRABW7XU+1uMIjRARgR20McMD4Fc12PDct13fdD2PU9eHPS8bzAR8S2fRFywFT8xSQSs/zrNEQCw+AmzWK4YR2dUoJfWDewIftEKHZDUJwBwMJ3GA9wPI8TzPC9gEotjS0JN8AA56O/X8UQA/D5M4gkmN4ttyUQcsTh6EBalgRlnkcYA/VYXgTl4IEtGsXgAHIAAFU2KUpymYZMC2tHzyJ9F5nNlLEuVxNyPK83yAsKIKM1CgArOAAFo0AgCBWASD5IssSw6EcmS5MPN4PjZeKFQiRhlgoOdbyAwF11vRd2O6zdt0MwjFJIi9GGADIACpeGCWbeEmjITm4CgerclaBrOB9uCvVxMqQUB5EaOBpzwHKQBOE4gA="} -import { Modal } from '@studiometa/ui/Modal'; -import { withExtraConfig } from '@studiometa/js-toolkit'; - -export default withExtraConfig(Modal, { - options: { - styles: { - default: () => ({/* ... */}), - }, - }, -}); -``` - -### Enable debug or logging - -This decorator can be used to quickly enable debug for an external component. - -```js {9} twoslash -// @twoslash-cache: {"v":1,"hash":"7071db68244f07c73aa9eb35e4d093f85934ed73bedbfe2697886860c7f212fd","data":"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"} -import { Base, withExtraConfig } from '@studiometa/js-toolkit'; -import { Modal } from '@studiometa/ui/Modal'; - -class App extends Base { - static config = { - name: 'App', - components: { - Modal: withExtraConfig(Modal, { debug: true }), - }, - }; -} -``` - -### Pass option to the merge function - -This decorator uses [`deepmerge`](https://github.com/TehShrike/deepmerge) to merge the `config` properties, you can pass [options](https://github.com/TehShrike/deepmerge#options) to it with the third parameter: - -```js {7} twoslash -// @twoslash-cache: {"v":1,"hash":"15534f369b7dc0e1e7fe0b0a62147f64373fbc2f23cca699bcb7a8fe30b2fd42","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO7s0+AKL1SzAMKT+7AOYAeAMq86NMFDi8AQlxgA+RpbgxVrLnES9MOCPwtWKvERrabgAKzKTibDr2joFa1n4QWOKScAD8brAwWAC2ZFowAHQA8kkSYDxu0QAiMAEqaBCkUVYAkmA0pPzMIjB+etYAOmDs2ViNaDJyispqsZQgUBAiCIggSsam7vgw/rGC9WW8XrzMUnTscOJgWv7OcHAF82jMWivIyCAcYADW8/hoaCwrgA9MCAFZwAC0DQgrG+cgKl0EUAkuWeBVgRGBzCw7GBsDqzAapDgwNk8nWKnUYE0WgK/2yrBAAF1mVRLmEGIgAJxUVgwa7yJAARgArFRnqR8lyQOTpmgqXM+ewwLhEAAGKgifBhbodJDcgC+FHQ2DVBGIZCeRiYbE4PFuLl4AFloJEACqGegCzbRYKkRJmAC8Pgc/sDg2Go3GLrdTKoi2WeFdUDYjvujwlLzeHy+vyo/0BIOBgnYiLQyNRMHRmOBAWjqvapJTbGBLLZIA54SQADYAOx8gVaIWIcXUMLS5Nx+ZfNXCrU6lRiK0842mnB4QgkcgSm2rFgcLh8OWU2Y07TNByXmDhoHWWzRJwuNweGDHaJ+ALnrQhTmcVjXtStLxEcpQpOkvCZDkeSFCUyTlNwlRWDUhLEtebQdF0PR+NE163nA95DCMYzhJMFIzEB2jzImKxrN6JhmPIOxfrS+xEocxynF6FxXDcIh3A8TzZkg7yfCq+YEACQKIKCELQhAsLwmg5aVhAaLMBiMBYjieIEo0RKNKSJ4UbE9JoIy7bspKXLCgATJqnxDiOYpZlK1Z4MZCpnrSM4qmqADMC66su5CIGKa7UGam6Wju1B7iAB72nw/FOi2AGekYPpmH6AZArwIY5RGRHRqRaXUUstFpemglZq8Im5uJfxScWpYqSianVhptb1mMjZoM2cZtqyVmciK/m8o5gr4EgY6SpOqxlcqqpIAALEFS76ogtkRa+0Xbta9BMFguVkJgfCkDA/BpG4lykCqWjIMyvAAD68MIsCaKqUDzF2Nmimtk3DtNiAA3N7mrBdV2+ctiA9uteoritO1RasW5Wruh37mihBQHwUG5G5xRgeUBRhCoGDOjBqSMGDaBuKcGCPX4cAQPsPT02AjNsqB8HXZBMBZAT+QFAAgqQ5OU25cFlBUJyc49P3WSKAAcY78lNIoObTeBk8wFMwdDaoTdqwWbUjJqRRuqMxQdMqMFgupomQfC0xzXOK6NYXcnDgMjj72urNrS1G/DIUiqKyNWxa+0Y3bDsqE7pB8CzbMwG7Csjd2W3qgD6tA72rnzZ2rOkD0hsGqHm22f5kfmmjsU0JjCXx8wid8IkvMZAL0GE2LEswdLKQvW9JiXX532Z1ytl2YOGuIAO45uTKHcy+XPKVyu/nCoaHYBLAeDETGwBkfKirfrwhoCAG2S8AA5AAAki7XqeCUIwnCci3wA3MVJETMfVVL78GvnfR+FZn6dRLHiNK38hhDDoH/fmXRBCsAmJ5M+tJGBDF4LGVMrAKDYN4MAQhODIauF4MgW+DQtBaH5LfNkhDjSEOIVIHBJxxZ60lvkGmE5qzMxLthHmMs+AsLYWw4EAAqXgBQZG8AkcCEhF8CGsKYWAbgX95jqSQKATK5Qyh4AhCAQ0hogA==="} -import { withExtraConfig } from '@studiometa/js-toolkit'; -import { Modal } from '@studiometa/ui/Modal'; - -export default withExtraConfig( - Modal, - { - refs: ['toggle'], - }, - { - arrayMerge(target, source, options) { - /* ... */ - }, - }, -); -``` diff --git a/packages/docs/api/decorators/withFreezedOptions.md b/packages/docs/api/decorators/withFreezedOptions.md deleted file mode 100644 index 0eb64a3ae..000000000 --- a/packages/docs/api/decorators/withFreezedOptions.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -outline: deep ---- - -# withFreezedOptions - -Makes the `$options` property read-only. This improves performance when you access options in the [`ticked` service method](/api/methods-hooks-services.html#ticked). - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"d162b66715653d4fd1863bfd8e99b147b29beaabaa02811eddc136182f1fe966","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO7s0+AGKkYMAF4woAeSzjJcADwBlXnRpgocXgCEuMAHyMbcGAGFWXOIl6YcEftdtuLycYABEYEQhSZjQo/QB1OUVlNQ1tXTA4AEkwGlJ+ZhEYCl5DOwAdMHYAWywotBkkpRV1LR0JTMoQKAgRBEQQZtTvfBheAAMAEgh2vXHeLFIZskxvCF4axeIxnHyo6uZRGAA6LrRmAHN+5GQQDjAAay78NDQsTwB6D4ArOABaWIQVgPOTHOBoQRQCTVGDnY6wIgfZhYdgfWCRaKxUhwD6yeRDVrpDpwY4vaqsEAAXUpVHBzFIDEQAE4qKwYGALvIkABGAAcVHOpAusLweOSLTSs06rPYYFwiAADFQRPh6YU8kgmQBfCjobDygjbcgC0xMNicHi8ETuOCWQwcWCkfQAFRM9HZFgCzgACkt3rwALxemC+mZwCpVWr1UoOshdHp9PD29iOq02klnS7XW73J5UF5vT4fQTsMEQqEQGFwhEfSJRuW5HHJx0fKkUW6xHpdZjc7kYKk0kB0hlIADsSru7M5+CQADYBfThYyQM24zK5TzlaromI48ydXqcHhCCRjdRTQNrR4YymyIl8SlCVKELTBYzuQAmAAsrKnXMQ34LkKIoDKupD3uKqRtBkL53LK8oAMxbmqu7kAB3IHtQ+rHkaZwXiALAcFwfBigSkowfoISUbYobvHYDghG4HheD4MB+MGQTBuEGIxHEEFkdBxI5HkBRFCUVEhLR4YRps0akY+5HEvGvT9IMCkjGMUwzDB8xbLsqyxBstRLCQCxkPw+yHEUpwLlcSA3HBjzPK87yIF8vwAhAQIgmgZaQtCsLMPCMCIsiqLolEvHYriTQKYJeikmg5IDq+9LvgArKOv4cv+fJAUuoqxRK8XSo5iHITuGqIOlX6YaxOGnnh9BmkRlpXraN6Oi6bpmJ6kl+pYQb9WGMlRgynVrt0KlJrGpBph4NnUFm9k5rKeYEC5RYln5FZVkFNZ1nUDZoE2s2tjSHbQBA3a9v21KpSOiDcqOLKTjlM6IPOS3AcuYFdPc8o/iAKooVVH5aoOkSwHgsnjcAjQPsVRJ6LwWoCEs1S8AA5AAAuC/mVoFPz/ICwJyFjADclSww08Ngaj6OVtjePlgF5zFuwlOVJUdB1ONsAFIIrANO1dqzfxcXI5kPUepY8lI8+jCVLwE2kBQlR8MAWpdHtSCgKY7JwB0eC/CAWpakAA="} -import { withFreezedOptions } from '@studiometa/js-toolkit'; -import { Slider } from '@studiometa/ui'; - -export default class SliderWithFreezedOptions extends withFreezedOptions( - Slider, -) {} -``` - -### Parameters - -- `BaseClass` (`Base`): The class to use as parent. - -### Return value - -- `Base`: A child class of the given class with the `$options` property freezed. diff --git a/packages/docs/api/decorators/withGroup.md b/packages/docs/api/decorators/withGroup.md deleted file mode 100644 index b93653c47..000000000 --- a/packages/docs/api/decorators/withGroup.md +++ /dev/null @@ -1,234 +0,0 @@ ---- -outline: deep ---- - -# withGroup - -Groups components together. Use this when a component needs to be aware of its siblings, for example to create a tabs system. - -This decorator adds a `data-option-group=""` option which can be used to group components together from the DOM. An instance of a component will be present in a group, exposed with the `$group` getter, only when it is mounted. - -## Usage - -```js {3,9,15} twoslash -// @twoslash-cache: {"v":1,"hash":"f47e2977d1fd012975ac3b8f75477ec22a97ae743b48547f37f678930b5860c8","data":"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"} -import { Base, withGroup } from '@studiometa/js-toolkit'; - -class Foo extends withGroup(Base) { - static config = { - name: 'Foo', - }; -} - -class Bar extends withGroup(Base) { - static config = { - name: 'Bar', - }; - - mounted() { - console.log(this.$group); // Set [Foo, Bar] - } -} -``` - -### Parameters - -- `BaseClass` (`Base`): The class to add grouping capabilities to -- `namespace` (`string?`): An optional namespace to avoid conflicts between different group decorators, defaults to an empty string -- `options` (`WithGroupOptions?`): An optional configuration object to scope groups to a parent and/or resolve the group name dynamically, defaults to an empty object. It accepts two optional callbacks: - - `getScope` (`(instance) => object | undefined`): Resolves the scope an instance belongs to. Members are then grouped per scope identity instead of globally, so two scopes can reuse the same group name without colliding. Returning `undefined` falls back to the global (unscoped) registry. - - `getGroup` (`(instance, scope) => string`): Resolves the group name of an instance, optionally using its resolved scope. Defaults to `instance.$options.group`. - -### Return value - -- `Base`: A child class of the given class with the `group` option - -## Examples - -### Keeping `` in sync - -The group decorator can be used to keep instances of a same component in sync by dispatching updates on all instances belonging to the same group. - -In the following example, both `input[data-option-group="input"]` element seen in the `index.html` file will have their value kept in sync when it changes. The third input `input[data-option-group="other-group"]` will be left untouched. - -::: code-group - -```js {3,18-21} twoslash [Input.js] -// @twoslash-cache: {"v":1,"hash":"47e0341ce24bd5ab46b671ee78da133d5a873a39be429bb1bc8087ab6ac7816d","data":"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"} -import { Base, withGroup } from '@studiometa/js-toolkit'; - -export class SyncedInput extends withGroup(Base) { - static config = { - name: 'SyncedInput', - }; - - get value() { - return this.$el.value; - } - - set value(value) { - this.$el.value = value; - } - - onInput() { - const { value, $group } = this; - for (const instance of $group) { - if (instance === this) continue; // Skip updating itself - instance.value = value; - } - } -} -``` - -```js twoslash [app.js] -// @twoslash-cache: {"v":1,"hash":"9ba7228a83c8c8dd966914187aa6d24c186e4cb4d7a8f0719d36bcacf010b22e","data":"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"} -import { Base, createApp } from '@studiometa/js-toolkit'; -import { SyncedInput } from './SyncedInput.js'; - -class App extends Base { - static config = { - name: 'App', - components: { - SyncedInput, - }, - }; -} - -export default createApp(App); -``` - -```html [index.html] - - - - -``` - -::: - -::: tip 💡 Two-way binding with [`DataModel`](https://ui.studiometa.dev/-/components/DataModel/) - -You should use the [`DataModel` component](https://ui.studiometa.dev/-/components/DataModel/) from the [@studometa/ui package](https://ui.studiometa.dev) along its accompanying [`DataBind`](https://ui.studiometa.dev/-/components/DataBind/), [`DataComputed`](https://ui.studiometa.dev/-/components/DataComputed/) and [`DataEffect`](https://ui.studiometa.dev/-/components/DataEffect/) components if you need to add some reactivity to your existing DOM. - -::: - -### Using a namespace to avoid group collision - -When using multiple groups in the same DOM tree, it can be useful to namespace them to avoid collisions. - -In the following example, both `Tabs` and `Accordion` components use a group decorator, but they are namespaced to avoid interference if they share the same `data-option-group` attribute value. - -::: code-group - -```js {3,9,15-18} twoslash [Tabs.js] -// @twoslash-cache: {"v":1,"hash":"366be4bded3f591f0028c3db579a24bc653e5c17423c9686f1a041f7fcc52eeb","data":"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"} -import { Base, withGroup } from '@studiometa/js-toolkit'; - -export class Tabs extends withGroup(Base, 'tabs') { - static config = { - name: 'Tabs', - }; - - mounted() { - console.log('Tabs group:', this.$group); - } -} -``` - -```js {3,9,15-18} twoslash [Accordion.js] -// @twoslash-cache: {"v":1,"hash":"6cbb05e7da5333e0b9a732c45bf26bdbbfbacd91cbb0f5446ba0a976620e2c98","data":"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"} -import { Base, withGroup } from '@studiometa/js-toolkit'; - -export class Accordion extends withGroup(Base, 'accordion') { - static config = { - name: 'Accordion', - }; - - mounted() { - console.log('Accordion group:', this.$group); - } -} -``` - -```js twoslash [app.js] -// @twoslash-cache: {"v":1,"hash":"cac7484cbea186deefd4723ee6fe483ff0e6ec04a8e5e4ac083bcd94cd9f2270","data":"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"} -import { registerComponents } from '@studiometa/js-toolkit'; -import { Tabs } from './Tabs.js'; -import { Accordion } from './Accordion.js'; - -registerComponents(Tabs, Accordion); -``` - -::: - -### Scoping groups to a parent component - -By default, groups are global: every mounted instance sharing the same `data-option-group` value belongs to the same group, wherever it lives in the DOM. When you have several independent regions on a page that each reuse the same group names, use the `getScope` option to scope membership to a parent component. Two regions can then share the same group name without their members leaking into each other. - -In the following example, each `Field` is scoped to its closest `FieldSet` ancestor, so fields only sync with the other fields of the same `FieldSet`. The `FieldSet` can enumerate its own scoped groups with the `getScopedGroups` helper. - -::: code-group - -```js {3-6} twoslash [Field.js] -// @twoslash-cache: {"v":1,"hash":"ddeef07b1f931ce8074491a827a88e8bdbed2f14fa15e13f58c675540ecde7df","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLwA7kX4AOKaMpYSQAZTk9BGSgc3j0XkkXkM2mMFF4IP4Wm88khIggACN0jA9rw9HiCXtjIwvABhXxwRC8TA4CBPaEosDMGpwLC7GAAfnppVI7FGKK0aA+cH5vAA6r8ARAgQB5LDiiBgOCglFojHGbj0rwAEUJtmYuVIkll43lQIAkmB9k8eVqUZb/oCsIiTOYrDY7N85e6nC43HgAIJQKC8ELu54wU1lUjwBkQORcdisDC8XHCyOWMqscVYYYCao2MAjNAiXLzcZkQIzULhSLROJUBJJOlpTI5PIFIolcqVaq1Zj1GCNZqtWDo0im2xwFI/K3u/wJSysDpdEA9PqIACMAFYhiMxhNDg25gsPEu3QqsMthasNiAtjs9td9weTmccHhCCRyBmW4PEEYReAAMXYGBWCgJwdwYRAAHYACZj1GcYkCPahehrPBIOg2ChkfJBUJfbZZ3fA49wAZm/ahzj/K5AOoYCQBYDguD4G9rWBOEEU0JEUT4gwBJMClqVpelGRgZlWV4dlOW5fg+QFNAhRFXgxQlKVXR45VVXVeEJCM1RPWRaETPUUTjF1fUJCNGc53NXT3TtB0nQs/ijHMly7zM71rFsexuMDKhg3cEBw0jaM71jeNEyrFM4zgdNM2zRReDzAt2CLbx0UC8t7USmt8DrIJGyQCIomFVsCESZIu2yXJ8kKYpSgqKoajqBomhaFJpxNM0FxCu9VzQddN26WYEIADgANjQ08BgvXDrwDO8H3LEjNnI3Z9hIxC6OkxiAJueg7g4x5QL8CzZCxRRlBEoxiWhfyLECv0ljC1wIq8HxhHrbCwkq5savierOwyJre1agcOuHbrx161pJu3aaBgWqITwwxBpmwy8EM8CRNtWUjXwo/bEGow7Tno38PH/a4gPOjxGCwASyEwPhfKVFUJUsyyzKE4yvKRYx/BrbUcClRhGGFHo3hgOzVEF6y+B0YxPKepFeAAH14V5YCeR8oD4fXDZgY3y0I5wfrwAAleB8hIBlSt4OB0RwXhmE+eXgkVrNoLVMJk38XhHfKUhPgAAwtq2YCgaPk2eNhWCzXYYnMXJXe8EJWDxNheEYV4PYxU3eETEJ2EFDBAfgpA90QvHhnQs8ZpWq8QElz3cCIrbcZ2t9KeQo6GIZpizsJtmdi6sg+D9n3lOVqRRZMOD0f3GasJbpbEHb/HVpABfFZJqZB4pj8aNH+nLlO5mp+5WdZ9Ief1X9petdM6z196BC936feO8cb71mIfY+ylT4DzIkPD8yE5rXwuIzZiNAWZsS6oQcuwkv7eX8AAEkEBAVQpQBarxsowAAjmUMgGBVLqRCHqT+VlvJ6wNooS2Jsgx2w8H8WoOcfCEPgPYRegjbAlgKhWXg4DvCWFNFsYUIQ+FVxIJ8Sh1D/DmBBGUEIvRniiOjgQohaAqSljVBWChVDSAYBRMAZ4mhLBSXwNXPB0FeBHG4NHQGwRgYoFBrEcGHZUhQx7C1fs7UhxdVHD1ScKQpFZHQdAAIa5WAAGIDGCKyKoyxqN66IGQmsRCi1gEd0Jvg/OhjIF43JntD81Evy02OuPO+LFUFsw5nYDAfB8IwX8OiMAxsQj0mAOYXgIz5IciVu7NS8iADc5gjg/13MhSY1FClnkxqAzuvT+mQMxlUyiAwEEnSZs0h+bSuZjJqLQ+RCyELIQPIA7GZ48YbMJgpXu1V+4FOgRfA4kxDmNOOSgqe8Ty5dKgP4SwCp7QJ0YAwogEB2A23CngAAslCmgkZCAQBiJ4iqPiPm1XbA1IJzU+xtUHJ1EcY4Jx9RBdkLFMRsgcCeISDAggYBjXXMkyFrwMXZI3shGae5VlIC+S8vAPLoU2xWA3Z8ezh7/NvoC1ibyuQ8hLOqfIMBzBEB0b0uAWr6TGM1cMThIYPDSDdvotUBrhhJ0hVAfM3h2bEERUmZg7sfTFlgLiLRVdRgattd4cYppJEiBSpYdMOjs61nMAAKWYLqtEQoVSBq1ZlQk2wLBwEsLwF1RA3WRlxJmL4MBcRZk0F8VQpAAjmHMJa6R0AnXgl9JWBkXwUxckJOwY2/AxFlgrHSOtYAABUvBQy8GjsaoNSdroiBvBm8YCT3ZlC2N7EQ1qTUcvziEWF0cUSbqDf4MgmhSB7u9hlQ9Wr/BfF6GAc9Ib7D8B9oHA2qhIzZy+EKGgycfaZgAHLQA5ZkSZiYOTqNHeOqM+dcSFyvXayRb9hEav6QmBOycv1FGDSmZA0cXXKT8AOFwZQ0DR3aIwIlkNICwEyP4WwIR+o/RSEIGgpQshEGQshfwtBkYpHw/ARJ40Un8b8KUYjaA+A+ygOYXDImAhiZPWRijENAnUZgLR+jjG3DMdNOkjjXGePRLk5y4TmgCN+DQLAUgL8w4NugwXNO8GYCzpfbibwZR33+iXSRyRH1xQBtrJOtTiB9VavtU24YEHzAAH0R0julHe+RcXov0js3nBzabiykkJGgAA5CIOl3tEzyRgL8Mggbq4KDQBmcwcAMBvHwJoSAHneAcBiMGt2uJK3VvHWoG0VZSqZgSjASwuJhhslEb0DrMBMz6sqxWGr7I6sNaawqEQbXvCp00rWUgvBAOwH8CBwUcZLABFRDAabvBcOQB/WqPNZmBO8BtCkRUSnKOqaAxpuYWmFwsb05x7jvHjNJOScwLIN2YBZDVFkOTWQqh8CeLYcwkLivCkR6QGRBkotgAAKK0A5LlN98jFEwbg6Fu1iBh3R2p5kcw5Pt0QF3bl0qrB87fFsDBXL3BZlgDSLwDQwpKz0hZ2zjtpAYIomzmJhUaA6c2uvTuxgzPoJs4AKRwFyyiXLYvOfc/MHzgXRVhcq5TDrqAkvO2WZl3Lrdx7rO2EYOWL4vAcf27Pbl6UWLtAogNeg4nsHMXNBwNbLnevecpH5+pNtJ7RGcjgKETbGUej8BiAyCi2HJlWdIJT8PozXenvpJ7vI3v3YI0cQGgPvBthYGDwnfXEfRne3sMgccbB2iIAPJ+evjem+on4Cm4opBXh2ktdXY1QKi7BaIPYmiyFN7cG7430Nip8Q5f8EPsAI/HFwHH/ISfQHEDT6pmsfoVMZoL9z0v+wwXBdkHZKwPjD2/ApDoISEjHwkKIX3P0RfozQ0t91VYHaCyC/SDzIEQDmlyWQl/xGVDVb1YGTRynsEdwP1vyjjYEf1cAExf1oDfwMiQkgLmjWAvz5yv3klQOhXQIfxkWFBf0AOi0FHkVyWoipmHX1Wv3GReg93TDTntjxHljVFyx53pxvTvUYGjgNB9nmF21wWADeSOAAEJeBJDRgyAFDo4w8Dco86RlCpDytZRWdw5+DNUwAlCVDpCFCLdM8T1zBqdo5h08cCdiwPNidAsp15cEM50c9bCac4AbdShNIfM9BJY1ITsQRhxCAvhYVhCbV7AT0XoQiwNLBwiahIjoj/D7BLAMBp1009AndMsOUcjhhGAZcUQT0w9kdsiPCGcmcRdTcOcoAucectDBcdC6j2dxdzdk5rcwAsiiiaild2j1dNdeBtcGimju9Dchcq8TcOiJduiSNKj+i7dT1HcYBnd88HcPcvc4Afcy9/dmBA8a8RgE5Q9miI8pidDkBNjs8ZQdi9i/cK9Diq8wDrYuhk4bCwAMiLkYRRiDDeDjCDUwAhCljqjRCo5xDzDytZD5CzC9DSB1DNCLjtD6QoTdt/ijD0ogS4TVCESrDPi7DypvEqpVB3lkADUExlJyN3s0gq5xgyhcQelqgUg1NMgWSgMUgxs8QUh9NAcOBcQUgRDMhuB+Vf4phkIvkgEzwxUcJNlqjIEaJz5qlflFUkFJ4mAQU+BljFc48E8pQ/0UR/AjStI1Q2A1AZ4dC/1kB2g4UEVIxGAABqPcTSACfOQ4kU76c1EAS45OaOaXEjJOBdJ3FYMOFFfMQsYsHCMoGoIqAQVzZ1YQBOFEBdWNPpdgGtewDzdDLgPhdmKwXoTMXU+YC9SMLbQ4yoAyQuLM0s8NBk0oIod/NUHVNgKhcNKwKNXbbOWTKPJ4Rgaidxak+qQJGRMARCOjb7aIMoHjEcmHBPBcEc6iR/QXJ4fwaiEzC/RgQLKMmMttKbb2Qw7kPwdDLs2OcUVgfwdHTHPdQcgJNIVkgITTcKHTVjNAdjAHQzPqd/c8kHL8y800P818nCHgbgbHOw2nN4WIksXlF6A8GI23RXXLdEXlekVXRolEJC+0JEyPVo+kDCtAekI8ZOf02XCC+CxnJXPCxAEYvCrCy43C9FAiqw4inw+wr4sAEEC7K7U89MC82wK8gc5TW89kmjB877J8v7NjXkj81oL8kzZJX8vi/8xSwCuYR4dHTKWwbwNHZSj4XFYkyIFKE+KgIgNYfwPcMytYNYUU3cZZbeR5JAFZA+TuHdBUxy+VS+EeepMeJVZBViVpDEdpbmdaW0Sgx0ZSPBGKIEekDitAEhbWMSG5KYSYZueyiA4pPAXBSK+8PuVYRU75ZUkiPcI4LcdEWAPAH0IKXgGxLwZM4KrAVxWxaoUYgAATCUpWCBJRhiKBBLYroFbX+hujBXBAUChBGiBEpAkC12NgIiousWGV4D5ylkxF2HwGeCghgmTiKBEDSQCOjjBRiqTmEVKFsAgxGW7gxHpDliQ0VnVk1ikTwR2rQCV32tqC5woDmT4CGU+EmVNHYD7S2XYAUT0C+sbzeXpFyzBU13mqOB53mslQxVhSqvmpGT50VDAAzDWoInnV+GFD4XjxqEnRetIyK1zndGPMZ1qFKlIDKOUUkSeGRoWoj1rEzDgHIku3xu8GjigFNDBxNLACyCyqTkAKoVOtGREMV3GCcUyvdDDxGSODmScAiSQFAHuhSjVDwEyBACOCOCAA"} -import { Base, withGroup } from '@studiometa/js-toolkit'; - -export class Field extends withGroup(Base, 'field:', { - // Scope each field to its closest `FieldSet` ancestor. - getScope: (instance) => instance.$closest('FieldSet'), -}) { - static config = { - name: 'Field', - }; - - mounted() { - // Only fields within the same `FieldSet` are grouped together, even if - // they share the same `data-option-group` value. - console.log(this.$group); - } -} -``` - -```js {8-11} twoslash [FieldSet.js] -// @twoslash-cache: {"v":1,"hash":"f3d26f5410a3ac5e75e6e1f1388dfa85bd57ea03c56af7185da99bb600b52002","data":"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"} -import { Base, getScopedGroups } from '@studiometa/js-toolkit'; -import { Field } from './Field.js'; - -export class FieldSet extends Base { - static config = { - name: 'FieldSet', - components: { - Field, - }, - }; - - mounted() { - // Enumerate every group scoped to this `FieldSet`, keyed by - // `${namespace}${group}`. - for (const [key, members] of getScopedGroups(this)) { - console.log(key, members); - } - } -} -``` - -```js twoslash [app.js] -// @twoslash-cache: {"v":1,"hash":"fc2cad85992b0b8cbb0e1d3449dfa64726b0f0193e9ae6546c5fed9148e96b26","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvUjADm7ODVIBhCAFsskmGDQAeACq86NMFDi8AQlxiqwi0oLERSvALyXrt+47TOAfIxOpIi8hgA+vAAKpOoKMAZ+FLxgzGowAPKkAMowrDBBAPwh9uxgstwh0bFw8QCCAO7M7DRQugCSdmjMojD62PH6fn7IALp+ADpg7BrOaNJyCkqqM2DaDFRQECIIiCAASguKZLyyrBAARmysGLzdULxqEMJzzCfsJFIi6pqrOknOt14WBiaji8zgEFYRFKsl4vkBXxWawAdJRqMxZDtkMgQBwwABrNH4NBoLBwRAAegpACs4ABaXyQ/HNZGKQRQCRpLrI2BECnMLDsCn4XI4UhwCkyeRHFTfLQ6ZHEtSsEAjCg4rDMUipNFBUIi3iIn5rQ2Sbx6gGvYHVGDgyHQspwiC8Fmq9UgTXatRolJpTI5PJ6/QG322gE1QO+FzwwQ1e78AFofAKU1IhVunEyNCCUhgNG1IEgsEyCFQmFO25SLXam4QfgPJ46GD3I3yualRTdETwVEjNUgTukBiIACcVDyZSTSAAjAB2KhdUiyGDDkBSxZkZbGnRovG4RAABioInwWuYYjISBHAF8KOh+nhCCRyAvjHhppoh7wAGLsXJQHJ1gHRdhwANjHXFtFkKdEAADgXLVl1XX9/0A3dSn3adj1PbUL3IUdb3vHBH2IS9X3oJg2E4Hh5mlJY5V+PRugwAIghCZiklDf1cnyKMil4EoygqKIixqXRmNGCYphmL91xlLc2zRTZtjwA46OOU4LiuG47gbZ5AXkD5U23NB/hcK1RNtEt7XLeFXlbRjUQQzEkGxXFSkJKhiVJckqVpBkICZFk2Q5dQV2YHkYD5AUhRFVgxQlOT6LTNBFTQZUMw9M9vWPKN9VtByTS+ToHAtczCxtO0y0deFXTVDVsp9VIMmyHigxDZreHDNq8pjOMBETZNzEK9N6rXFcczzKgC2tUEaiqh1YTsqtSBrLr60eZ5m2MtsXU6Lse1VftB2HacDwAZnHKCYLnBClxXPAks3Bi1nQ1YkEukATzPPCkAPQjqAfXYnzI6g312D9Zh/P9WAAh6qBOmcACYsMgyd8CQeD0Xu5CYbhoC9w+7CfqUGdYOvfsvlgd8ZLmYBaI3WUUt4a8BBBXgAHIAAEQs5cKaXpRlWGZNAOYAbkmSGv3plDYcAlm2fUTnkQpWX8eRWlxcmSYnqZkzGDVwDuDFtEuWYJBQGMbQ4AkPNdlpEBr2vIA"} -import { registerComponent } from '@studiometa/js-toolkit'; -import { FieldSet } from './FieldSet.js'; - -registerComponent(FieldSet); -``` - -::: - -::: tip -When `getScope` returns `undefined` — for example when a `Field` is mounted outside of any `FieldSet` — the instance falls back to the global (unscoped) registry, using the same `${namespace}${group}` key. -::: - -::: warning Membership is resolved once, at mount time -Group membership is resolved a single time when the component is mounted. Changing the `group` option — or the scope returned by `getScope` — while the instance is mounted does **not** move it to another group: `$group` keeps returning the set it joined at mount. The new group is only taken into account after the instance is destroyed and mounted again. -::: diff --git a/packages/docs/api/decorators/withIntersectionObserver.md b/packages/docs/api/decorators/withIntersectionObserver.md deleted file mode 100644 index ef51aca50..000000000 --- a/packages/docs/api/decorators/withIntersectionObserver.md +++ /dev/null @@ -1,133 +0,0 @@ ---- -outline: deep ---- - -# withIntersectionObserver - -Creates a component that runs an `intersected` hook when its root element enters the viewport. - -## Usage - -```js {1,3,11-13} twoslash -// @twoslash-cache: {"v":1,"hash":"106c1ae3d00ae4decf886eff0fa18e3459c11b3a2af04de175add89a8f2a9f47","data":"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"} -import { Base, withIntersectionObserver } from '@studiometa/js-toolkit'; - -class Component extends withIntersectionObserver(Base, { - rootMargin: '100%', -}) { - static config = { - name: 'Component', - }; - - /** - * @param {IntersectionObserverEntry[]} entries - */ - intersected(entries) { - console.log(entries); - } -} -``` - -### Parameters - -- `Base` (`BaseConstructor`): The `Base` class or a class extending it. -- `options` (`IntersectionObserverInit`): Options for the `IntersectionObserver` instance. - -### Return value - -- `BaseConstructor`: A child class of the given class which will trigger an `intersected` hook when visible. - -## API - -### Hooks - -#### `intersected` - -The `intersected` hook runs as the callback for the `IntersectionObserver` instance. - -**Arguments** - -- `entries` (`Array`): an array of `IntersectionObserverEntry` objects. - -:::tip -Read the [`IntersectionObserver` documentation](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver) for more informations on how to use its API. -::: - -### Instance properties - -#### `$observer` - -The `$observer` instance property holds the instance of `IntersectionObserver`. - -### Events - -#### `intersected` - -Emitted when the [`intersected`](#intersected) hook runs. - -**Parameters** - -- `entries` (`Array`): an array of `IntersectionObserverEntry` objects. - -## Examples - -### Simple usage - -```js {1,3,8-16} twoslash -// @twoslash-cache: {"v":1,"hash":"1675a955df37e03473bb65523bd5cfd7d43eb692a3d11ee72f557b79853d0407","data":"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"} -import { Base, withIntersectionObserver } from '@studiometa/js-toolkit'; - -export default class Component extends withIntersectionObserver(Base) { - static config = { - name: 'Component', - }; - - /** - * Triggered when the root element of the component is intersecting. - * @param {IntersectionObserverEntry[]} entries - */ - intersected(entries) { - if (entries[0].isIntersecting) { - this.isVisible = true; - } - } -} -``` - -### With custom options - -You can pass custom options for the `IntersectionObserver` instance by passing a second parameter to the `withIntersectionObserver` function: - -```js {3-5} twoslash -// @twoslash-cache: {"v":1,"hash":"26d74d1244e14dd649e846924d2a9df6262495b77d7fdcf5d9e590011899b0e5","data":"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"} -import { Base, withIntersectionObserver } from '@studiometa/js-toolkit'; - -export default class Component extends withIntersectionObserver(Base, { - threshold: 0.5, -}) { - static config = { - name: 'Component', - }; - - /** - * @param {IntersectionObserverEntry[]} entries - */ - intersected(entries) { - if (entries[0].isIntersecting) { - this.isVisible = true; - } - } -} -``` - -Or at the instance level in the `data-option-intersection-observer` attribute of the root element: - -```html {3-5} -
    - ... -
    -``` diff --git a/packages/docs/api/decorators/withMountOnMediaQuery.md b/packages/docs/api/decorators/withMountOnMediaQuery.md deleted file mode 100644 index 86539ce4e..000000000 --- a/packages/docs/api/decorators/withMountOnMediaQuery.md +++ /dev/null @@ -1,66 +0,0 @@ -# withMountOnMediaQuery - -Mounts and destroys a component based on a media query. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"192d1f062b9f4213150f7bcc2e527a7d3757dfa08a015c9511667a7e5726ab5b","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLwA7kX4ALIQV5oADyYD+MEqzAAimUyBhJABlOT0EZKBzePReSReQzaYzGRheADCvjgiF4mBwECe6IovBqkPJzDAGG45K8ABEYPxbMxcqRJD9xgCgaDwZCYXCAJJgfZPXYwOkIulC/6A2ViiGcSWkDC4kzmKw2OzfX4ijVgrXQ2G6pwuNx4GX7VTvCBgYEAI1UpBIpF4sB5pD5H0CM1C4Ui0TiVASSTJaUyOTyBSKJXKlWqtWY9RgjWarQDvP5cBSqvNIMtEptGH8CUsrA6XRAPT6iAAjABWIYjMYTRAAJjbYbmCw8ZfVFfF2ury3YYFWGxAWx2e2u7Y7JzOODwhF9N3oeCNtnsROqNnnsqcLYYiAA7Lfu6NxgNh/MbyBT9Y3SMGEM56shyXbYg1XA5b03ahzh3K5yBmW4PBYDguD4cdRUrac4WxCQsNUfV8UJCQSWEclKRgalaXpK0mRZNl0S5QM+VsQUzQnTUq2lWUyHlfhFXRHD1E0PEVRYtCp2tOE8MNL8TVQi0xJ1DA7VcdwQCdMgXTQD5PW9X1/W5IsQyCcMkAiKI52jAhEmSBNslyfJCmKUoKiqGo6gaJoWhSQsg2LUsRLkq0FNrNB60bbpZhvNt+wANkfXskEHV9RxAWTJ0Cmc/3nJAAGZNmA3Z9iQTsINI6C9zgg8PCPE1P3PH8rwioqO0A4Ynz7QZqF6N88Fq79L0y1ZpiAldCoHI4mx5WBD2k+xgAo1K2Iw3VeCOZ5NEsXgAHIAAEnIzVzmAyWzkwczaAG4pONE8zz6+wnnWrb/BSXqL2KTJzvMcw6CuvT5TKVh7AW9DxN1RhzF4XgXp/Chwa2yB7EYLBSBgJ51KyZGoDKHioCySwIE0t1uE2mGwG4M6nAOpBQHkEY4A+PBMhAI4jiAA"} -import { Base, withMountOnMediaQuery } from '@studiometa/js-toolkit'; -import Component from './Component.js'; - -export default withMountOnMediaQuery( - Component, - 'not (prefers-reduced-motion)', -); -``` - -### Parameters - -- `Base` (`BaseConstructor`): The `Base` class or a class extending it. -- `media` (`string`): a [media query](https://developer.mozilla.org/en-US/docs/Web/CSS/@media#media_features) - -### Return value - -- `BaseConstructor`: A child class of the given class which will be mounted when the media query matches. - -## API - -This decorator does not expose a specific API. - -## Examples - -### Simple usage - -```js {1,3-6,13,17} twoslash -// @twoslash-cache: {"v":1,"hash":"acbd1404ac3ffba6e354e71aee4bc60180d0df840af387d01f78df0e25adf04e","data":"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="} -import { Base, withMountOnMediaQuery } from '@studiometa/js-toolkit'; - -export default class Component extends withMountOnMediaQuery( - Base, - 'not (prefers-reduced-motion)', -) { - static config = { - name: 'Component', - log: true, - }; - - mounted() { - this.$log('Accepts motion!'); - } - - destroyed() { - this.$log('User enabled reduced motion after mount.'); - } -} -``` - -### With data option - -```html {3} -
    - ... -
    -``` diff --git a/packages/docs/api/decorators/withMountWhenInView.md b/packages/docs/api/decorators/withMountWhenInView.md deleted file mode 100644 index a114227f7..000000000 --- a/packages/docs/api/decorators/withMountWhenInView.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -outline: deep ---- - -# withMountWhenInView - -Mounts and destroys a component based on its visibility in the viewport. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"fd95cccbe71b0e19e802a193c915e2de76c2b4a2dafe305629c3965c1924fc96","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLwA7kX4ALIQV5oADq+BGAEkwAA1dgwL6SADKcnoIyUDm8ei8ki8hm0xmMjC8AGFfHBELxMDgIE90RReLAnswyqw0AB5LBoD5wAD85Mh+1U7wgYFZACNVKQSKRIUVuOSvAARGD8WzMXKkSTA34AoGgiHQ2FfflkRn8GB0hF0rXjHVgEFgsCQmFw3EmcxWGx2b7awF2vWOg1wpwuNx4Y2kQWc4ViiVS+nK1VRsCBGahcKRaJxKgJJJktKZHJ5ApFErlSrVWrMeowRrNVqwFWkNW2OApH42332/XOr7+BKWVgdLogHp9RAARgArEMRmMJhPBtRevMGB52/9O/6nYbluwwKsNiAtjs9tcJ5OTmccHhCFKbvQ8B7bPYidUbPu7U5R6uAOzTqKzuMAypnMCweK+1jCiMDBDHuqzjps2xNqeBw/pe1DnDeVzkDMtweCwHBcHw662l2AY9tiEiUaorr4oSEgksI5KUjA1K0vGjLMmyHJcryvDhpGHwxmQUoymgcrokqjbNhq1obrqDrbnC4amua6LUeomh4laPoKd2hq0e6kFeiRm6KYGXzBq47ggAJypJsJkpkPG0lJimS5hEgERRHuWYEIkyT5tkuT5IUxSlBUVQ1HUDRNC0KQNomLZtrpfrmT2fZoAOQ7dLMq7jgATNMAGjEBC4gSueCmXp5E7rB+5IAAzIhJ77EgU7oSxWF3rhD4eE+XoQe+0Ffnl7WTMVwylfOi6zJV4FvlBn71aszVHkhuxtYgjUXqcGHXh4t7XL1q4gIwWBaWQmB8HZQoiuKIlkGJ/jjKQ8CEKwUB8WAZSWKKzkAD68D9f1kMg7S8EDrwMnBUCjb0+WTj+M7TcBS6gadr3vfkcMrU1LXIVtkwABxHMOKqwI+xn2MA7HVWl+lwrwRzPJoli8AA5AAAhF5bRcwGTBUWYUcwA3EZnovotH72E8bOc/4KRDUtxSZGL5jmHQkscUyLLeh2NVKV8jDKzLdK01jcAfVA5LIBsvDjhDRzcKLTj80goDyCMcAfHgmQgEcRxAA==="} -import { Base, withMountWhenInView } from '@studiometa/js-toolkit'; -import Component from './Component.js'; - -export default withMountWhenInView(Component, { threshold: [0, 1] }); -``` - -### Parameters - -- `Base` (`BaseConstructor`): The `Base` class or a class extending it. -- `options` (`IntersectionObserverInit`): Options for the `IntersectionObserver` instance. - -### Return value - -- `BaseConstructor`: A child class of the given class which will be mounted when visible and destroyed when invisible. - -## API - -This decorator does not expose a specific API. - -## Examples - -### Simple usage - -```js {1,3,10,14} twoslash -// @twoslash-cache: {"v":1,"hash":"aa2a3918495f58186271a078c09b6e498aaab22ceb1f07b8a227d31683a7a6c7","data":"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"} -import { Base, withMountWhenInView } from '@studiometa/js-toolkit'; - -export default class Component extends withMountWhenInView(Base) { - static config = { - name: 'Component', - log: true, - }; - - mounted() { - this.$log('I am visible!'); - } - - destroyed() { - this.$log('I am no longer visible.'); - } -} -``` - -### With custom options - -You can pass custom options for the `IntersectionObserver` instance by passing a second parameter to the `withMountWhenInView` function: - -```js {1,3-5} twoslash -// @twoslash-cache: {"v":1,"hash":"f80c9503790496bfd1d06f3bb2c028acffe6e11143d49afcc2effdd05c94aa52","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLwA7kX4ALIQV5oADq+BGAEkwAA1dgwL6SADKcnoIyUDm8ei8ki8hm0xmMjC8AGFfHBELxMDgIE90RReLAnswyqw0AB5LBoD5wAD85Mh+1U7wgYFZACNVKQSKRIUVuOSvAARGD8WzMXKkSTA34AoGgiHQ2FfflkRn8GB0hF0rXjHVgEFgsCQmFw3EmcxWGx2b7awF2vWOg1wpwuNx4Y2kQWc4ViiVS+nK1VRsCBGahcKRaJxKgJJJktKZHJ5ApFErlSrVWrMeowRrNVqwFWkNW2OApH42332/XOr7+BKWVgdLogHp9RAARgArEMRmMJhPBtRevMGB52/9O/6nYbluwwKsNiAtjs9tcJ5OTmccHhCFKbvQ8IJhLwidUbPu7U5R6v+ofhqNxgGVM5gWDxX2sYURgYIY91WAAmTZtibU8Djg8dL2oc4byucgZluDwWA4Lg+HXW0uwDHtsQkKjVFdfFCQkElhHJSkYGpWl40ZZk2Q5LleV4cNIw+GMyClGU0DldElUbZsNWtDddQdbc4XDU1zXRGj1E0PErR9RTu0NOj3Qgr1SM3JTAy+YNXHcEBBOVJMRMlMh4xkpMUyXMIkAiKI9yzAhEmSfNslyfJCmKUoKiqGo6gaJoWhSBtExbNs9L9Cyez7NAByHbpZlXcc1gADhnAD53HRdZhXPAzP0iidxg/ckAQo8kN2fYkAAZmOU5MOvDxb2uPCHwI+5iJ8Z8sVkeRUWUAxtN0dEjIsEz7CWKgQ1srwJr8Dzgi8lAMz8+JArzDIQqLcLSyiitYpreLWlykd8qQcc4JKqJZ0AxBpiXEDV08CRdyaxAWuPZCOsQSceqvC5Btw6h8JARgsG0shMD4eyhRFcVRLIcT/HGUh4EIVgoH4sAyksUUXIAH14SnqbIZB2l4enXgZWCoC/F6J06j7/znIC/uqjwiZJ/Juca1ZOsQk9IbgjDWOwu9hoBlG0bsDA+HA98oP8FUwCedgQnJYBzF4S2GeYGpyVKUg9xCABucwjh53oCoANgFr75094DRaPYVjZCYHVmnVr5bPGG+rhnD73V1GtHR7Xrdt3h7cd92x3HIrZc+sqpgD0DwBt3BpaQf3I4hs9JiVrCBvjtWmBiwgoB1t9ILtfxLE7GAoEYSSiAgdgpecGy8DI/veEICAYj2tNvKO2ITtzVJzsLMKS0i8sYqrOK6xSVvoGyWeYmyDgnmVDBBBgLKBwAYl7oF+6e79msK0qhcQAB2YuAefnaV+FdDhyxrqheu/VLiq0RiNZGSccBaz4FNZECg0Q4gWrwTE80jDGH8AAElYBAU2vBGD+HIcuMkvBXgxEgF8MALM+A6GMLwYeo9rKhg8AiSwbBWAzxgKwRBFIIC8CISEDO5QnhPAXgdHymZV5BQ3qFYsEUyzRUrNWWsCU9w9DeDALIx8lD31YA/MRWRDYKAYJ0PKHtmqdXHF/b6v0qol0IcQsOr1Dzg3atHSBccYE0DgYwQxHcIIfmKLAe2EAMD90HuSNhY9Np4CVFEmJUAZ55HnkEReh1fIr2zKddeBZlFXR3uou6WjWiGNPpki+7Ar78BvsMYxD9IloE0Gkt+vM4KewcQXb+lVlwlzaR04BeTVjjnzt4lCzU/EqyGrAxOmsMYaWmiiRQc1aKYOwVs3BBCxHkjIRQuYVCaF0IYe0JhLCEkcNstw3h/DBEuVyKI4hEiyhSJkemPJ/kcyKOKZdbeajbr73uofHRwQ9EGNqG3AI/YTFmIsVBLptjQZFV+oLJx/88BuNDiA8cv1pmQ2OMOFUsA8AelsPYYAHFarpQMnCXgRxniaEsLwAA5AAATKSCpRgK0DspdmAcwdBPT2AZEyFkO0RC6y7vYGaGzvQdjqspL4DFVB0nNp8Ck+BiZwFJlAckax/DTldnwLVlseicn4AIYOJssG8AtVbMAZdyTstleE9lFALZMqFT6wBNAB7mp9ZbcY7AAi4sYOy8EvAbasPDewUUwwACE7LuBCstkccwPqRnRNicG7Vob8Dhv2cQqNMa42QFeaMFyRAE1JrvmmjNTLXZOD3kgUACq4AfDwJkEARwjhAA"} -import { Base, withMountWhenInView } from '@studiometa/js-toolkit'; - -export default class Component extends withMountWhenInView(Base, { - threshold: 0.5, -}) { - static config = { - name: 'Component', - }; - - mounted() { - this.$log('I am visible!'); - } - - destroyed() { - this.$log('I am no longer visible.'); - } -} -``` - -Or at the instance level in the `data-option-intersection-observer` attribute of the root element: - -```html {3-5} -
    - ... -
    -``` diff --git a/packages/docs/api/decorators/withMountWhenPrefersMotion.md b/packages/docs/api/decorators/withMountWhenPrefersMotion.md deleted file mode 100644 index 37eaa0bb2..000000000 --- a/packages/docs/api/decorators/withMountWhenPrefersMotion.md +++ /dev/null @@ -1,49 +0,0 @@ -# withMountWhenPrefersMotion - -Mounts and destroys a component based on the `(prefers-reduced-motion)` media query. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"03ec61b2e13211f88098ad1a27a061443fe1bb9b39377e3bc91d5b032ca53013","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLwA7kX4ALIQV5oADq+BGGhgTzIcABaA+kgAynJ6CMlA5vHovJIvIZtMZjIwvABhXxwRC8TA4CBPdHccleAAiMH4tmYuVI2IkAEkwPsnrsYBReAizBZrLZ7D9xgCgaDwaRIdDYR8gqFwpFonEqAkkmS0pkcnkCkUSuVKtVasx6jBGs1WrAWaQ2bY4Ckpf9Aby5WAIVDSDCIHCIGB/AlLKwOl0QD0+ogAIwAViGIzGE0QACYAGwzXrzBged0yr1gn0Kv0BoNgZbsMCrDYgLY7PbXeMJk5nHB4QgkcgzW4eKw2Oy8InVGy13lOGP5gAc6eTo3GAxzcwWHlH4onDCGNdWcc22ydzYOAHZ29Rzl2rr3qP2QCwOFw+IXPSCS76lYH4VicZo8QTiVJclKRgalaXpCQmUdZ0OS8Hk+QFIUfwMP8TFFQcJW+X4izfeVFX9ZVg1VMIkAiKIay1AhEmSfVslyfJCmKUoKiqGo6gaJoWhSB1WXZV0X1ld8y0/StQzQcNI26WZ8zjABmfcohTJcM2zahczXEABOLPDy0Iqsd1rJBZIPJt9iQRNzxAq8exueg8Aw4cN3HEZt2jaTzITGcF1TZc1NXfMQCc4MXOrQzEGMhtD12MzEEmdMjijFlYHs8Vh2AdEhS03DS3wisPl4I5nk0SxeAAcgAAWY802OYDI6KNRjSoAbnMBz7CCrciuqMr/BSDqXP8TJmvMcw6CHexYH5MpWElbDX29D8CK/YNGH63luCapwaqQUB5BGOAVQ8TIQCOI4gA=="} -import { Base, withMountWhenPrefersMotion } from '@studiometa/js-toolkit'; -import Component from './Component.js'; - -export default withMountWhenPrefersMotion(Component); -``` - -### Parameters - -- `Base` (`BaseConstructor`): The `Base` class or a class extending it. - -### Return value - -- `BaseConstructor`: A child class of the given class which will be mounted when the media query matches. - -## API - -This decorator does not expose a specific API. - -## Examples - -### Simple usage - -```js {1,3,10,14} twoslash -// @twoslash-cache: {"v":1,"hash":"569ecc984c9296862272806ac214e87563b7c51fcf9c49874ff0185dc11a85ad","data":"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="} -import { Base, withMountWhenPrefersMotion } from '@studiometa/js-toolkit'; - -export default class Component extends withMountWhenPrefersMotion(Base) { - static config = { - name: 'Component', - log: true, - }; - - mounted() { - this.$log('Accepts motion!'); - } - - destroyed() { - this.$log('User enabled reduced motion after mount.'); - } -} -``` diff --git a/packages/docs/api/decorators/withMutation.md b/packages/docs/api/decorators/withMutation.md deleted file mode 100644 index 866bc243c..000000000 --- a/packages/docs/api/decorators/withMutation.md +++ /dev/null @@ -1,75 +0,0 @@ -# withMutation - -Adds a `mutated(props)` hook managed by the [mutation](/api/services/useMutation.html) service. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"df67229456110ebce63a37e3713ea7002093c9484259c62322ed2bb2a125b320","data":"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"} -import { Base, withMutation } from '@studiometa/js-toolkit'; - -export default class Component extends withMutation(Base, { - target: (instance) => instance.$el, -}) { - static config = { - name: 'Component', - }; - - /** - * @param {MutationRecord[]} props - */ - mutated(props) { - for (const mutation of props.mutations) { - console.log(mutation); // MutationRecord - } - } -} -``` - -### Parameters - -- `BaseClass` (`Base`): the class to add mutation observation to -- `options?` (`{ target?: (instance:Base) => Node } & MutationObserverInit`): define which element should be observed (defaults to the component's root element) and any options for the mutation observer - -### Return value - -- `Base`: a new class extending the given class with mutation observability enabled - -## API - -### Hooks - -#### `mutated` - -The `mutated` hook runs when a DOM mutation occurs on the target. - -**Arguments** - -- `props` (`MutationServiceProps`): the [mutation service props](/api/services/useMutation.md#props) - -## Examples - -### Update a component when its children have changed - -This decorator can be used to update a component when its inner HTML has changed to rebind refs and child components. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"ddc46319b65eabf76758c9cb6744a01364a9fead3a8e6268f9622c2f1a2120e4","data":"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"} -import { Base, withMutation } from '@studiometa/js-toolkit'; - -export default class Component extends withMutation(Base, { - childList: true, - subtree: true, -}) { - static config = { - name: 'Component', - }; - - /** - * @param {MutationRecord[]} props - */ - mutated(props) { - this.$update(); - } -} -``` diff --git a/packages/docs/api/decorators/withRelativePointer.md b/packages/docs/api/decorators/withRelativePointer.md deleted file mode 100644 index 453922c93..000000000 --- a/packages/docs/api/decorators/withRelativePointer.md +++ /dev/null @@ -1,72 +0,0 @@ -# withRelativePointer - -Adds a `movedrelative(props)` hook from the [pointer](/api/services/usePointer.html) service, with props relative to the component's root element `$el`. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"e33d86f5d7db5738f57b0156d446e9cb19a8e108b53d3be99db0814c873b53e9","data":"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="} -import { Base, withRelativePointer } from '@studiometa/js-toolkit'; - -export default class RelativePointer extends withRelativePointer(Base, { - target: (instance) => instance.$el, -}) { - static config = { - name: 'RelativePointer', - refs: ['item'], - }; - - /** - * @param {import('@studiometa/js-toolkit').PointerServiceProps} props - */ - movedrelative(props) { - this.$refs.item.style.transform = `translate(${props.x}px, ${props.y}px)`; - } -} -``` - -### Parameters - -- `BaseClass` (`Base`): The class to add draggable capabilities to -- `options?` (`{ target?: (instance:Base) => HTMLElement }`): Options to choose the target element - -### Return value - -- `Base`: A child of the given class with draggable capabilities - -## API - -### Hooks - -#### `movedrelative` - -The `movedrelative` hook runs when the user moves the pointer. - -**Arguments** - -- `props` (`PointerServiceProps`): the [pointer service props](/api/services/usePointer.md#props), relative to the `target` - -## Examples - -### Move a ref element - -This decorator gives you the pointer position relative to the component's root element. The following example scales a ref based on the pointer position _inside_ the component's root element. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"5e4db010355421fe78b209ba29466d14ad006de6eb0d23b3839f470ba2763a1d","data":"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"} -import { Base, withRelativePointer } from '@studiometa/js-toolkit'; - -export default class RelativePointer extends withRelativePointer(Base) { - static config = { - name: 'RelativePointer', - refs: ['item'], - }; - - /** - * @param {import('@studiometa/js-toolkit').PointerServiceProps} props - */ - movedrelative(props) { - this.$refs.item.style.transform = `scale(${props.progress.x}, ${props.progress.y})`; - } -} -``` diff --git a/packages/docs/api/decorators/withResponsiveOptions.md b/packages/docs/api/decorators/withResponsiveOptions.md deleted file mode 100644 index 33f7233d9..000000000 --- a/packages/docs/api/decorators/withResponsiveOptions.md +++ /dev/null @@ -1,156 +0,0 @@ ---- -outline: deep ---- - -# withResponsiveOptions - -Enables responsive option definitions in your HTML. - -:::warning - -- Responsive options are readonly -- This decorator is not compatible with the [`withFreezedOptions` decorator](/api/decorators/withFreezedOptions.html) -- This decorator does not make options reactive (as in Vue.js or React), the different values are only resolved when the option is accessed -- Breakpoints' names are retrieved from the [`useResize` service](/api/services/useResize.html#breakpoint) - -::: - -## Usage - -```js {1,3,7-10} twoslash -// @twoslash-cache: {"v":1,"hash":"5aeadca9b3692bf315d20b7f9074273cbea3812b862c2e152a8e1a42a955ef63","data":"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"} -import { Base, withResponsiveOptions } from '@studiometa/js-toolkit'; - -export default class Component extends withResponsiveOptions(Base) { - static config = { - name: 'Component', - options: { - label: { - type: String, - responsive: true, - }, - }, - }; -} -``` - -```html {3-4} -
    - ... -
    -``` - -### Parameters - -- `BaseClass` (`Base`): The class to add extra configuration to. - -### Return value - -- `Base`: A child class of the given class with the merge configuration - -## API - -### Configuration - -#### `config.options..responsive` - -This decorator adds support for a new boolean `responsive` property when declaring options in a class configuration. It **must** be set to `true` to enable the responsive evaluation of the option value. - -### HTML - -This decorator adds support for one or more suffix to define breakpoints in which the option should be read from when declaring options via `data-option-` attributes. The format is: - -```html -
    ...]>
    -``` - -## Examples - -### Define option only for a given breakpoint - -Given three breakpoints `s`, `m` and `l`, the following component and its markup: - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"8bc2ba70fafe0316ce8705cfbe62de19671dca19ac832aa6077af1168736befb","data":"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"} -import { Base, withResponsiveOptions } from '@studiometa/js-toolkit'; - -export default class Component extends withResponsiveOptions(Base) { - static config = { - name: 'Component', - options: { - label: { - type: String, - responsive: true, - }, - }, - }; - - resized(props) { - console.log(props.breakpoint, this.$options.label); - } -} -``` - -```html -
    - ... -
    -``` - -Resizing the browser's window from the `l` to `m` then `s` breakpoint will log the following to the console: - -``` -'l', 'I am the default label' -'m', 'I am the default label' -'s', 'You are on a small screen' -``` - -### Define different values for different breakpoints - -With the same breakpoins and component as before, but with a different markup, we can define different values for each breakpoints: - -```html -
    - ... -
    -``` - -With these attributes, the console will log: - -``` -'l', 'You are on a large screen' -'m', 'You are on a medium screen' -'s', 'You are on a small screen' -``` - -### Define the same value for different breakpoints - -Breakpoints can be combined to use the same value multiple times: - -```html {3} -
    - ... -
    -``` - -The result in the console would be: - -``` -'l', 'You are on a large screen' -'m', 'You are on a small or medium screen' -'s', 'You are on a small or medium screen' -``` diff --git a/packages/docs/api/decorators/withScrolledInView.md b/packages/docs/api/decorators/withScrolledInView.md deleted file mode 100644 index dcbe50694..000000000 --- a/packages/docs/api/decorators/withScrolledInView.md +++ /dev/null @@ -1,173 +0,0 @@ ---- -outline: deep ---- - -# withScrolledInView - -Adds a `scrolledInView` hook that runs each frame while the component is in view, for scroll-driven animations. - -## Usage - -```js {1,3,11-13} twoslash -// @twoslash-cache: {"v":1,"hash":"65369f09048783f2db1b24fc47055b63c398c784647105a107f4280bee52e4df","data":"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"} -import { Base, withScrolledInView } from '@studiometa/js-toolkit'; - -class Component extends withScrolledInView(Base, { rootMargin: '100%' }) { - static config = { - name: 'Component', - }; - - /** - * @param {import('@studiometa/js-toolkit').ScrollInViewProps} props - */ - scrolledInView(props) { - console.log(props.progress.y); - } -} -``` - -:::tip Info -This decorator uses the [`withMountWhenInView`](./withMountWhenInView.html) decorator under the hood. -::: - -### Parameters - -- `Base` (`BaseConstructor`): The `Base` class or a class extending it. -- `options` (`IntersectionObserverInit & { useOffsetSizes?: boolean }`): - - `options[key:string]`: Options for the `IntersectionObserver` used by the `withMountWhenInView` decorator - - `options.useOffsetSizes` (`boolean`): when `true`, uses the [`getOffsetSizes(el)` function](/utils/css/getOffsetSizes.html) instead of the `el.getBoundingClientRect()` to get the element sizes - -### Return value - -- `BaseConstructor`: A child class of the given class which will be mounted when visible and destroyed when invisible and trigger a `scrolledInView` hook - -## API - -### Options - -Options available through the HTML API with `data-option-*` attributes. - -#### `dampFactor` - -- Type: `number` -- Default: `0.1` - -See the [`dampFactor`](#dampFactor-1) instance property below. - -#### `dampPrecision` - -- Type: `number` -- Default: `0.001` - -See the [`dampPrecision`](#dampPrecision-1) instance property below. - -#### `offset` - -- Type: `string` -- Default: `start end / end start` - -Defines the limits used to calculate the progress of the scroll. The value is a string composed of two parts separated by a slash (`/`). Each part defines the point on which the progress calculation should be based. - -``` - / -``` - -The default value `start end / end start` could be read as : calculate the progress of the target from when the **start** of the target crosses the **end** of the viewport to when the **end** of the target crosses the **start** of the viewport. - -Each point accepts the following values: - -- A **number** between `0` and `1` -- A **named string**, either `start`, `end` or `center` which will be mapped to values between `0` and `1` -- A **string** representing a CSS value with one of the following unit: `%`, `px`, `vw`, `vh`, `vmin`, `vmax` - - - -### Instance properties - -#### `dampFactor` - -- Type `number` -- Default `0.1` - -The factor used by the [`damp` function](/utils/math/damp.md) for the `dampedProgress` values. It can be configured by defining a `dampFactor` property in the class using this decorator: - -```js {8} twoslash -// @twoslash-cache: {"v":1,"hash":"5444eca893699ff6493eeaa052ad320e39fce3776aebcb4c2aaef1887b98be3f","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLwA7kX4AMr8TSsYZQACSYAAauwYF9JH85PQRkoHN49F5JF5DNpjMZGF4AMK+OCIXiYHAQJ4oii8LRoD5wAD8JIA6r8AUCQeCoTCAPJYOkQMA8EleAAiMH4tmYuVIklZ43Z+U5kOhX3B+yeuxg1L+1Pl/0BSpgYJVMKxJnMVhsdm+bMNwONXNVThcbjwAEEoFBeHB7SDeOxPkRVQJmswAEbsDh0+CkiC8ZgCao2MAjYpBULhSLROJUBJJYlpTI5PIFIolcqVaq1Zj1GCNZqtWCS0jS2xwFI/BV+x2mr7+BKWVgdLogHp9RAARgArEMRmMJlOABwzXrzBgeLsGjm97lfZaB1YbEBbHZ7a5T6cnM44PCEEjkGa3DyCYS8fHJwVppzjjcAdmmKJ53GAZVzmBYPA/awvzABghkPJAACZNm2VtzwOAA2a9qHOO8rkfahnxAFgOC4Pgt0VB0TT3DEJFo1RzRxPEJEJYQSTJGAKSpGl+XpJleH1SjlT3PkBSFbgRQkcUWzbWVBJ7ajVXVMhNX4bUUXo9RNGxPU7R3RSzW0i0LGgm0KIUp0YRdVx3BAT1vV9fSAyDEN+DDSNo2hERcgTJNoNTWDAlXMIkAiKJA1zAhEmSItslyfJCmKUoKiqGo6gaJoWhSZspRlDtzP0yz+0HYdOm6WYN36ZCgNGEDlzA9c8AKo0DP3eDUyQlCz32JDJmwji8IfG56DuUjHlfPwNNkeQkWUAwjN4NF5qMMwTOtewlioV1bK8HxhCC6hM1C7MIviaLCwyOLS0SisUurdL60y1oR3K3oN0nD651qxdANmRqPE28KOsQarTzQnrEEmABmfrcI8e9rifEaPEYLBtLITA+CglM038SUwCedgQhJYBzF4cneDAZgahJUpSEDEIAG5zCOH8KqQSdEJXGqFyQDCGogk9BUJkID2BqGuvBi9jlOHDb3h/Dho3Yi0a0DGMD4KmaZ9NB6dGNm3o56Gvt5yGBeVrXcHa1ZALB3YIb62WBoVoakeV1H0bsDX30/ALiigamsAAMXt2wSTAMpLHDRGx3Zqc/2PYZvo548/sFgPrBDvZbDF1Y/0l+2L0Qo5R0lWA8CtWx7GAbjmqooreCOZ5NEsXgAHIAAFkqrNLmEuksEqKNvmbAcwJpEbGYPsGbFBEOvhNVZjVD4UnPh16V2H4JMCaJxbeFXinKepmASTbye/bbigycbkfr4z4PQ9IPe1n8ScR9Zqhe6QUAZ7gD48EyCAI4RwgA=="} -import { Base, withScrolledInView } from '@studiometa/js-toolkit'; - -class Component extends withScrolledInView(Base) { - static config = { - name: 'Component', - }; - - dampFactor = 0.1; -} -``` - -#### `dampPrecision` - -- Type `number` -- Default `0.001` - -The precision used by the [`damp` function](/utils/math/damp.md) for the `dampedProgress` values. - -```js {8} twoslash -// @twoslash-cache: {"v":1,"hash":"bd248c2469bedc3a99cade415a6b818b6b17dccbcf148f5cfd8993d9e2261eb9","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLwA7kX4AMr8TSsYZQACSYAAauwYF9JH85PQRkoHN49F5JF5DNpjMZGF4AMK+OCIXiYHAQJ4oii8LRoD5wAD8JIA6r8AUCQeCoTCAPJYOkQMA8EleAAiMH4tmYuVIklZ43Z+U5kOhX3B+yeuxg1L+1Pl/0BSpgYJVMKxJnMVhsdm+bMNwONXNVThcbjwAEEoFBeHB7SDeOxPkRVQJmswAEbsDh0+CkiC8ZgCao2MAjYpBULhSLROJUBJJYlpTI5PIFIolcqVaq1Zj1GCNZqtWCS0jS2xwFI/BV+x2mr7+BKWVgdLogHp9RAARgArEMRmMJlOABwzXrzBgeLsGjm97lfZaB1YbEBbHZ7a5T6cnM44PCEEjkGa3DyCYS8fHJwVppzjjcAdmmKJ53GAZVzmBYPA/awvzABghkPJAACZNm2VtzwOAA2a9qHOO8rkfahnxAFgOC4Pgt0VB0TT3DEJFo1RzRxPEJEJYQSTJGAKSpGl+XpJleH1SjlT3PkBSFbgRQkcUWzbWVBJ7ajVXVMhNX4bUUXo9RNGxPU7R3RSzW0i0LGgm0KIUp0YRdVx3BAT1vV9fSAyDEN+DDSNo2hERcgTJNoNTWDAlXMIkAiKJA1zAhEmSItslyfJCmKUoKiqGo6gaJoWhSZspRlDtzP0yz+0HYdOm6WYN36ZCgNGEDlzA9c8AKo0DP3eDUyQlCz32JDJmwji8IfG56DuUjHlfPwNNkeQkWUAwjN4NF5qMMwTOtewlioV1bK8HxhCC6hM1C7MIviaLCwyOLS0SisUurdL60y1oR3K3oN0nD651qxdANmRqPE28KOsQarTzQnrEEmABmfrcI8e9rifEaPEYLBtLITA+CglM038SUwCedgQhJYBzF4cneDAZgahJUpSEDEIAG5zCOH8KqQSdEJXGqFyQDCGogk9BUJkID2BqGuvBi9jlOHDb3h/Dho3Yi0a0DGMD4KmaZ9NB6dGNm3o56Gvt5yGBeVrXcHa1ZALB3YIb62WBoVoakeV1H0bsDX30/ALiigamsA0CV2DgD4STAMpLHDRGx3Zqc/2PYZvo5iXDvA5WA+sYP+FDj4xdWP9Jfti9EKOUdJVgPArVsexgG45qqKK3gjmeTRLF4AByAABZKqzS5hLpLBKik75mwHMCaRGxmD7BmxQREb4TVWY1Q+FJz4deldh+CTAmicW3gN4pynqZgElO5nv3O4oMmW/Hu+s6D0gQ7DwVD7Wfw1jWSdx9ZqgB5IFAPPN+YA8CZBAEcI4QA="} -import { Base, withScrolledInView } from '@studiometa/js-toolkit'; - -class Component extends withScrolledInView(Base) { - static config = { - name: 'Component', - }; - - dampPrecision = 0.001; -} -``` - -### Hooks - -#### `scrolledInView` - -The `scrolledInView` hook runs on each frame while the component is in the viewport. - -**Arguments** - -- `props` (`{ start: Point, end: Point, current: Point, progress: Point }`): Values corresponding to the progress of the component's root element in the viewport. - - `props.start` (`{ x: number, y: number }`): The scroll position were the element starts to be visible. - - `props.end` (`{ x: number, y: number }`): The scroll position were the element is not visible anymore. - - `props.current` (`{ x: number, y: number }`): The current scroll position, clamped in the `props.start` and `props.end` range. - - `props.dampedCurrent` (`{ x: number, y: number }`): The current values smoothed with the [`damp` function](/utils/math/damp.md) - - `props.progress` (`{ x: number, y: number }`): The progress of the element between `props.start` and `props.end` mapped to a `0–1` range. - - `props.dampedProgress` (`{ x: number, y: number }`): The progress values smoothed with the [`damp` function](/utils/math/damp.md). - -## Examples - -### Implement parallax - -```js {16-19} twoslash -// @twoslash-cache: {"v":1,"hash":"550db0f3fc4f3e9fa80973a64c621231eeabe7b192af7820d4c3a1e0e202095e","data":"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"} -import { Base, withScrolledInView } from '@studiometa/js-toolkit'; -import { map, transform } from '@studiometa/js-toolkit/utils'; - -export default class Parallax extends withScrolledInView(Base) { - static config = { - name: 'Component', - options: { - speed: Number, - }, - refs: ['target'], - }; - - /** - * @param {import('@studiometa/js-toolkit').ScrollInViewProps} props - */ - scrolledInView({ progress }) { - const y = map(progress.y, 0, 1, -100, 100) * this.$options.speed; - transform(this.$refs.target, { y }); - } -} -``` - -:::tip Info -Apply transformations to refs instead of the root element. The decorator uses the [`getBoundingClientRect`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect) function to calculate the props values and it does not reverse any transform applied. -::: diff --git a/packages/docs/api/decorators/withScrolledInView/demo.md b/packages/docs/api/decorators/withScrolledInView/demo.md deleted file mode 100644 index 1fd35f894..000000000 --- a/packages/docs/api/decorators/withScrolledInView/demo.md +++ /dev/null @@ -1,198 +0,0 @@ ---- -layout: false -title: Demo for the withScrolledInView decorator ---- - - - - - -
    - 0.25 -
    -
    - 0.75 -
    -
    -  0.25 -
    -
    -  0.75 -
    - -
    - Scroll right and/or down. -
    - -
    - Scroll down. -
    -
    -
    - Scroll right. -
    -
    -
    -
    -
    - start end -
    -
    - end start -
    -
    - 0 -
    -
    -
    -
    -
    -
    - end end -
    -
    - start start -
    -
    - 0 -
    -
    -
    -
    -
    -
    - end 0.75 -
    -
    - start 0.25 -
    -
    - 0 -
    -
    -
    -
    -
    -
    - start 0.25 -
    -
    - end 0.75 -
    -
    - 0 -
    -
    -
    -
    -
    -
    - 0.5 0.75 -
    -
    - 0.5 0.25 -
    -
    - 0 -
    -
    -
    -
    -
    - 25px -
    -
    -  25px -
    -
    -
    - 25px 0.75 -
    -
    - 25px 0.25 -
    -
    - 0 -
    -
    -
    -
    -
    - -25px -
    -
    -  -25px -
    -
    -
    - -25px 0.75 -
    -
    - -25px 0.25 -
    -
    - 0 -
    -
    -
    -
    -
    - Scroll left. -
    -
    -
    - Scroll up. -
    diff --git a/packages/docs/api/helpers/closestComponent.md b/packages/docs/api/helpers/closestComponent.md deleted file mode 100644 index 4eb5f8bfe..000000000 --- a/packages/docs/api/helpers/closestComponent.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -outline: deep ---- - -# closestComponent - -Returns the closest ancestor component instance matching a given query. It traverses up the DOM tree from the given element, similar to how `Element.closest()` works for CSS selectors. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"cfc3388d1df41c1b47af505dc7b676e2c17db9f0ba3938e86c1a9077015a8973","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYD4QqqUAwtU2MAjNAyOT0EZKBzePReSReQzaYzGRgARzKZAwiF4pVI7FGFF4WjQHzgAH4scBzLxqc9NJYsQAJaQAWQAMgBRYY1MBoADc5iO3CxsgAPrxXrAnniYFBzFYbHYvj80P9rBAgTynC43HgAOK1XjjbyCb7wez8AHq4G8PE9N7eABGGENpGYJFIcDxIXFWEN+G8ABEAPLMl0wGCBbqzBiIACMAFYhiMxhM4wA2Ga9eYxkAm5WqwHA5bSpAbXPbV17a5x+MnM44PCEd03eh4QTCXi/fDsVhQJw9PqIADsACYk6NxkhE9QswsPF2e32hiXEGPyzsqwc03XqOdG1dyDNbh4WBwuHx234oaD5BDlAZNNpeDCH0YzBY1YqllRte5PBIfGESMZzCJAIiiPE4ioBIkjgVIMmyXJ8kKYpSgqKoajqBomhaNpOijXoYwADgzKJk0nRBphnOY53/RxlyBJA1y2Dd9iYtYd0wBsPCba4j1bE8sEfMhMD4Bde38C0wClEIKSpGkwGYGosRxL1+TAI4tVcP9/mk9gQmA4JQJQSJoigghEmSNJMhyPICiKEpykqapamYeoYEaZpWikmSyldYl1X8BJLFYDouhAAcY1jNY12GCdU1I2ZszbdUZOLRjEAAZk2CtdjYw5OL3HiDxbHNGCErQRIwPhFOU7E0FxUZ+2jJBY1jIdxxTKZMxonNatwBjVioljK3yyZCu4y5m34srMMIKAxO7CTLAgV4aCgRghV4IgIHYJcIpauNJjLOKuuHHrko8Fa1pldLVg69dRurEcJouXjD2oY9c3VUpeCwXpgSxWF4UfExeDFCUYClIF9sipjos6ijEtnHN/tIItBoGHLWOraLXv3abPoEkBTweC9WFNP5LQ1EFgdfRFkTRDEVIar0CSJElyV4SlPhpJ46UZFkOS5YF1MFIGJDhemwYhxQoelWUPwVc0KfzamMecbS9QNI0lTNAR1Z5G0wDtfhHWdBq3TIT1Rh9P1AxDMMI2awj4cGMj4ta5HerbVWzQLK1NUxw5saeg5Y2OU5d0m97SqYCqcDsaraWqQW2U5GBuQYAjBxHSYiMR1MqKS2j+eqO6scevLq3z/HisJmhifK4Sk74OnVAREx/AAEhgVg0+FzPrQAMm5+TqQAfQnh0JCnrnmWaSRVPxKFwd4UxPtISw8WYdaN+MMWtJ1DxpH9XhNAgew+6HnlDNCcJTMg+JLLg6zELslDHPQlysI8nDWltMEe0WQE4iXYPAIKaAQoAGI+5hRzjGEc8Z3anQotlail0QC91CsHd2I1q4HGQXXKafEiY5ikr9NGgNrwgzfGvSG0NboIKYkOacqCEoXVolQoOEEMoIyrpuJAREjjhQtLAPA8pbD2GAFCAkeZ/aG3sEcFOlheAAHIAACaFnKYWYAhWyyEihqPUuYS8IhxJQDBAoSEXgx68x6MSfgBs9Lej0DzGkvB+pYjURYtRFB5JHBMbza6PIZSbTsR4tIvB9T2F1vIyhAMjZqLUIktAajjamxgOPZxCT0ZGz0PElUijGDJNSX47mKisTjHYAEbBvBBTqQ8ewJ4vByqpL4O4jxvAokBggNiH+3ZbYAHcij4Htn9VJGSgFm2yUcAJAonC6KQKAW8JsPh4EyCAI4RwgA"} -import { Base, closestComponent } from '@studiometa/js-toolkit'; - -class Child extends Base { - static config = { - name: 'Child', - }; - - mounted() { - // Get the closest parent 'Parent' instance - const parent = closestComponent('Parent', { from: this.$el }); - if (parent) { - // Do something with the parent instance - } - } -} -``` - -### CSS selector filtering - -You can combine component name with a CSS selector: - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"f1fba18f7ef2fc0bb7728a080b2f65864719d51c0ae024a31f9a984bb456d477","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvEawhx4aAMIQAtlkkwwaADwAVXnRpgocXgCEuMXgF5zl7RfkAFUhCxwAfB8YBHQWQxEXjg0UnYwAHMKXjdxSTgAfiDgAB0pXgz+VxUggAldAFkAGQBRVhgVTTQAbjSAX24g/QAfXmFYfnCYKDT2NQhSNGlZeRDlfrAqyhAoCBEERBAAcRghtHwrGTkFaVV1Sa1ecJDmUSsAIwxeUOYSUjhwiLasa43eABEAeQLr0hgYAB00xOgyQAE4qOVIuskABGABsVDQzFIEVWeC2oyUew0WmmHEmSAADFQRPgUcwxGRwXUKOhsLhFoQ7tMaPQMfEhjBWEEyhUqrxWmBBKxWMDkaDELDYSSQFCIjDEAAmJEotEMRbc/FdJAAZlJ5NIlJo5EQ8Np9JweGZ1KRhjwRBRvFmIkElS0QXeczdUyoLoWIAAVIGAAYAd3CszDAJdPq0IeDvD+aEEpDApmYSZg/DImhEVjQEFeVlj7qGIkkyK6UCOUnWVgjxgg0bSaWQBXeADleAAlbO5s4AXUY+DQaHciAA9JPYCRZDhSACVBAAF7sUXMAEDCIzuZwScAdRg50nAEEnABJQ+R5u711l7jilEa6UAVkhmgV+CQAA5Vaj0UWUtfTlHVEH1EAyQpKlTWlC1qAZa1iFtah7UWRhKnWaA+CcFEqk7aBAT8AIAGVuRgMQBm0Pky28eRyko+4ghCMJIkaXgaIFIURVYXhGAAagAFhiO5ZGYExHz9Pc8D7FM01MesBHYe4uXKMtXmYIZ2AzZ14HzYxTiGCB+F4SBYA0oYVE0sl4GCcjGLgAFWzAdsu17fs/iHEcxwnadZ25NwyCXVd11YTdtzvfcjxPc8ry9e8qknYjSAwMiGMLUhJJAEEXyVQSP2hb8pQgiV1TwZLUvsjLtUJcCDWgk0kCVIl4MwK0mWQ8g7XZRYK3TSzmHCXDPLQIJHBgBxLBcNxPEFNpjGzasn0lWFX3fOVP0VGV/zKxYrKGvC8UhMD8sgw1jWpM1WsQjqWW6jUQBYDguD4TEFHGfYqkm+Rvpgab3C8Xx/BS5jQkeaJYgkdMkl4VJ0kybI8kKUo1KqWowAaMb7HG/7ZtadpFsmHowD6dRBmGbYxhxA4GCk+Y8BWNY3jekJdgmAVjmRM5eEuX5bjIB5ImeYsPm+X5/iBKgcrheE/w2wqZZ2wDIJGd7qZAglGVOqCjRguEwWu9qCE61k0MerBXAXTA+CyVQkeKTijuyiUNWa075UVU7SuV22VBqrX6t1xrEDWw3GWNu7UJ6yDOQMHkONRw5uNFZbXe2+WvyapWHq1Y7au1869bNWE6kHUlCLwUmBiGYAKaxD7cSGOoBGyXgAHIAAEQkEKAJEw5hJwAKzgABaQsIFYABrdg0Db9G0mnXhGZFlmhjb4aqjb3gI3WI4axDABifawBDNI+tZ7kbGdb0ywBCq0oojLGDbgEyXXKA2+4dHz4Gg6Rqv1eDcabPw3loRgR9BpgG4G3aItdfZBEvg0ao0x+5IFAIYTQDxJB4GHiAOodQgA"} -import { closestComponent } from '@studiometa/js-toolkit'; - -// Get the closest 'Parent' with id `#main` -const el = document.querySelector('.child'); -const mainParent = closestComponent('Parent(#main)', { from: el }); -``` - -**Parameters** - -- `query` (`string`): a query string in the format `ComponentName(.cssSelector):state` -- `options` (`{ from: HTMLElement }`): the element from which to start traversing up the DOM - -**Return value** - -- `Base | undefined`: the closest matching ancestor instance, or `undefined` if none found diff --git a/packages/docs/api/helpers/createApp.md b/packages/docs/api/helpers/createApp.md deleted file mode 100644 index 2be52ed4a..000000000 --- a/packages/docs/api/helpers/createApp.md +++ /dev/null @@ -1,131 +0,0 @@ ---- -outline: deep ---- - -# createApp - -Instantiates your application on page load and returns a function to access the instance from other files. Use it to configure global features (breakpoints, attributes, blocking) or to access the root app instance from other files. - -:::tip Simpler alternative -For most use cases, [`registerComponent`](./registerComponent.html) combined with [`defineFeatures`](./defineFeatures.html) is simpler and avoids the need for a monolithic App class. See the [registerComponent documentation](./registerComponent.html) for details. -::: - -## Usage - -```js {1,4,6} twoslash -// @twoslash-cache: {"v":1,"hash":"1efdd9f046c86000853ef2b97c2bc4dade45377fda61ced7c6cac4b74068b6ec","data":"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="} -import { createApp } from '@studiometa/js-toolkit'; -import App from './App.js'; - -const useApp = createApp(App); - -useApp().then((app) => console.log(app)); -``` - -**Parameters** - -- `App` (`typeof Base`): the root class for your app - -The second parameter can either be one of the following: - -1. `rootElement` (`HTMLElement`): the root element for your app, defaults to `document.body` -2. `options` (`Object`): an object to configure more advanced options - - `options.root` (`HTMLElement`): the root element for your app, defaults to `document.body` - - `options.breakpoints` (`Record`): a list of breakpoints to configure the [`useResize` service](/api/services/useResize) - - `options.blocking` (`boolean`): whether to enable the queue mechanism for the internals of the framework or not, defaults to `false` - - `options.prefix` (`string`): customize the prefix used to search for components with custom element tag names, defaults to `tk` - - `options.attributes` (`{ component: string, option: string, ref: string }`): the HTML attributes to use for the [HTML API](/api/html/), defaults to `data-component`, `data-option` and `data-ref` - -**Return value** - -- `useApp` (`() => Promise`): a function returning a promise which resolves to the app instance - -## Examples - -### Basic usage - -Use the `createApp` function to export your app: - -```js {1,9} twoslash -// @twoslash-cache: {"v":1,"hash":"6592532a85021f0a574c515a72a634871f291cc1048fd478069a1179b62e7c8f","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYAKkMMw0AIJYLCSADKcnoIyUDhgAGEIGBSqQyntbJIvMYKLxZPIIcoDJptLw9F5DNpjIwAVhELxgRitGgPnAAPxUgAS0gAsgAZACiwxqYHsAB9eNDvr8YBSAPJYelwnhUxh8HTGXiGSzsVQg3gAMihMmMZgs1ls9n4Yv+gKcLjceAAkvDggLODReMxFLxLBBXvZxt4QuwSJ9+NUbGARvY4bxfbx/YHeJoIPYYHzw7wAO74EZRzO8LChbzbEQAIxgWdYEGYsCg5jdUHjtTKpE+zGer3ekdyvDKqmz3maWF47Adbv43gzWaKg5EYqgGECM1C4Ui0TiVASSTgqQy2Vy+UKxVKFSqNTqDSaLRSmdYOFIcBSZp+Fqw/gSllYHS6IB6fUQAEYAKxDCMYwTIcC5zAsHgPuKFLLEOqwbCAWw7Hs1x/v+JxnDgeCECQ5AzLcUG+CIsHdLMDCIAAbIBUTAeMSAAMzgfMFEgKRUTwUgABMmzbKQuz7EglGYdQ5w4Vc+HUIRIAsBwXB8IIwh6li4KKLiqgkroUKaYaVg2HYUJWq47ieBIPjCPO1CLkgEQcbE8SJMkaSZDkeQFEUJTlJU1S1Mw9QwI0zStB+ZG9BRADs4VAaM9GINMVkQaxSxDJxiA8UhfECWhv4ABwiZg2EeLh1wEfQTBYPiZCYHwFL+MGYBPOwIRUsA5i8O1vBgMwNRUgiQ4hAA3OYRxGTaHiwg1TWWcEYQ2cuQ6rgQjmbs5O5ufunlHj5p4BeerT1Y1ISNr8Hwvmgb4hV+5EDExtExaBlHMZBSFwodcFhoxvEoYJhz5WJRUSTcZUeIwFVaFVGB8F1PW8H1oxON+FG/msOXRSBUxPax0O4ClH1xV9/GoQckx/YVlx4UDrGyQ8CnmhKgKSAVMAQE8vAUhixL4iY5KAlSTMs2zgK0jKDLMrwbJcryMD8kKIp01KItytwCpKiqaoalI/OsxSOp6pzRgGuYekml8j701go0mfaPROuKrrup63q9jGAZZsGxphgKvAdjmsZZgmSYpl746fNGebzLwha8CWZYVlWNbut85RNq6rZvLKocQF2PbRv2g7Dm8Y6Zp8k4avWlZzkE1koPN9lrstW4ubu7kHl5x6+f5gUXleN53tBT5nRdnShT+v6TPFwz3QMmN4P35vvasqMZd92UYacolk8Vkk0MDSHEYLFsj0j/4T3RoG3bMLF4OxKxIEvyGEz9XEYZ+wawHgxsGcAUIYnPOtHM8TQlheAAHIAACh5vInmYNuVye4iggKGmAcwik/AHzBAoSEXheCtU+LDYI9J+ACFek1QkOC2odWxlSEBFIQEUAoUcJBRxzDmDoPpewsAnjMDKKwU08tAQ8ywNwAaThoFIFANieEHw8CZBAEcI4QA"} -import { Base, createApp } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - }; -} - -export default createApp(App); -``` - -And import it in other files to access your app instance when it is mounted: - -```js {1,4-5} -import useApp from './app.js'; - -(async () => { - const app = await useApp(); - console.log(app.$el); // document.body -})(); -``` - -### Configure breakpoints - -You can configure the breakpoints used by your application by passing an options object as second parameter: - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"b75d28bc55af429e2c5dbdf95b22d15eb0a5a8edbb98c5be1dc24bb6504027f3","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvEaRjMaAQSxYAPAGVedGmChxeAIS4wAwpLhpSgsRFIrDcGAD4KvACqb6MHXvswACqQQWHoAvAZGAUFwjoxKWIi8ai5B4mYA/AkAEq4AsgAyAKKsMAC2Xmi8AD68xrLyMHEA8lipYDwJjHwhjryRJewO6rwAZOGDro6OADpg7CVYNhUycorKlCBQECIIiCAAkm1ozGDi9bzHULwlEMIVaPgwvADm7CRSIhDzkuW8krz3jxeb14gQgFRgxTKJ14AHcHlIAbwsMwno98FxeAAjGBeXisCDMWBQGYXEEwNCCUhSZgCYRiCQIiC8QQOf4Pc7KXjsQ7HESPOG49gVAZkwkYAB06yOTx2yGQIA4YAA1ut8Gg0MFEAB6LUAKzgAFo0BAIKwlULxeZBFAJGUjuLYEQtcwsOwtQ9WDhSHAtct6nFxWqSqwQABdUNUczMUgMRAATioxTAT3uSAT1GjqNjID9qyw60VuEQAAYqCJ0aRmGIyGmAL4UdDYIsEYg1qg0eh4OYLGO8OLrKMxpAAVnTSZT+CQAGZ25nyXh+4nuUWAIxlitVmjkRAAdnrjZweEIJHI7a0TDYnB40jqeZUxwwLl8kWCMTiCQfyRaDLgGV42XyIpSh+apahWBplGaVp2l4TpeG6XpAn6QYH2mWYvl7XMIPzKhNm2PADijE5OBoc4dCuG5oURIFcQ+L4wB+P5qNeXFQXBSEfgFBF2WRVFeHRPRsVxfFCRgYkwFJWQKSpc5aVEVp/iZFlHkRF0sC5HlRH5eEuWFPQ6igCUpRRWV5UVFUqDVDU4G1PVDWNU1zTQS0KRtT5yWYB0YCdF03Q9L0fSwgMgxDcNIyOId4wANkTLwJzTWdSCzPAgrWJcGOnddo03GtEBXYd92oJsj1bU9qHPXZu0WPs0pAQdYxXYsYoVOLU0QGcMyS+ddkXBVl0ynMN2rbcACYCobIrD12Y823KztdkYLBAi9TA+ExOolQWbk0F/BIACUYA+UgoBUcxSG5J4XDOi6emqYRYH4ZcoAHCKGvy2Lkzalc1065LdnWuRNogbaEHSosABYssrYakBGwrMCmlsTylCqQEW5ayFW3haFoGzeGu5MXujBqp0hlrPsndrEr+kAcdBvqMsQYcoZy7dwfh4rptKlH5rRpagkxjA+FxhICaeInIvy0tyfixARup7rafpwskGa8tsphxB2YmhHmxmsqO2zdGBZjIX8dFiwLolhqop3D7ZZ+iKaeV/rdxZzXtYPPXubPXnjZWs2Sgt87CfC4mkBXAAODrxy+hXsxKAtXcj92tyQT3Ju95HfaN/mA74Vhg6tsPIpG4tpdjynHbnbMQzBhLBo1tOtY5xH9Z53OMdN4XC/xy3Q7q17YZXO2Zba+XfsV2g64Z1dpfV6Hm4z3WSuzubO5NrGcd7sXrdhqdmbHymOqdqfp6TxnvtT3Ll85pHZsNpg88F4Xt6Lgf6th4cycr9P47wHG59655QngvVm6dawRhzNAZsVVezABvOBOIvBawCCQrwAA5AAAStG5O0zA7JGhNGaIUGCADcMw4EVGQfwdBGDxRagDPqchMwZh0B7BUB6zBBCsCWLebCsRlAuGADMXgWINpbROHjERUgxHYxFpg4sWBaAYIoKIuRCiMHg0jkolRajZFiLxhgncUVI7KNUeosRQdMGNRGuDcx+i5F4gSBglcI0dEOMsdjXurjwbg10RYgx8ifErjjGXTxQTAE+LGlFAJjiUH6NrNwMh6x8FIFAFoLwcAGR4H1CAWstYgA==="} -import { createApp } from '@studiometa/js-toolkit'; -import App from './App.js'; - -export default createApp(App, { - breakpoints: { - xxs: '0px', - xs: '480px', - s: '768px', - m: '1024px', - l: '1280px', - xl: '1440px', - xxl: '1920px', - xxxl: '2560px', - }, -}); -``` - -### Configure the queue mechanism of the app - -By default, the app will be created with a queue mechanism based on the [`SmartQueue` class](/utils/SmartQueue.html). This queue helps reduce JavaScript's blocking time when instantiating the application and all of its children by releasing the current loop every 40 ms. - -If you wish to use a blocking strategy, you can disable the queue by passing the `blocking` option to `true`: - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"9d9981a00cd0d3343308cd88fde6ea4b4f6831267b81136dedffda14726c5b5c","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvEaRjMaAQSxYAPAGVedGmChxeAIS4wAwpLhpSgsRFIrDcGAD4KvACqb6MHXvswACqQQWHoAvAZGAUFwjoxKWIi8ai5B4mYA/AkAEq4AsgAyAKKsMAC2Xmi8AD68xrLyMHEA8lipYDwJjHwhjryRJewO6rwAZOGDro6OADpg7CVYNhUycorKlCBQECIIiCAAkm1ozGDi9bzHULwlEMIVaPgwvADm7CRSIhDzkuW8krz3jxeb14gQgFRgxTKJ14AHcHlIAbwsMwno98FxeAAjGBeXisCDMWBQGYXEEwNCCUhSZgCYRiCQIiC8QQOf4Pc7KXjsQ7HESPOG49gVAZkwkYAB06yOTx2yGQIA4YAA1ut8Gg0MFEAB6LUAKzgAFo0BAIKwlULxeZBFAJGUjuLYEQtcwsOwtQ9WDhSHAtct6nFxWqSqwQABdUNUczMUgMRAATioxTAT3uSAT1GjqNjID9qyw60VuEQAAYqCJ0aRmGIyGmAL4UdDYIsEYg1qg0ehMNicHjSOp5lTHDAuXyRYIxOIJIfJFoMuAZXjZfJFUo/aq1FYNZTNVrtXidXjdXqBfqDIfTWZfGN9zdxdabbZ4A5Rk6cGjnHRXG7QxFA3EfL4wB+P5f1eXFQXBSEfgFBF2WRVFeHRPRsVxfFCRgYkwFJWQKSpc5aVEVp/iZFlHkRF0sC5HlRH5eEuWFPQ6igCUpRRWV5UVFUqDVDU4G1PVDWNU1zTQS0KRtT5yWYB0YCdF03Q9L0fVzLcsEDNBgzDCMQCjGMkAANgADkTLwU3wNN20zck8BUu9E25IsACYywrKsaHIRAAEYAFZ60bHA8EIEhyHbLQ8CHdZdNjAB2YyFVM1NEAAZks0gszwOyFQcpBnJzVzqw8xzfIbagm0C1sQuoMLdkYLBAi9TA+ExfERHNZMF0xE1imOKpmR0GB+AcqBIqOPTEEM6KTOTRK4tG9LdmarY2qeAtsuSlzozcmtEEc2ttI+WA8DmBZr2AG9/U5WsBBPXgAHIAAErQku1mAEo0upE26AG4ZhmOgToqWB+GYQRWCWftVNiZQXGAGZeCxFrloSCxBBgCgZlrbgvvWF6kFALQvDgBk8H1EBa1rIA=="} -import { createApp } from '@studiometa/js-toolkit'; - -export default createApp(App, { - blocking: true, -}); -``` - -### Configure the HTML API attributes - -The default attributes used to interact with the DOM are `data-component`, `data-option-...` and `data-ref`. These can be configured by specifying the `attributes` property of the options parameter: - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"30bd2911818b01585be3dacc56dd7245a7b3c5dc2c9e7a44a2ef6a32fac68e57","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvEaRjMaAQSxYAPAGVedGmChxeAIS4wAwpLhpSgsRFIrDcGAD4KvACqb6MHXvswACqQQWHoAvAZGAUFwjoxKWIi8ai5B4mYA/AkAEq4AsgAyAKKsMAC2Xmi8AD68xrLyMHEA8lipYDwJjHwhjryRJewO6rwAZOGDro6OADpg7CVYNhUycorKlCBQECIIiCAAkm1ozGDi9bzHULwlEMIVaPgwvADm7CRSIhDzkuW8krz3jxeb14gQgFRgxTKJ14AHcHlIAbwsMwno98FxeAAjGBeXisCDMWBQGYXEEwNCCUhSZgCYRiCQIiC8QQOf4Pc7KXjsQ7HESPOG49gVAZkwkYAB06yOTx2yGQIA4YAA1ut8Gg0MFEAB6LUAKzgAFo0BAIKwlULxeZBFAJGUjuLYEQtcwsOwtQ9WDhSHAtct6nFxWqSqwQABdUNUczMUgMRAATioxTAT3uSAT1GjqNjID9qyw60VuEQAAYqCJ0aRmGIyGmAL4UdDYIsEYg1qg0eh4OYLGO8OLrKMxpAAVnTSZT+CQAGZ25nyXh+4nuUWAIxlitVmjkRAAdnrjZweEIJHI7a0TDYnB40jqeZUxwwLl8kWCMTiCQfyRaDLgGV42XyIpSh+apahWBplGaVp2l4TpeG6XpAn6QYH2mWYvl7XMIPzKhNm2PADijE5OBoc4dCuG5oURIFcQ+L4wB+P5qNeXFQXBSEfgFBF2WRVFeHRPRsVxfFCRgYkwFJWQKSpc5aVEVp/iZFlHkRF0sC5HlRH5eEuWFPQ6igCUpRRWV5UVFUqDVDU4G1PVDWNU1zTQS0KRtT5yWYB0YCdF03Q9L0fSwgMgxDcNIyOId4wANkTLwJzTWdSCzPAgrWJcGOnddo03GtEBXYd92oJsj1bU9qHPXZu0WPs0pAQdYxXYsYoVOLU0QGcMyS+ddkXBVl0ynMN2rbcACYCobIrD12Y823KztdkYLBAi9TA+HkCx2ExQQaBs3hgBmXhDukT4FgYk4EnMUhuSeABuA6jpSBkLo25M7qkI7ZH4Z6rtemZawHCKGvy2LkzaxrEuS3Z1quradoLfrEAAFiyythqQEbCswKaWxPKUKpARblrIVbjvo8pvuugHowaqcOvHNr0wiyGcxO74TnhjLEGHFGcu3RHMeK6bSrx+aCaWoJiYwPhHskCnkypyL8p3EH4sQZqme6kAZbADmi2a8tsrRpGBexmayo7bNCYlmMpbJL7eEuynwuppAVx3MdWsndqIc1z7daQZXBsNrckH5iMWdgLsMIqYAb3AuJeFrAQkN4AByAABK03LtZg7KNE0zSFVO3qq3sE/4FPU/FLUA31YuZhmOgewqWB+GYQRWCWW9sNiZQXH297oc27b4ASAejtJ07ybTtAlQNAZU4oe7Du1hJU9ng0UkX5e7bXjfPu3976z+7gbvWHOkFALQvDgBk8H1EBa1rIA==="} -import { createApp } from '@studiometa/js-toolkit'; -import App from './App.js'; - -export default createApp(App, { - attributes: { - component: 'tk-is', - option: 'tk-opt', - ref: 'tk-ref', - }, -}); -``` - -::: warning W3C validation -Be aware that using other attributes than `data-...` attributes will probably make your HTML fail W3C validation tests. -::: diff --git a/packages/docs/api/helpers/defineFeatures.md b/packages/docs/api/helpers/defineFeatures.md deleted file mode 100644 index 67e87ac3f..000000000 --- a/packages/docs/api/helpers/defineFeatures.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -outline: deep ---- - -# defineFeatures - -Configures global features (breakpoints, attributes, and more) without `createApp`. Use it when mounting components independently with `registerComponent`. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"9700ef5d65e07feecb171854b3905e97c802738b3e97b06fe87fbf101093e4dd","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvWP3ZgYAMRjM0g0vEYQs4yXES8ACs1Li2AHiUq18AHzd9RCOygAdMOwC2WCCekxZ8paq6ghUUBAiCIggAMKSsgDm1rwJrBAARmwCysHwvBCCaHDOMPn8vAAGIuoqMACCWFgVAHRuAKpw/oKsvADu+DBSgsVgCZXqCexwNKRxXpKDaBW8ctPKUGWV1Tn1jS2U1MwJUcjIIBxgANYH+GhoWHoA9I8AVnAAtGgQEKyX7GjNaaCKASDwwNDMZqwIiPZhYdiPAasHCkOCPGRyRQ5axwZq3DysEAAXSJVGmxgYiAAnFRWIMEmh8EgAIwAFioENICXBeAxgWxIQOF1wiAADFQRPhjMwxGQkFSAL4UdDYEUEYhyjl0SkgFgcLh8ISiHRSCZTGZzbzyMBoMwAFV42sGUDgvAAQlwYHEwNNSIIxD5eABed2e72+/1fUg2RgB0j6B0AH0MpAgHimMHtNgovDAzDBAHlSABlGB0uMAfn0vrkCXsKbTGbMdV6zH+MCgZgAkj6IaIYHbVVmbMgiTY3J5vL4zWtZmmrYsDuFIngAEowSazlJpTKsVgYXjMMAbDwFG2HlLsEhSETzhY2nOB5i8LCp9OdXghH5EWu8L4X295mtAEDghY4kFOc45GuKhbnuJ5Xg+L4fj+AEgRBNNwUhaFYXhREyxRNEZwtO9gLxNACWJCgziwaUPAOONeDtAZeEAhdz1vXs/UYp8XzfDNP3gb9f3/f5miomi6IOPNCxLMsYEY5jShk0pA06csoz/CBeGGDsBEDRkplY0jFnE0kznUYIwAOOo+MbD8v1YH9Ri0w8pGMUhmAPCBylPYQaA2Nj7zQFZeyPER4DM0kQHJEwkAAJgAVlpelGRZAB2DljG5HViLIS1gqFTEkHFEBJWlWVyEQJKlRVHA8EIEhyC1eg8EnHwQoAWQwArgIOWLKQADgAZhS0Y0sQZlmSyrkeWibresXWlismiUpU8yqkHS2rqFVBqNWa6htSYNhOB4PwAixKwQk0bQJB9fQjBMThWAsAVbHrRxnAneZfD5K7clCEBlyiWJ4nYJJ1G3DIsn4d7XQKIoSk2KoahoBomlaMAOi6Hp+kGHSRjGCo8rnIDFmWVYaGYDYfK2NHdkx0CjhOM4Lhggg7geRBnjeT5vl+MT0NBLCoRgGE4QRJFCPRfxMSCHFyMokkyU5SlmXi6bzlSplJvZQ5Zp1f6FcFZb5CQUayvWmUZhKnbMHq6JGs1I7WuiRhXy0MhMD4dIakubw5CKKteHXW9SE7GtRhzKOEhsXhk2Ef6oH6tWWVZUq6XG3WppmnK8D95QA6cG0geFJB9fKjbbeq+29qdg7QOO93PZRH3eD0Du0FIWtU4pFlEppbXs5ZPO5piorzcQZKrYqmvWTrx31Sapu3d1VvvYwPgPGrbve9V/vJvSmes4ZHOx51eizZFAA2Na57lRAF+VXal+dw6aDXj3UzbrfeFYXePdRh9zipNKkWtT4TS1pyfO0RCTXy2vfauj9n51TVO/VeOo9RnT4KTRaNozBHgwDGOM+giE5hUkWUsGkfAh1jvWAw/FOiELABgUc453C/RCngkyNolwRFBuuTcMxoa7n3G5E8Z4QrPkmNeYy5MHz5FIBeT275SiOWcmMf8z4gpkWZuBFAbNoI3C5ghPmyFBZoVUBhMEEIxYSzwtLMgRENzmnyrwgE+JCTmRALRTyV8yqaSUvI9iIVOIRh4so58qiBIaJEtpMSElfFSSoJQuSNDlHBJUkoju8lGL/l0hsfgBl8BGV0aZJJlk1DWSoLZGJDkhJOXiW5Q8pBPLeV8lIvS5TzxU3CpFYk0UBoJTZGNM+GUL54B4QohgCDJpayrjbR+opF7oMbi1HU7VfALQ8SAyk8VhrxTGVA6B2Vx47JmZPEUudZ7IKqsyQaCpoq3lgG1LhvBgAXXlvDHM0zQm8AVAIN8vAADkAABYWmEISIX5ihf4IKADcP0pxdR6h4oFaZQXNEeBc0JzQ3iIrcG4Y28NGDADcLwXghdmDFyDp3clUhKUd30CCjO6gPAgooBSplO9QWDVFOyzl3LKUANBcyUUAqYAcq5YypUbgFTcCRWANwfzgqMFxcFRVBxbHMCQKAJ0Pp7p4DeCABUCogA="} -import { defineFeatures, registerComponent } from '@studiometa/js-toolkit'; -import MyComponent from './MyComponent.js'; - -defineFeatures({ - breakpoints: { - s: '40rem', - m: '80rem', - l: '100rem', - }, -}); - -registerComponent(MyComponent); -``` - -### Available options - -All options are optional. Only the provided options will be updated. - -#### `breakpoints` - -An object mapping breakpoint names to CSS values. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"237ecdc9b622ddf6e2b935ed942e33e78328c698e180360555532e17647b460b","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvWP3ZgYAMRjM0g0vEYQs4yXES8ACs1Li2AHiUq18AHzd9RCOygAdMOwC2WCCekxZ8paq6ghUUBAiCIggAMKSsgDm1rwJrBAARmwCysHwvBCCaHDOMPn8vAAGIuoqMACCWFgVAHRuAKpw/oKsvADu+DBSgsVgCZXqCexwNKRxXpKDaBW8ctPKUGWV1Tn1jS2U1MwJUcjIIBxgANYH+GhoWHoA9I8AVnAAtGgQEKyX7GjNaaCKASDwwNDMZqwIiPZhYdiPAasHCkOCPGRyRQ5axwZq3DysEAAXSJVGmxgYiAAnFRWIMEmh8EgAIwAFioENICXBeAxgWxIQOF1wiAADFQRPhjMwxGQkFSAL4UdDYEUEYhyjl0SkgFgcLh8PlYqwhTTaCRgPSGCmcVgWAW2ey8RzONyeby+I1BHEHcKRPBxMCJZKpDJZfgOuD5QrFWCbKo1GgNJqtMAdLo9fqDXjDORjCoTKYzObeeRgJYrS00ZgbCDlBM7ZP7DlHE5nC7XKi3e5PV4fL4/P4AoEgiBgiFQmAwuEIpEotFeyN4tAE4mkkDkkxIACsAA5afTGSz2YcuTzoouTfAhZikAAmCVS0gymZIUVKlU4PCEEjkLX0JgsFILQyEwPh0hqS5vDkIoAH59AAJRgEQfCgMxplIPMKF4DC8xsXgAB8czAI0oAOTdKQAdkog9RiPRBmWZFszx1CDlCgpxy1Cc5b0QABmR9pVlchEDvD9qFVb8NT/ahtUA4CUTAnD9Fw0ZyM5SkqQANlohkmQY5juR1bjhSQE9JSE19EFZcTMC/aIf01WSAOiRggJAkwMD4DwVLQTC1LJDSWWZB9zkPfSmNPIy8A8G95B3QTn2EszbMkhzpIOGgXN1dzFK83hWF8/yEnUikWTvfcwroiLDPPc44pFHSQAspKrJs9cUNgPB3R8NBeGAPwAmNXIowVARgI8XgAHIAAER1BcFmD7T5vl+f4poAbjcNxLxGxhgDcXheDY5gOJgq0DqkI7lOm1lRXUDwpooQ7rp86bd3umBHueq6jsK6bmVFT7vpepU3AVbgNoOcdmCQUBtUGYpJDwN4QAVBUgA"} -import { defineFeatures } from '@studiometa/js-toolkit'; - -defineFeatures({ - breakpoints: { - s: '40rem', - m: '80rem', - l: '100rem', - }, -}); -``` - -#### `blocking` - -Whether the app should mount immediately (`true`) or wait for `document.readyState === 'complete'` (`false`, default). - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"276fb492240ab9a060fdfef8eae35d5ec73f16e42431b14aca933744f7692d5b","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvWP3ZgYAMRjM0g0vEYQs4yXES8ACs1Li2AHiUq18AHzd9RCOygAdMOwC2WCCekxZ8paq6ghUUBAiCIggAMKSsgDm1rwJrBAARmwCysHwvBCCaHDOMPn8vAAGIuoqMACCWFgVAHRuAKpw/oKsvADu+DBSgsVgCZXqCexwNKRxXpKDaBW8ctPKUGWV1Tn1jS2U1MwJUcjIIBxgANYH+GhoWHoA9I8AVnAAtGgQEKyX7GjNaaCKASDwwNDMZqwIiPZhYdiPAasHCkOCPGRyRQ5axwZq3DysEAAXSJVGmxgYiAAnFRWIMEmh8EgAIwAFioENICXBeAxgWxIQOF1wiAADFQRPhjMwxGQkFSAL4UdDYEUEYhyjl0SkgFgcLh8PlYqwhTTaCRgPSGCmcVgWAW2ey8RzONyeby+I1BHEHcKRPBxMCJZKpDJZfgOuD5QrFWCbKo1GgNJqtMAdLo9fqDXjDORjCoTKYzObeeRgJYrS00ZgbCDlBM7ZP7DlHE5nC7XKi3e5PV4fL4/P4AoEgiBgiFQmAwuEIpEotFeyN4tAE4mkkDkkxIACsAA5afTGSz2YcuTzoouTfAhZikAAmCVS0gymZIUVKlU4PCEEjkLX0JgsFILQyEwPh0jSEQ/lGAB+fR0m+OlmCkAAfHMwCNKADk3SkAHZtwPUYj0QfdT25HUIIiaCEhveR70faVZXIRBmVwhV1xEaA1XdHw0F4YA/ACY1cijBUBGAjxeAAcgAARHUFwWYPtPkQocpIAbjcNxLxExgBMoqC830NBSEEUoFW4dSDnHZgkFAbVBmKSQ8DeEAFQVIA=="} -import { defineFeatures } from '@studiometa/js-toolkit'; - -defineFeatures({ blocking: true }); -``` - -#### `prefix` - -The prefix used for component selectors (default: `'tk'`). - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"943ba61eaab8db3f5142f654d18483048e6cc0880009122a6efd05b508a9d698","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvWP3ZgYAMRjM0g0vEYQs4yXES8ACs1Li2AHiUq18AHzd9RCOygAdMOwC2WCCekxZ8paq6ghUUBAiCIggAMKSsgDm1rwJrBAARmwCysHwvBCCaHDOMPn8vAAGIuoqMACCWFgVAHRuAKpw/oKsvADu+DBSgsVgCZXqCexwNKRxXpKDaBW8ctPKUGWV1Tn1jS2U1MwJUcjIIBxgANYH+GhoWHoA9I8AVnAAtGgQEKyX7GjNaaCKASDwwNDMZqwIiPZhYdiPAasHCkOCPGRyRQ5axwZq3DysEAAXSJVGmxgYiAAnFRWIMEmh8EgAIwAFioENICXBeAxgWxIQOF1wiAADFQRPhjMwxGQkFSAL4UdDYEUEYhyjl0SkgFgcLh8PlYqwhTTaCRgPSGCmcVgWAW2ey8RzONyeby+I1BHEHcKRPBxMCJZKpDJZfgOuD5QrFWCbKo1GgNJqtMAdLo9fqDXjDORjCoTKYzObeeRgJYrS00ZgbCDlBM7ZP7DlHE5nC7XKi3e5PV4fL4/P4AoEgiBgiFQmAwuEIpEotFeyN4tAE4mkkDkkxIACsAA5afTGSz2YcuTzoouTfAhZikAAmCVS0gymZIUVKlU4PCEEjkLX0JgsFILQyEwPggP8dhaAAfn0aZSDzXgAB8czAI0oAOTdKQAdm3A9RiPRAADYWzPHUINkWgb3ke9H2lWVyEQZlsIVdcRGgNV3R8NBeGAPwAmNXIowVARgI8XgAHIAAER1BcFmD7T5vl+f4JIAbjcNxLyExg+IoqD9AkuEsAk3gFW4NSDnHZgkFAbVBmKSQ8DeEAFQVIA"} -import { defineFeatures } from '@studiometa/js-toolkit'; - -defineFeatures({ prefix: 'app' }); -``` - -#### `attributes` - -Custom attribute names for components, options, and refs. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"ceb5ec0aed4029d1b302123806adde2c50f56e7ffb67ca88b4510908a1ea64d0","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvWP3ZgYAMRjM0g0vEYQs4yXES8ACs1Li2AHiUq18AHzd9RCOygAdMOwC2WCCekxZ8paq6ghUUBAiCIggAMKSsgDm1rwJrBAARmwCysHwvBCCaHDOMPn8vAAGIuoqMACCWFgVAHRuAKpw/oKsvADu+DBSgsVgCZXqCexwNKRxXpKDaBW8ctPKUGWV1Tn1jS2U1MwJUcjIIBxgANYH+GhoWHoA9I8AVnAAtGgQEKyX7GjNaaCKASDwwNDMZqwIiPZhYdiPAasHCkOCPGRyRQ5axwZq3DysEAAXSJVGmxgYiAAnFRWIMEmh8EgAIwAFioENICXBeAxgWxIQOF1wiAADFQRPhjMwxGQkFSAL4UdDYEUEYhyjl0SkgFgcLh8PlYqwhTTaCRgPSGCmcVgWAW2ey8RzONyeby+I1BHEHcKRPBxMCJZKpDJZfgOuD5QrFWCbKo1GgNJqtMAdLo9fqDXjDORjCoTKYzObeeRgJYrS00ZgbCDlBM7ZP7DlHE5nC7XKi3e5PV4fL4/P4AoEgiBgiFQmAwuEIpEotFeyN4tAE4mkkDkkxIACsAA5afTGSz2YcuTzoouTfAhZikAAmCVS0gymZIUVKlU4PCEEjkLX0JgsFILQyEwPgVDQUh2HSQp4AAfn0YA3F4FDeBEMdS0WfRpig0YAG5kNQrQdDAbDILzAipFQ9R+DI3CEkohVeAAHxzMAjSgA5N0pAB2HiD1GI9EGZcVT25HUIKgmCaFCc5b0QABmR9pVlchEDvD9qFVb8NT/ahtUA4CUTAtCMIWcs6LzLjOUpKltwEhkmWpFszx1dD5jLBhaXkk9JRU19EFZTTMC/aIf01fSAOiRggJAkwMD4YiLUs0ZrIpFk733c5DycgA2FzxLwJLJBveQd2U59VKQILlS00L1V/A4aCi3VYuMhLeBolKEjSrdhO3ezssEpylLE88QBo0qRXykA/MqgKgvXdDYDwd0fDQXhgD8AJjVyKMmP4YCPF4AByAABEdQXBZg+0+b5fn+E7KLcS89sYJCqMk6DYKtD7UNMjysNOqAVGYd53Mw8sTooQiUOK0jgdB954eh2HOv8fQTpBiF3ho1GqKVNwFW4PCDnHZgkFAbVBmKErojeEAFQVIA==="} -import { defineFeatures } from '@studiometa/js-toolkit'; - -defineFeatures({ - attributes: { - component: 'data-component', - option: 'data-option', - ref: 'data-ref', - }, -}); -``` - -## Parameters - -- `options` (`Partial`): an object with any combination of `breakpoints`, `blocking`, `prefix`, and `attributes` diff --git a/packages/docs/api/helpers/getClosestParent.md b/packages/docs/api/helpers/getClosestParent.md deleted file mode 100644 index d4785afa7..000000000 --- a/packages/docs/api/helpers/getClosestParent.md +++ /dev/null @@ -1,39 +0,0 @@ -# getClosestParent - -Returns the closest instance of a given parent component. - -## Usage - -```js {1,9,15} twoslash -// @twoslash-cache: {"v":1,"hash":"d5edf3204967180e2b5555dc3e2c5ba0c1a951434bbd246c0111de68e115fd65","data":"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"} -import { Base, getClosestParent } from '@studiometa/js-toolkit'; -import Child from './Child.js'; - -class Parent extends Base { - static config = { - name: 'Parent', - components: { - Child, - Parent, // Useful for recursive components only - }, - }; - - onChildClick(index, event) { - const childInstance = this.$children.Child[index]; - const parent = getClosestParent(childInstance, Parent); - - if (parent === this) { - event.preventDefault(); - } - } -} -``` - -**Parameters** - -- `childInstance` (`Base`): the instance from which to look up for the parent -- `parentConstructor` (`typeof Base`): the constructor of the parent component - -**Return value** - -- `Base | null`: the instance of the closes parent, `null` if no parent matching the constructor was found diff --git a/packages/docs/api/helpers/getDirectChildren.md b/packages/docs/api/helpers/getDirectChildren.md deleted file mode 100644 index 23740afa2..000000000 --- a/packages/docs/api/helpers/getDirectChildren.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -outline: deep ---- - -# getDirectChildren - -Returns the list of components that are direct descendants of the given parent instance. It helps when working with nested components that declare themselves as children. - -:::tip -If you need to only check if an instance is a direct descendant of another instance, prefer the [`isDirectChild` helper function](/api/helpers/isDirectChild.md) which will return a `boolean` directly. -::: - -## Usage - -```js {1,9,16} twoslash -// @twoslash-cache: {"v":1,"hash":"5cde8acb261d3360e4f8d332ad879dfda434f12f99321868976919b8508c6dc7","data":"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"} -import { Base, getDirectChildren } from '@studiometa/js-toolkit'; -import Child from './Child.js'; - -class Parent extends Base { - static config = { - name: 'Parent', - components: { - Child, - Parent, // Useful for recursive components only - }, - }; - - onChildClick({ target, event }) { - const directChildren = getDirectChildren(this, 'Parent', 'Child'); - - if (directChildren.includes(target)) { - event.preventDefault(); - } - } -} -``` - -**Parameters** - -- `parentInstance` (`Base`): the target element -- `parentName` (`string`): the name of the recursive parent as specified in the `config.components` object. -- `childrenName` (`string`): the name of the children components as specified in the `config.components` object. - -**Return value** - -- `Base[]`: a list of the direct child components corresponding to the given `childrenName` diff --git a/packages/docs/api/helpers/getInstanceFromElement.md b/packages/docs/api/helpers/getInstanceFromElement.md deleted file mode 100644 index e1541ede7..000000000 --- a/packages/docs/api/helpers/getInstanceFromElement.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -outline: deep ---- - -# getInstanceFromElement - -Returns the class instance attached to a DOM element. - -## Usage - -```js {1,4,6} twoslash -// @twoslash-cache: {"v":1,"hash":"0c42f2e0bcc65e67d633e27e4c3625903477dbbb80f71dbecf9f120d00f1fb9d","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAOYw0ASTBw0zUTABipCAFsAoqxjaYYNAB4AKrzo0wUOLwBCXGAGFJy0oLERSAPkYwBkYmiI7O+hS8bkpont6koebcoYrKqiIw5tgwFr68AD68YIKsrAA6YOzaWD5oMnKpKmqaOvqGxgxUUBAiCIggAOJyvMy8Ijo1YB287DHpMAJa2iO8ACIA8gCyVkEdAHSU1MzSfcjIIBxgANaH+GhoWHCIAPTPAFZwALRoEBCsV+w0HtlIIoBIjCo9rAiM9mFh2M98IEcKQ4M9ZAo5s0lm1gkC7tpWCAALrEqhpUgMRAATioBjA0jQ+CQACYWVQVKQMXgMY15i09LsTIdLrhEAAGKgifDMUjMMRkJDUgC+FHQ2TwhBI5A51jwVRqlKiE0kHUOFKpAHZ2RdjIzmTSObLuf03NVTcK6bMxQBGKUyuUK8iIS2q9U4TXERW6+h4cYxMYmqYmPlqUKqDDmzlUn0+m30+1IH2Wp1cuRxpMdVMZEXepAAZn9svlNGDADYw9QNf0tdHqHr+iwOFw+LysRkBbiOqYM/5Au0QmE4DAIsaYnEfgkRmAMMltxgKgbavVMWlsa0hZ0QN1enghnVRuN3cm6rMzxlFjoVhttvO8QcnROJAzguWYbioO4HieV4Pm+X5/kBYE0FBcE5GYKEYBhOEESRVgUTRMd3w0HFLz2AkiVJclsyLet8ztJlWRtTkXRAQimgnEiFyvUUGybQNW1ZDs1S7CMeyjHV+1jfoiFlXgb0EPFQlWHoFLNLoej6EAACotIAAwAd1mbp9KhFS8V0nTeFIORBFIJQVms/gyGMD8fl4JkFnkvFExMZhvSgGYpA83hDNsCATIqCpkE2VYADleAAJRgJzrLUYlGEgx4XmeaFAggFE9m0CAAC92FKdCfGkHKNOeAB1GAACNngAQQABXkOqjPC6qRFUkxuCzWUcwAVmGul6IdAAOUsWK8tTQKmXiQGlZsgyQAAWFVhMwUSCHEw4aCkkBGCwLQUUwPhlN6/8GugDBQgACXMTYABkp09a8NLwcwkV4HTdKuvqgVuqAMAsrTeFO/KyEwKyYFO+AOnsYLTBBjA8h8XhTH4OUjGXNA8kgWBeAgfh3N+3rSFSuo5pMSJMeKUoZjJyBeDgLx8B2LirFodhlDgPZIrAaK4sS5LnLSjL7iy15ctYaHSEKkqytYCquR6tF6qatqOsBvFnjRgaqKGos23W8aGQYxBzaOMsqRANHa0WxBG2WgMW0VRBhsmzsdrFPbtQOgcQCPI03UmeaLSLS1JVtS2HVpW2WPDj1uLrF2+I99t1uVMllugf3Q7qYAT2rYiL255VP2WAByAABEEwR0ND3i+H4/gBNAa4AbkPd0w8rExq94Gu9meFOXz2D4e6F+NlETZ8q3HBYAF5S+XydL0YWngbuyIJ46bhu8OCFmCQUBrGMOAJDAPAPhAZVlSAA==="} -import { getInstanceFromElement } from '@studiometa/js-toolkit'; -import Component from './Component.js'; - -const componentInstance = getInstanceFromElement(document.body, Component); -``` - -**Parameters** - -- `element` (`HTMLElement`): the target element -- `BaseConstructor` (`BaseConstructor`): the class (constructor) of the component to look for - -**Return value** - -- `null | InstanceType`: `null` if the element has no instance of the given type attached, an instance of the given type otherwise diff --git a/packages/docs/api/helpers/getInstances.md b/packages/docs/api/helpers/getInstances.md deleted file mode 100644 index c9e384004..000000000 --- a/packages/docs/api/helpers/getInstances.md +++ /dev/null @@ -1,25 +0,0 @@ -# getInstances - -Returns all mounted instances of every component. Pass a component constructor as the first parameter to get instances for a specific component only. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"f303ed5a448d93107e63dc0084907f2a58d66242507e69dce397d18f5669d078","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLzzaACSYD1veCMbiIXgAZVqki8xl4jAA1ABGXhXUisCDMKDccxWGx2L61P4A/jwJwuNx4ADitV4bFYvEsEFeNCgvHY/2CgJEtl4428EDA8GemksNK+7BIn341RsArAxSCoXCkWicSoCSScFSGWyuXyhWKpQqVRqdQaTRaKXwMFYOFIcBS30JHOJAQSllYHS6IB6fUQCIArEMRmMJn6AEwzXrfPCO9nMTnLNmrDYgLY7PbXP3+k5nHB4QgkcgzW4eHG2ewAYWl/JGDG6swYiAAbAAOIOjcYDSNzBYeKvWGtyxMCpAIzbbUi7fZIADsOeo53zKJu9DwUvZrLjnNBELQUIk+9Uhm0xmMTh9jYDgaiwc7h270dLW5dw9W01TE6nmab88weY8BbXMWq4eCwHBcHwsZEkCILgpC0KwoiyKFmiGJYhYA54lBzoklQZLuCAVL2LS9KMnKMAsmy0FcqQPJWsiAoiE8wqiiE4ojAI1ayvKkZhEgERRGyqoEIkyRpJkOR5AURQlOUlTVLUzD1DAjTNK0Vo2mQ9rYfGLr+G6HqdPWvSXk2M7tiGo4RtQUa9iAOkJkMSZTOO6bTn6La/ouAHLsBjYgGBDyQQSz7wJI8YYMYjB7LYoIRbBu7hWAkWIUiKKoZi2KYfYDkvnhrgEURNKsHSDJMhRm7UcitG8gxgrMdUrHsZKXG1oEvFKoJsTxKJmriTqUn6rJRoKaaKnmup1q2tpIXUfpaDup6xm+mG/rXsMHahgi1mzI+9mzThCBOSOiDmR+bmZmsXn/pchYrv5ZZ4v2Mq1ueDZIGGrYWXegw2T2/nPYOdZdasZ1ppOGYHAiADMRxelKsB4I99jAA4MAUPivyhSIRxCo1ADkAAChrySazDapJepFPjADcWW4pWrVynjIr4/4KSA9x/iZLT5jmGkvBFSRZXkZR2PIk8xV0lKA7cXA5jrqUlWHbwei5TBNO8ALiXQnzYAC0LJWkeVYtVRAku1QABpztaW5xsu1uY6twIwNtytwmva5CbtoGeVBk0goDyCMcAfHgmQgEcRxAA==="} -import { Base, getInstances } from '@studiometa/js-toolkit'; -import Component from './Component.js'; - -// Get all mounted instances of all components -const instances = getInstances(); // Set - -// Get all mounted instances of the `Component` component -getInstances(Component); // Set -``` - -**Parameters** - -- `ctor` (`undefined | typeof Base`): the class from which the instances should be retrieved - -**Return value** - -- `Set`: all the instances created with the given class diff --git a/packages/docs/api/helpers/importOnInteraction.md b/packages/docs/api/helpers/importOnInteraction.md deleted file mode 100644 index 5de416fea..000000000 --- a/packages/docs/api/helpers/importOnInteraction.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -outline: deep ---- - -# importOnInteraction - -Imports a component when the user interacts with an element. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"1e9e46aefe6ac4a89b98e1461b7405c9fc401edac97dfbe82894574f549128fb","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvdgFssEUmgDyYAJJgapZmIlgAPABVedGmChxeAIS4wAwpLhpSgsQt4BeKzfthHz16QAfIz8YIi8jHzugbwACqQQMuxwMIa8AD68wAA6Urz5sPzMgqxo4QYA3LkAvoEUvGDMMjBKpADKMKwwAa0Aol3NGuF+7GAA5hm8ABIGALIAMv0wg2iTMwtLK8gAuvUwJBpww06jE5kj4zv1WMykMBoA/OHWKdzh8YnJqQaBubLyimkcgUyjUGjI2nEkkoICgEBECEQIFUwMBzF4IkS8jA91Wkl4zCko00kN0ADoYWhmGNEchkNRllhWMwaDDgC87A4nC40ApqrxkAZ3ByfH4eQptiBdvSbloZDDQvleAZ8DAgQDVkJRFCwBTpSBZU0YY1mq0Ol0eqRNrilSq1Sa1W4UhbeaQBG40KqMVjJLi9RQZbcjVR9riLPk7cYDmgLLzeBxHPdeHGU6R2GMxmRk17/iD/YG5TDZTbI8WNN7gTiNPmQHc0IJSGBKGASqx9RwwABrGH4NBoLBHAD0g4AVnAALS8iCsTvsNBkxyCKASZpUsmwIiD5hYdiD1WsHCkOCD3OKFTqEk6SRk3syVhS3YgRy3BiIACcVC6409SAAjB/qFuTNXxAU9QQvCErybT9RlwRAAAYqBEfAgzEMgkDfaoKHQbA4IIYh0KoGh6CYNhOB4dUQXPcEtCgvRCQwYJQnCSIPBiD4khSeiwEY+oHTNTpuldPoBlxY403GNY5kWUTy0ydYZOWXErijMNxNOSYLjGFSyzQJ4vFed4Ek41IGN+MAwMos8wUvHUYThBE8BRDUCQrbEbXxQlpBo0lr0palaXpGg5GZVkqHZbwuX8V1+UFYVIt8bkAklfVDXlKhFQjHNUU1YQoJrNLjSaFp2kEy1rXLLL7WK3gnTK113TdT01UxSs/SlAMDSDdKQFDQ5bS9PqY2TCB42SUwRsmk4MyzZqrPnDqC2DLq7nLUtbhtVr3OrRbaxgetG2bVt21GbsqF7fsh1HCcpxnOcF3rZdEn25h132Lcdz3TpD2PMDqNs8lb3vbZH2fRQkAANgAZk/e4xh/RB/yIoD9rwP6bMguyYJxJAACYkJQ2jNCQeDqkfTFYDRnKsnm/7Md0Xh+X4YzeAAcgAAUXJ7V2Ya7JwgadZzQVmqjAP4crpondEYXJ8lY6J5sYVmyUHLbfUOQd7Da6sx1Z7gKFltmte24WDbyVmRA4ERO1Zs3uAqGEeaQUATHuOBdDwMcQGqaogA=="} -import { importOnInteraction } from '@studiometa/js-toolkit'; - -importOnInteraction( - () => import('./components/Component.js'), - 'Component', - 'click', -); -``` - -**Parameters** - -- `importFn` (`() => Promise`): the function to import components -- `selector` (`string`): the name of the component or a CSS selector, the same logic as [components resolution](/api/#config-components) will be used -- `events` (`string|string[]`): one or many events which should trigger the import -- `parent` (`Base`): the parent Base instance used to query the `selector`, if not specified `selector` will be searched in the whole document. - -**Return value** - -- `Promise`: a promise resolving to the the component's class - -## Examples - -Import the class when clicking on the root element of the component: - -```js {1,7-8} twoslash -// @twoslash-cache: {"v":1,"hash":"f257f54df1d6e16bf2af4cda5056a6a9da1c953464f8b6fc0e702c6ef6a0c946","data":"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"} -import { Base, importOnInteraction } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - Component: (app) => - importOnInteraction( - () => import('./components/Component.js'), - 'Component', - 'click', - app, - ), - }, - }; -} -``` - -Import the class when clicking on the `#import-component-trigger` element which can be anywhere in the DOM: - -```js {1,7-12} twoslash -// @twoslash-cache: {"v":1,"hash":"0c961469966abe1771c8408f86d532c6e56bf9d0a51fcd7a108e5e0da0f2b2e1","data":"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"} -import { Base, importOnInteraction } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - Component: () => - importOnInteraction( - () => import('./components/Component.js'), - '#import-component-trigger', - 'click', - ), - }, - }; -} -``` - -Import the class when clicking on the app's `btn` ref: - -```js {1,7-8} twoslash -// @twoslash-cache: {"v":1,"hash":"48a28383efea6bf12c462cee14e227981447b2659d45949c623599dcc2729883","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLxWNnYA8mAASTA+12aA+Mjk9BGSgcMAAwhAwKVSGU9rZeHovAikWgUWjSMZGE8wIheIw+DpjLxDJZ2KoIQAfXjAcy8Nm8WBPZhlVhoUnSADc5iOxgovDAzBqv1IAGUYMN8dKAKLDGrA0nI9ijXhMgAS0gAsgAZFUwNX2PWGk2qkZoZBdOQkYFwDW4rUhHW8TWje1irC9W0AflJXm4pJpdKk0jMFmstns33j/yBIPeiKcLjceABcbsvGYAmqNjAtt4iPzny1qbBiMCM1C4UiNGsQhoTmAWMRyNRuVIR14yGkOk7OLxvfaHQokX9pElTmJ7Ok+G8ibzLzeNbAgS6052licEqlsvlMEVpFN5sXy/Fku86NUCt7z3R428/CLiNt26nIBnc6oMBOmgIhsku3iAbaIi5LwHClCMvDQYhpDsCE8ykAh16rsUk67rO+5UDOpZgbwhHAoWcYlsC36RKQtRlKQYCUGAPKsDuURanEVAJEkLppJkOR5AURQlOUlTVLUzD1IBTQtCky6sDgpBwCkWHJsCZCgh8/gJJYrAdF0IA9H0iAAIwAKxDCMYwTKZgzUL08wMB4qmAups5poxQxaqsGwgFsOx7NcplmScZw4HghAkOQMy3B4gjCLwACCWBYE4RlOQA7BZURWeMSAAMz1nMCweMlqVeSWSAAEybNs7n7EgABsoXUOcEVXNF1CxSALAcFwfDxX4sIQvI0LKAYmjaBisKGNoMZYbCGauO4ngSD4wh1vZYRIBE7GxPEiTJHx2S5PkhTFKUFRVDUdQNDJrT6d0sxOQAHBllmjHliDTPZxVOatjgVasNV+XVoJBSZL0tZg4UeJF1wxfQTBYJNZCYHwZX+O+YBPChpIsp87KHjArrIaMQqE2y74UZB+OsuyDMIjT6pks0WCkswYAYBSVIRvSnMYMYFMM0cwvsrRTwul6bo+u0FNHEtWYeNiuMhJtwTbSgkTRJxBCHbxGQnYJ50iVd4m3dJzStNjqv0cwm7aWgumPYZz1ICZayFTln02Y1RWOXgNsocs3kFbVAUNYc0NtXDHU3EjHiMCjWho9zN41KT7ppW7pmQx91lTP7JXgLeIeVd94f1UFkzR7DlxRfH/1J6jdhp9Txa08y9NskzHcsywKUc1zPPUpotL81zQvCtnvROSZ+XZcMPvu75swB3FH6UcBZerNl/lVwcNenK1dfw51NAJz1yeKejvC95+/ds0PaeUqP1SRpIAvGDPxnmYvuU2TsmvYu98t47yapXcGBxmrHxhhcM+jdkZ7lqGQPgT8KwYB/nPRq71vYF0QF7YB/02bgMQH7UGEcIZQ1gTHeuCMuqX16g8PgLkUwaQ8p/SeRISRkhHnzKQX8xTE2lHKR8thlQ2hZt6D0lpjQXlLLI60ZpbS+kdJ3aRnppGqNImgYMsIwxv3HgIye5gFqsLcppdMVBMwrRzD8ewBZ24P3sOWTmXwLEeXVg2HaTYzRYFbLgKgHYJDYm7Pifsg5hwhK7LiHstgJxsT/PhEAC5QKYVzPYdcnicK/j3AeW8IiTxnnkWRNJ3hiZlnQg+U8T4ngvmvE4re1Fcl4ScBBZ0V5wJASghAGCdIFAIV6UhFCaEMIrgyc0pJTgdG8GIjMxpX4cm0XKAxJiLE2I6wOjxVIhsBJnWEpdMSN1JJ3StnJeUillLmOrFpHSelOhPVnu7F6Xsl74JMkAhyxdrnsM3KQ3B+8oFIGoWFeBcdEZNySSg0gaDB4YKwdVHB+cvqEK+cQlKpC7KAsCgcD2tcwUNwhXgAWCLEBVQyiZZFNlspELwAAEglggIGAxIE4vdkfUF7VCUMOIVzUl5LcFvJRUXf6AAjNAnk9qrCxWDNlZK1j4q5fQi+kKW630ZZnWWpL8pVVeQAwuv114gEZaQ+erLI41wMu+WAeAFrAFhGKH59UPi8H7E8MevAADkAABQ510JK7NOkJNAnqKbmEGiIMqkIFAwi8F3QmPQwT8ELDjFC00CYM2JqST1ZVPUUG7uRPuwE6aU3ZKA20pIB5YB5gWhmTrLFgEYLWhmvCMRUiwowT1/gUgLOdCkctVFMieu4Pm0tLb8wpX8AymAkt/DirAKO8dDNPWCHYPwGIebm1shHQWk4BaNUDk9fOz1XR6ai2nlQY5SBQCjSRB8PAmQQBHCOEAA=="} -import { Base, importOnInteraction } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - Component: (app) => - importOnInteraction( - () => import('./components/Component.js'), - app.$refs.btn, - 'click', - ), - }, - refs: ['btn'], - }; -} -``` diff --git a/packages/docs/api/helpers/importOnMediaQuery.md b/packages/docs/api/helpers/importOnMediaQuery.md deleted file mode 100644 index 6d8fc853d..000000000 --- a/packages/docs/api/helpers/importOnMediaQuery.md +++ /dev/null @@ -1,45 +0,0 @@ -# importOnMediaQuery - -Imports components according to a specified [media query](https://developer.mozilla.org/en-US/docs/Web/CSS/@media#media_features). - -## Usage - -```js {6} twoslash -// @twoslash-cache: {"v":1,"hash":"7c63cfc654c6a29339e88f1231bbd0bc527a08a6bea84bbe1c50d8253e5f87ba","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvdgFssEUmgDyYALIwonAIqCyGADwAVXnRpgocXgCEuMAMKS4aUoLELeAXmu2HYJy7dSAD5GfjBEXkY+DyDeAAVSCBl2OBgjXgAfXmAAHSleAth+ZkFWNAjDAG48gF8gil4ZDU4I/3YwAHNuCISklLTDILzZeUVpOQVlNWbmHT1KECgIEQREEABJCbHmXhEk+TAYMDReAHd8I94O9hIpJs0dgEddUgxpS2ddADoFtGYO1bIZDUGByVjMGgLYA2VK+fyuNAKGq8QwgAC6FGBWGYpGYMgWYQKKIu41GJyEonEkh+GKxOLxC3unCJhhJTKeLzeYDxMF4zHMvCIbF0kVSvPwaDQWDgiAA9LLYCRWBAcKQvjIIAAvdiscFfBQdWVHAC0AFUAMoK5ZwWUAdRgACNZXZzZaAALsgDE7IA+vwYBDBKR4Nx0ZiQMG0EGwJQwKVWLSQBwwABrBYSqUy+UAKzgxsREFYKfYaC+TkEmiSMD+X0VsuYWHYsourFVNpGkxU6gec1eXwlMlY6IxICcOIYiAAnFRWEcOmh8EgAIwADiof1IHWreA7ii7M17GAWydwiAADFQRPh6WIyEhJzUKOhsKeCMQ7+vTEw2JweKTO9MPacvo/IYCEYQRFEnixL0ySpCBYBgQ07KtM47RdD0iRwWkoFDGAu4nAR+5AfMVBLCseCbGSfK7PskhHCc5yXNctyNDMvDPHo7y8J8MA/Ou/yAsCNBghCuBUNCPiOJ8gTIqiibYri+JUISBSsryBECMIYgSGANLhopDJUOyLJsuxnGvLw3JNHyApCqwIqMGKvAZtKcoKjASoqmQ6pajqeoGkaYBmpa5E2vaTouu6Xq+v6gbBjwYbApG0axvGibJmmVCuVmsq5vmECFsWpblpWTQ1nWDZNi2baykRgHaJy/ZoIOw5UGOijLkuACsM5zguy5rtQOJbhOID1d2jWkUm7SngAzJe164re5DnjUI57LAO5bCcwD/nuDWzJyvDIvwWG8AA5G6pUSOVzB5XmBZFiWF3VGAeTyrwVGTLwDgTIcxxfLm0j8DxJKKuwIgaZY7S8GSuIll8ww7cRU2vIweQFFBMT7WgjAXV8sp7P9DE2n9BwMUDcAXdwFCY5djAKOwDEQrpETw8wJbcBddNgNwlSMtWzBIKAphHHAul4LmIA1DUQA="} -import { importOnMediaQuery } from '@studiometa/js-toolkit'; - -// Import Component.js if the device is in portrait. -importOnMediaQuery( - () => import('./components/Component.js'), - '(orientation: portrait)', -); -``` - -**Parameters** - -- `importFn` (`() => Promise`): the function to import components -- `media` (`string`): a [media query](https://developer.mozilla.org/en-US/docs/Web/CSS/@media#media_features) - -**Return value** - -- `Promise`: a promise resolving to the the component's class - -## Example - -```js {1,7-8} twoslash -// @twoslash-cache: {"v":1,"hash":"bece8456e784c1f1becb770eb9e14169a152665fe5e14c0e60ae2b4016894452","data":"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"} -import { Base, importOnMediaQuery } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - Component: () => - importOnMediaQuery( - () => import('./components/Component.js'), - '(orientation: portrait)', - ), - }, - }; -} -``` diff --git a/packages/docs/api/helpers/importWhenIdle.md b/packages/docs/api/helpers/importWhenIdle.md deleted file mode 100644 index d92a20470..000000000 --- a/packages/docs/api/helpers/importWhenIdle.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -outline: deep ---- - -# importWhenIdle - -Imports components when the [`requestIdleCallback`](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback) function runs. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"d18da01146902390cd09353fb7a97429bc977027d1535a5811b8e3774d3f9580","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvdgFssEUmgDq+GGACSUVjAA8AFV50aYKHF4AhLjADCkuGlKCxC3gF4LV22HuPnpAHyM/GCIvIx8rv68AAqkEDLscLoGAD68wAA6Urw5sPzMgqxooXoA3FkAvv4U6bziMjAQgmi8FQD8oepyCsqqGlowAPJY4nbcobHxicn+WbLyitLdiipqmtqUIFAQIgiIIF0LLcy8IvHyYGotAO59vIJJpNJm7AMAdJtozADme8jI1BgclYzBom2AliSXh8TjQCgqvD0IAAuhQAVhmKRmDJNsEcojVEsjgJhGIJGAPqj0ZjsZsICNyWY9IT6jA6hBeNdmOwWgAjGD8BRshzsb7fMjsMDfOqEkRsVi85giADW0n4vEuJCer20lLRIFIMDQglIYEoYEKrCpIA4YGVm3waDQWDgiAA9G6AFZwAC0cIgrGVPLe9kEUAkDS+b1gRDdzCw7DdqlYOFIcDd8x6q36usdMlYKNRIHsmIYiAAnFRtFK0PgkABGAAsVC+pHFZZAmZWfXWuCrktwiAADFQRPgaWIyEhyxUKOhsIOCMQpy2jEw2JweESsz2BjpmGAMIFgqFwm4opMEkl94fqrVWU0Wu1OstemsBsNRt5xjE4lfdAeR5zK+27du+GxUNsux4IcPS8CcZzdJcYA3HcDxkM80jvJ8Px/ACNDAqCfYgBCnh2A4sLwoiKL6hiWI4lQeI5MybJdi0QiiF+erUvRdIMnYBLCrIwoclyPK8PygqGnUpCiuKslSjKbJyqwCpKqq7DqpqGE6jA3EGkaJpmhQFqqdatr2lQjrOq6Hren6EABkGaAhsa4bxEazDRjAsbxomyapumbHZr2bx5gWyJFiWihIAArAAHFWajfLWDbNtQmLtngwW7hBNoDkgABMo7jlik7kMOs7zjgeCEFqnxrvsjBYHEqaYHwD7NB0GqCDI/JPGkwh5AOUCbNFZb1vWiU2slqWIAA7C2mVGngnUMP2lxFSVE40BVABsQ4VEWZywNlIHAKBb45myCL8H+vAAOQAAKhu5kbMF6vr+oGPIPeUYDAUcIUDIwZ6RJdjAPW8bqIRcVzprYSFXG83oPdwNQXWtoT1kOuOtNwpSbO9SCgEYahwOSeDeiAFQVEAA=="} -import { importWhenIdle } from '@studiometa/js-toolkit'; - -importWhenIdle(() => import('./components/Component.js'), { timeout: 1000 }); -``` - -**Parameters** - -- `importFn` (`() => Promise`): the function to import components -- `options` (`{ timeout?: number }`): the time to wait in milliseconds before forcing the import to be made, defaults to `1` - -**Return value** - -- `Promise`: a promise resolving to the the component's class - -## Example - -```js {1,7} twoslash -// @twoslash-cache: {"v":1,"hash":"5703da7b3aab69d4c3c97e155c36d8b75ad16573809e1be471a1ab9d393a698b","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLxWNnYA6vgjACSUGGMjk9BGSgcMAAwhAwKVSGU9rZeHovHCEWgkSjSMZGE8wIheIw+DpjLxDJZ2KowQAfXjAcy8Fm8WBPZhlVhoYnSADc5iOxgojN4aCsMAgZXsRwA/MTAdZbGh/kCQTAAPJYcXwnjEqk0qTSMwWJV2L5mlUAsDA4ZOFxuPCKn72ZgCao2MAjewAd2tvDKqlIXxE7HVgRmoXCkRo1iENCcwAxuuxyNypCOvGkHQokSwO0sTkJrOkAItLuer3e8MCXTzBacWh1CKzZfFNTFEF4PuYRV4ACMYE9bN5sewQvNSOxRmKy/w2Kx+7sYl8nrwvSRg2HhrXcyBSLUyqQwJQwFzWHWotO4lQEkk4KkMtlcvlCsVShUqjU6g0mi0UgCrA4KQcApN8yqqja4YJJYrAdF0IA9H0iAAIwAKxDCMYwTKh0zUL08wMB44F/Natq4EM06rBsIBbDsezXKhaEnGcOB4IQm43PQeCCMIvAAIJYFgThIURADsNHDKM4xIAAzJGcwLB4gnCZRXpIAATJs2ykLs+xIAAbCx1DnOxVzkDMtweCwHBcHwvF+NCYLyJCygGJo2hotChjaCaJH2EsVAOu4ngSD4wgRvhYRIBEV6xPEiTJGkmQ5HkBRFCU5SVNUtTMPUMCNM0rTwd0sxEQAHFpURYTJiB4bMhGLBIyxUZp2n0fpqHlcZmBsR4HHXJZ3HWVgHlkJgfAqf4/Dwk847EkynysmAzA1MSiLTiEApLSyM1Kl6YBoA+jLMqyZ1wvt3rEqSaIUgatLMGAGDGNtZ1HNtRz2q4IWYnNISRcE0UoJE0Q3gQiUPslz5pW+mWfjlP4FX+rQzWAf1Hswzb+DBcGdKVvREf05WYdJOEGQpjUeKjf0tepiDybROl6YxxynCZfWXJxQ1ESAjCjVo40YHwK1rbwG2jCJZVIChKEM1J2FTBTSngKtFFxaseF0bpDEHJMPWmf15lcTzfNjXYQvupdh3HYt50evCV0kmSd2aNSD1PS9gqSwT0uyZJNU4ShNENcre2et6CBqasGGMx1jF62zvUXANFnUFZvP88BE28Bd4eHddzuUq7hqSI9z3e8h6H+6TAxKzzucO4dtOrOTsfa51RmJwbnODWnw28/cdnlhBZHqqXHsEkSTu3UX1Ql2Xwqiu2krSrwcoKpakHkVqzZ6rPbtSAv5j+cPpFqnaQXfU6lq8G6YeN76/qBmQIZfOGQRRjFMYwHGmNq0mEhMSIjTLYTM2ZLz5l0oWKgxYWSlm8CfF4bwsY5nrFAxs2oPgiHgWKCUnZuy9nsIOYcB4xRTgnGQTas5vDzlYIuZcq51wFRftuGAu5IgHnKMeU855LygwSveR8KUXzpXfFlL8uV8qFX/IBYCoF/Jb2gmgWCJVEJS1QmJGO8taooXqgRZWCjR4X3VkgMS7V26MW6ghGasA8An2ANCEUhjz7eEzE8V2vAADkAABD82VvzMCfKlV8RRPHbXMA5EQKlwQKChF4E6S0ejin4O6NG44vK22WqrYkniVKeIoKdXa9sDpHQWoU1kDcSkF1uuUs6zioLDEYDdckp80CME8f4FI98SmgUqd6fwmRPHcG4AUnaa9Rksnel7KgASkCgBcgiD4eBMggCOEcIAA==="} -import { Base, importWhenIdle } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - Component: () => - importWhenIdle(() => import('./components/Component.js')), - }, - }; -} -``` diff --git a/packages/docs/api/helpers/importWhenPrefersMotion.md b/packages/docs/api/helpers/importWhenPrefersMotion.md deleted file mode 100644 index 8c30ac944..000000000 --- a/packages/docs/api/helpers/importWhenPrefersMotion.md +++ /dev/null @@ -1,38 +0,0 @@ -# importWhenPrefersMotion - -Imports components when the user accepts motion. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"ec65e2a9bd5d5efde9786b8aab7990655f850aedf1c0ec98b878b85b61b6621f","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvdgFssEUmgDq+GGAAKpGPzJwAshHGSAPABVedGmChxeAIS4wAwpLhpSgsQt4Bee45cwNw8vUgA+Rn4wRF5GPh8w3k0IGXY4GDNeAB9eYAAdKV4i2H5mQVY0GNMAbgKAXzDuGOTU9LMwgtl5RWk5BWVVDS0dUn1DCTBKECgIEQREEABJPp7mXhEU+TA1NGl+XkF00l4Z+F5IXa0oTxheGXHJADoptGYAc3nkZGoYOVZmGhTYAOdKBYKeNAKOq8UwgAC6FG+WGYpGYMimUXhiJAWjQglIkwoYHKrAR3w4YAA1lN8Gg0Fg4IgAPRMgBWcAAtJCIKxKew0I83IIoBIZDBXo9YEQmcwsOwmapWDhRkyuv0VGpNNpdAYjGBHrSZKx4QiQG4UQxEABOKisNRvND4JAAJgAzFRXqQ3uK8GrFBqhtrRrqJlMKbhEAAGKgifAo5hiMhIK11CjobARgjEJMeyxMNicHi9boDTXDHUPMDGZhgDARKIxOK+RItNIZGt1ppJUgpNvV2sdMB+3bDgNakZjPVTGZzPDLEu8NYbPrbMAj/aHMgnCBnC68K43O6V54e96fb40P4A3BUYEBVzuCFQmFYpHx9FUTFknHi/GE4msKS2IUtSVC0vSjIsuyXIQDyfICkKIopOKzCSjA0qyvKirKnAqorKWgYTiGTyGsacKmuaihIAAjNRAActr2o6LrutQKLepaICjoM44VlOtrsNsSCsbG8aJuQUZ1KaGywL6+G5MW6o8eWwaVrw0L8D2Mi8AA5AAAohoooWynLcry/I6bUYAFCyvDzv0vAuCuOyPOyey8I6tybscCYiDAWBoLY9x6o8nT4WOKmThMjBNgkimKIwOmPEyy5bDsuFOWla6uXAOncNw1RTGKrxIKAlhqHAoYLOyIB1HUQA="} -import { importWhenPrefersMotion } from '@studiometa/js-toolkit'; - -// Import Component.js if the user accepts motion. -importWhenPrefersMotion(() => import('./components/Component.js')); -``` - -**Parameters** - -- `importFn` (`() => Promise`): the function to import components - -**Return value** - -- `Promise`: a promise resolving to the the component's class - -## Example - -```js {1,7} twoslash -// @twoslash-cache: {"v":1,"hash":"ba92db18092e9f88e161c5e0af0baf221c8b20e80d12a889295440a1094cefb1","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLxWNnYA6vgjDQwJ5kOAAWQgaA+Mjk9BGSgcMAAwhAwKVSGU9rZeHovCi0WgMVjSMZGE8wIheIw+DpjLxDJZ2KoYQAfXjAcy8Lm8WBPZhlVhoSnSADc5iOxm4lIZTKk0jMFmstns32V/0BpGBoIhUNRThcbjwAEklXZeMwBNUbGARiqnrwyqpSDyIPBeJB7JqoJjvJZIR9AjNQuFIjRrEIaE5gHjUejMblSEdeNIOhRIlgdpYnOTU5FNeVSGBKGABawupFonEqAkknBUhlsrl8oViqUKlUanUGk0WikAawcKQ4ClVX8AWAgSChzqAwlLKwOl0QD0+ogAIwAViGIzGE0QACYAMxBuYLDyjtDqieaqfg/16obsG1IDYgLY7PbXdcbk5nHB4QgSHIGZbg8QRhF4ABBLAsCcFcGEQAB2QYoh3cYkGPahenmBCQGg2DH2fA9Nm2Uhdn2JAADZf2oc4AKuYDqFAkAWA4Lg+HAvxERheR4WUAxNG0HFEUMbQFQvRF9VcdxPAkHxhEDLCwiQCIoifKsCESZI0kyHI8gKIoSnKSpqlqZh6hgRpmlaRdulmBD+jXbdRnQxBpiw09cKWQjVn3EiPwo9cAA4aMwf8PEA64QPoJgsEEshMD4fD/H4VEnnYEJKQ5T5uTAZgakpdEnxCMUcq5VKlRtMA0DrdlOW5BqUUq21KWpHE6RlZlmDADBjFKhqjlKo4pMNDx8XSkJFOCZSUArdT4i0usdMbfSWyM9tTK7Sye1aVKwAmsoyN1MB/DnBdOjs3oELXNZEOc3cqJPHC8D2iblifVZMPfMjPwOY5Tlo8LLiAm4Yo8Rg4q0BKMD4PKCt4IrRjg+ykDXfc/NQly93c2Zno8OHcB8qZ/J+wLJlCuiIoY0HcIh+K7Bhy1muq2rssaq1URaqkaQ6zRGS6nq+vFZGrtRw8UOGLHUdfXGzzfDmqpq96iK3N9SPIr9yYBsKLkixiaDBljIcHRLeCa60uba2l6T52VJG63qRdXTcJbQvcUNl3Dzc56rldWSiSY1g5qO1yngaipjDdYh4+AvK9J21e8wHtwWyQpbn2pt6o7YdyVpVtgXevMCS4/HBPpyTkaZJNH57AtCqLeqr57UdMgXTdD1eC9H1eD9Y6puDFTQxgcNmEjKhowkfE42JJMU3LEAMzIrMqBzBf80OosKBLVgyzTNTYgW2t610psDNbYyOzMiyrN7ftB2HUuNS1Cv+7O2zlxR4L3Mlh6D0wz2eAn7XhfneY6fskB3TVgFL8IUlypVgEA009hgCIgoF8ZB8cbyJ2OrwJMTw+a8AAOQAAE2wmU7MwBselmxFCIaVcwnERD4VhAoBEXg6o5R6FCfglp9oZWEmzXK+UYCUiIfhIhFB6rlQVraVm0juTe0Vq1HmCiGrAPLmAj4jArZ0gvIwIh/gUgNx9jVFISjbT+EyEQ7g3ApFlTwfYrkg1hZUEoUgUAvE0QfDwJkEARwjhAA"} -import { Base, importWhenPrefersMotion } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - Component: () => - importWhenPrefersMotion(() => import('./components/Component.js')), - }, - }; -} -``` diff --git a/packages/docs/api/helpers/importWhenVisible.md b/packages/docs/api/helpers/importWhenVisible.md deleted file mode 100644 index f384c97b4..000000000 --- a/packages/docs/api/helpers/importWhenVisible.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -outline: deep ---- - -# importWhenVisible - -Imports a component when an element is visible. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"376982f9dd06ef328b6177f9db87eb9e59d23cd8ab30ad62acb4c83dce361501","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvdgFssEUmgDq+GGABq7OOwBGrGAB4AKrzo0wUOLwBCXGAGFJcNKUFiFvALw27jsM9d3UgA+Rn4wRF5GPk9g3gAFUggZLUMTAB9eYAAdKV582H5mQVY0SKMAblyAX2CKXjBmGRgAeVIAZRh9ILaAUX1msDLeAPYwAHNeTIAJIwBZABl+mEG0Kd5ZxeXV5ABdeqxmUjU0AH5I2zgYeogdK9ISUhascSdz3gBJIbIrsQkwFp3MiPL7sNDcSKJZKpYzBXKyeSKaRyBTKVQaLS6fSUEBQCAiBCIEAfFFI5i8ETJeRgE68ADu6Okay0vCImL0MAAdDi0MxxoTkMhqCssKxmDQccBLg4nC43GgFNVeEYQPshYdSE0ceF8srVMjEWshKJXmBuWqQBqtVRGs02p1ugqnqRtrT8kZ9baYLwPFdHR5+B40PrKSiaUNzRR1UdrZajrSPd6NbTQ9STpHo5qZDjbvdHs9TVYC/8rIHSLxg96AAZfGikX6mwF5shV6T+XmiLmqqMgY5oQSkMCUMAlVgWjhgADWOPwaDQWDgiAA9EuAFZwAC0CogrEnYM5zkEUAkzV5nNgRCXzCw7CXqlYOHrS4RqJUak02g5nNnMlYqv2IDOEcDCIAAnFQ+gTMGSAAIwAOxULypDjDAIEgC+ihvhin7YhBYy4IgAAMVAiPgMZiGQSCgdUFDoNgBEEMQlGIWYTBsJwPAGq+6IflihjMGAGChOEkTRF4cRQikVwGAJQn1F69pdDAPQugMJyRKMEzrJsSxqUM2nzLpKwnHsBzxkM7zSjcQIPGQxZvJEtY/MpjY2SCYBghCCRJFJ/GCXCHmksyQVYbxHI4niBJ4CShq8OSqaSLSDJqEy0hWGyOFdohfICkKNByGKEpUFKviyoETpKiqFpWtmVA6u6+oYUawh/JIGZxlmOIKR0Skqa6+kNd6Xo+uWfouQGQYhlSiURt2maxsm+mJrwi1rAl4ZoO1NU5m5dkvCWvD2f4AiTdWTn1i5/xNsCLZtkBnbtX2A5DhQI6sGOPYTtOVCzvOi4ruuW4QDue6bYex7JKhzDnjAl7Xre96PnAz4hTx7L6N+aC/v+VBAYoSAAGwwRBajjNBiDwdlyGoXgTWhejuB4TSSAAEwkWRmoUeQRHVABlKwLTQVZFxmFo5lvBKvwPm8AA5AAAuDJ5Q2um7bruYIy1UYDwqj74M4wYmxCLaCMDLnJLutJzI44YbpuuMvcPUMs22mQwOxUOKnswSCgGYajaJIeDriA1TVEAA==="} -import { importWhenVisible } from '@studiometa/js-toolkit'; - -importWhenVisible(() => import('./components/Component.js'), 'Component'); -``` - -**Parameters** - -- `importFn` (`() => Promise`): the function to import components -- `selector` (`string`): the name of the component or a CSS selector, the same logic as [components resolution](#config-components) will be used -- `parent` (`Base?`): the parent Base instance used to query the `selector`, if not specified `selector` will be searched in the whole document. -- `observerOptions` ([`IntersectionObserverInit?`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/IntersectionObserver)): options for the `IntersectionObserver` instance - -**Return value** - -- `Promise`: a promise resolving to the the component's class - -## Examples - -Import the class when the root element of the component is visible: - -```js {1,7-8} twoslash -// @twoslash-cache: {"v":1,"hash":"840591b649aaf3e9e3b1bc42025e634288009bb409ec451f44f1fafab91dd56d","data":"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="} -import { Base, importWhenVisible } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - Component: (app) => - importWhenVisible( - () => import('./components/Component.js'), - 'Component', - app, - ), - }, - }; -} -``` - -Import the class when the `#import-component-trigger` element, which can be anywhere in the DOM, is visible: - -```js {1,7-8} twoslash -// @twoslash-cache: {"v":1,"hash":"d95382495fbe500769403a89346021b136a21e61d5eb695fe4384dafca6aaf69","data":"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"} -import { Base, importWhenVisible } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - Component: () => - importWhenVisible( - () => import('./components/Component.js'), - '#import-component-trigger', - ), - }, - }; -} -``` - -Import the class when the app's `btn` ref is visible: - -```js {1,8-9} twoslash -// @twoslash-cache: {"v":1,"hash":"34505b3d91b87433e0cd62fbaf638d77368f59956543af143f1f6b4156f05373","data":"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"} -import { Base, importWhenVisible } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - refs: ['btn'], - components: { - Component: (app) => - importWhenVisible( - () => import('./components/Component.js'), - app.$refs.btn, - ), - }, - }; -} -``` diff --git a/packages/docs/api/helpers/index.md b/packages/docs/api/helpers/index.md deleted file mode 100644 index cdfd3fe3e..000000000 --- a/packages/docs/api/helpers/index.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -sidebar: true ---- - -# Helpers - -The following helper functions can be used to achieve advanced setup of your application. For practical usage, see the [Getting Started guide](/guide/) and [Lazy imports](/guide/going-further/lazy-imports.html) for lazy import helpers. - -## Setup helpers - -The recommended way to register and mount components: - -- [registerComponent](./registerComponent.html) — register and mount components independently (recommended) -- [registerComponents](./registerComponents.html) — register and mount several components at once -- [defineFeatures](./defineFeatures.html) — configure global features (breakpoints, attributes, prefix) -- [createApp](./createApp.html) — bootstrap a root App class (when you need a central app instance) - -## Instance helpers - -Some helpers can be used to work with instances. - -- [getClosestParent](./getClosestParent.html) -- [getDirectChildren](./getDirectChildren.html) -- [getInstanceFromElement](./getInstanceFromElement.html) -- [getInstances](./getInstances.html) -- [isDirectChild](./isDirectChild.html) - -## Query helpers - -The following helpers let you find component instances by name, CSS selector, and state — without relying on parent/children relationships. - -- [queryComponent / queryComponentAll](./queryComponent.html) -- [closestComponent](./closestComponent.html) - -## Lazy import helpers - -Some components might not need to be imported and instantiated immediately on page load. The following functions let you define when to import these components. - -- [importOnInteraction](./importOnInteraction.html) -- [importWhenIdle](./importWhenIdle.html) -- [importWhenVisible](./importWhenVisible.html) -- [importOnMediaQuery](./importOnMediaQuery.html) -- [importWhenPrefersMotion](./importWhenPrefersMotion.html) - -## Debug helpers - -- [logTree](./logTree.html) — log the component tree to the console diff --git a/packages/docs/api/helpers/isDirectChild.md b/packages/docs/api/helpers/isDirectChild.md deleted file mode 100644 index 50d481125..000000000 --- a/packages/docs/api/helpers/isDirectChild.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -outline: deep ---- - -# isDirectChild - -Tests whether a child component instance is a direct descendant of the given parent instance. It helps when working with nested components that declare themselves as children. - -## Usage - -```js {1,9,14} twoslash -// @twoslash-cache: {"v":1,"hash":"b6ac9a2c6b6b5510651f91e58012094659e5edbc4a5b5c9212866a7f1039956b","data":"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"} -import { Base, isDirectChild } from '@studiometa/js-toolkit'; -import Child from './Child.js'; - -class Parent extends Base { - static config = { - name: 'Parent', - components: { - Child, - Parent, // Useful for recursive components only - }, - }; - - onChildClick({ target, event }) { - if (isDirectChild(this, 'Parent', 'Child', target)) { - event.preventDefault(); - } - } -} -``` - -**Parameters** - -- `parentInstance` (`Base`): the parent instance. -- `parentName` (`string`): the name of the recursive parent as specified in the `config.components` object. -- `childName` (`string`): the name of the child component as specified in the `config.components` object. -- `childInstance` (`Base`): the child instance. - -**Return value** - -- `boolean`: `true` if the given child instance is a direct descendant of the given parent instance. diff --git a/packages/docs/api/helpers/logTree.md b/packages/docs/api/helpers/logTree.md deleted file mode 100644 index d5a1ba37a..000000000 --- a/packages/docs/api/helpers/logTree.md +++ /dev/null @@ -1,43 +0,0 @@ -# logTree - -Logs the component tree to the browser console starting from a given instance. Uses the global instance registry and DOM containment to build the tree — does **not** rely on the deprecated `$children` API. - -Components with children are displayed as collapsed groups. Each entry shows: - -- **●** for mounted instances, **○** for unmounted -- The instance `$id` -- A reference to the DOM element - -## Usage - -### From the console (zero config) - -When using `createApp`, a `$logTree()` function is automatically registered on `globalThis` in development mode. Just open your browser console and type: - -```js -$logTree(); -``` - -### Programmatic usage - -```js -import { logTree } from '@studiometa/js-toolkit'; - -// From any component -logTree(this); -``` - -```js -import { createApp, logTree } from '@studiometa/js-toolkit'; - -const useApp = createApp(App); -useApp().then((app) => logTree(app)); -``` - -### Parameters - -- `instance` (`Base`): The root component instance to log the tree from. - -### Return value - -- `void`: Logs to the console, does not return a value. diff --git a/packages/docs/api/helpers/queryComponent.md b/packages/docs/api/helpers/queryComponent.md deleted file mode 100644 index c3e14c25b..000000000 --- a/packages/docs/api/helpers/queryComponent.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -outline: deep ---- - -# queryComponent - -Returns the first instance of a component matching a given query. `queryComponentAll` returns all matching instances. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"ec5cdc11f21bc5719982a5a5219a4cfc620dd1fb2fe083119ff66584916f42e9","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAI6CyGAMIQAtlkkwwaADwAVXnRpgocXgCEuMXgF4zFrebgwACqQhY4APg+NZ8xLzg0UnYwAHMKXjdxSTgAfn8ARTlSDAB5LGiwHn89AB9eYVh+EJgoAB0wdlUIUjQZZMUVNTANBiooCBEERBAAcRg6tHxLYtJA3hDA5lFLCH5eESb1TV4Ad3Yh3iHLUPYSKV8UgDpKECnapABOKlYNUKGkAEYAFio0ZlJQgbxDxuqWzSnDgtJAABioInwH2YYjIVwAvhR0NhcD1CCRyG8DEw2JweAJhGIJAcGkp/q0AIKsVi6fT0DTGWyOaxMmD2CwuNyeby/fyBYJhCJRYlxRINdKZbK8HTIAC6FSqalq9XkZOalOppw6XTw/TqbFYEyy7xmJjmCyWALq602214u32KuOp3ODEQACYAKw3O4PRCPADsbw+XzdIF+auWaCprCBJTBEKhpBhNHIHs9iORODw6LhWPoeEWxoEEAg/gcbIrnPcHl4+UKMGKLSgLveF39nsePrCfoAzMHPt8evxS3GQYh+yBIdDYWmAGyZ6gonPEPPUbE9FgcLh8COW1rsxyH5yuGs8hp8oIhcKRDIi+K8JLyCUi7jluxV0+eOsFIyNkrlJU1TKnu5KAu0nTdH0AxbMMAjsGMdSTCaIizPMixgdaGz4LBOx7BoToYCcVCuk8npBiAtw9vgTyvNQIZDuGpL7uBlHxhOiYzqmTzuoumDZmiq6YuuBY9EW4wGgAYqWcDvken5ch4cqth8bpeuClG+jRiAUW2oZ4FJMljqic6ccms5IAuSJLgJBBCacNCiSAW54ruzGYTGx7HtW3I+BeARXoKt6Sg+T4pC+MRvqy3lfkp8pAUqdSgeqmgxlqkG6jBBpGlMpqROhLFYbacEOgRvzEWcbZqXOGlUfc2mBgO+k9MlUZpTc7GmVOSYpnC/oLrKELQKiICKjUdTAIRkZWhErVWjGvDwgIrjKLwADkAACgSCFAEjKAMzAAPQAFZwAAtGgpasAA1hsa0ANwVBUh2Hbweq4fBiE5ShaEWphazYbwAAGRbFKERxgMw+3WFYNhrdJEBrUDFTiXUI4QCyc2tIw8Olmt3CPWAz2ve92XIdMqFmgV/02jhIOSGDENQ5YsNwwjSMozE+rUgjJg2FjqXUjj7ME6c+3vEgoAGBocDEngp0gPC8JAA="} -import { queryComponent, queryComponentAll } from '@studiometa/js-toolkit'; - -// Get the first instance of component with `config.name === 'Foo'` -const foo = queryComponent('Foo'); - -// Get all instances of component with `config.name === 'Foo'` -const allFoos = queryComponentAll('Foo'); -``` - -### CSS selector filtering - -You can filter by CSS selector by appending it in parentheses: - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"f3fd02d1e8ec769d0602c41c9d0aa7406462ba0c814fe9448373a473e4557cd8","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAI6CyGAMIQAtlkkwwaADwAVXnRpgocXgCEuMXgF4zFrebgwACqQhY4APg+NZ8xLzg0UnYwAHMKXjdxSTgAfn8ARTlSDAB5LGiwHn89AB9eYVh+EJgoAB0wdlUIUjQZZMUVNTANBiooCBEERBAAcRg6tHxLYtJA3hDA5lFLCH5eESb1TV4Ad3Yh3iHLUPYSKV8UgDpKECnapABOKlYNUKGkAEYAFio0ZlJQgbxDxuqWzSnDgtJAABioInwH2YYjIVwAvhR0NhcD1CCRyG8DHhFlk6nB2LAAEYfABiEAg/gcMHsFhcbk8vHyhRgxRaUFO5wYiEeACYAOw3O4PHng6gfL7cs6EmAk0jkiBAkpIADMEKhpBhNHIiAAbIjkTg8Oi4Vj6Ew2JwePV5Ep/q1aY5Hc5XO4vD4Gv5AsEwhEohIsvFeEl5OlMtlbE7qfS3UyCkZWSVypVqrUbSk7c1WqcOl08P1BsMBOwxnVJu8ZpF5ot7St1pttrxdvt0xgTlQuU9nmLbmERS83hLvj1fpnlm0QMDUWqQJDobCdY9LgbqCjjcRTdRsT1ceNlMwQgqqXZo67GcyE2zSpz3hdELyVa9J8L8EhBeLPsOQPvDxSlSC9XVedtSQfUkVXI00Q3TEt3NHoWA4Lg+FHJYAW0alnRjTxvF+L0ghCcJIgyAM4kSBowxI7hjyjOkzw8OMWSvZMqjUNMUNrCdc26PoBi2ItRnGctphEWZq1Q1o1g2fA+J2PYNFbdszlvbleWeJ9e3uV8eSfW9JR+BoxzQ/9UV1IDNQXJ59QAXQhaBURAFiajqYBW0MiT4QEVxlF4AByAABQJBCgCRlAGZgAHoACs4AAWjQClWAAaw2HyAG4KgqcLwt4AsZOLUsJjxYTRN8hUfMkzZmF4BQAGUaoWVguBMAADI4CWJD5moqXd8RlOUFWsVzxM0RgfIVRg2r6j5uB87h0rATLstyxsBLLIrKzmUqKXK+tpOmCYoF4ZqAGIfzALrRBiOozoGmx2KzEaxopRhToPMAZrm05QveJBQAMDQCUkPBopAeF4SAA"} -import { queryComponent } from '@studiometa/js-toolkit'; - -// Get the first instance of 'Foo' with a CSS class `.sidebar` -const sidebarFoo = queryComponent('Foo(.sidebar)'); - -// Get the first instance of 'Foo' with an id `#main` -const mainFoo = queryComponent('Foo(#main)'); -``` - -### State filtering - -You can filter by component state using `:mounted`, `:destroyed`, or `:terminated`: - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"92768d4c989f3b43d7f831ca1550fbfc22577809646249dc946c34a91473d555","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAI6CyGAMIQAtlkkwwaADwAVXnRpgocXgCEuMXgF4zFrebgwACqQhY4APg+NZ8xLzg0UnYwAHMKXjdxSTgAfn8ARTlSDAB5LGiwHn89AB9eYVh+EJgoAB0wdlUIUjQZZMUVNTANBiooCBEERBAAcRg6tHxLYtJA3hDA5lFLCH5eESb1TV4Ad3Yh3iHLUPYSKV8UgDpKECnapABOKlYNUKGkAEYAFio0ZlJQgbxDxuqWzSnDgtJAABioInwH2YYjIVwAvhR0NhcD1CCRyG8DHhFlk6soIMIaFAAGIQCD+BwwewWFxuTy8fKFGDFFpQU7nBiIR6ggDsNzuD254OoHy+XJABKJpTJECBJSQAGYIVDSDCaOREAA2RHInB4dFwrH0JhsTg8eryJT/Vo0xx25yudxeHwNfyBYJhCJRCRZeK8JLydKZbK2e1UunOxkFIwskrlSrVWqWlLW5qtU4dLp4fqDYYCdhjOqTd4zSLzRY2lbrTbbXi7fYpjAnKicp4AJhFtzCQpebzF3x6vzTyzaIGBqOVIEh0Nhmsel111BRBuIRuo2J6uPGsA9EAwMvJlLsEadDKZsdZpQ57wuiE7U+793wHf7n0HIF3QX3h7lNwV2oqrOGpIDqSLLvqaJrpiG4mj0LAcFwfDDksALaFSDqRp43i/O6QQhOEkQZL6cSJA0wYkdwx7hrSZ4eNGzJXgmVRqMmKFVmOWbdH0AxbPmozjCW0wiLMFaoa0awbPgfE7HsGhNi2Zy3ly7aPAAHAKPYvtyryiu+ErsemgL/iCgHTqq6pwvejzwgAuhC0CoiALE1HUwBNiOaG8PCAiuMovAAOQAAKBIIUASMoAzMAA9AAVnAAC0aDkqwADWGwBQA3BUFTRdFvC5jJBZFrwUqaKUEx4sJomBbKAUVNu+KEuVpLktYHniZojABbKiBlcSAXcNlYC5flhV1gJdRfq4B5QJVUxlnMtXkvVogxFN8DfrNsrtYZo7db100/lAg2ZackXvEgoAGBocC+ng8UgPC8JAA==="} -import { queryComponent } from '@studiometa/js-toolkit'; - -// Get the first mounted instance of 'Foo' -const mountedFoo = queryComponent('Foo:mounted'); - -// Get the first destroyed instance of 'Foo' -const destroyedFoo = queryComponent('Foo:destroyed'); -``` - -### Scoped search - -By default, the search is performed on the entire document. Use the `from` option to limit the scope: - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"5b06779dc9684068e8f4b3a792f589956f66c8e4ef2935276ab6254c4e2806ed","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLwAjmVkGADC1RsYBGaAAgqxWDI5PQRkoHN49F5JF5DNpjMZGD8/oheKVSOxRhReFo0B84AB+XEARV+pAwAHksGSIGAeLjpMh2uYrDY7N86QCgazQRDWE4XG48ABxWq8NisXiEnpveAkp4CYUgsD2ADuRXwvHG3hC7BIn2x9MC3VmDEQAEYAKxDEZjCYOgDsM168ztIEtQusIp1YuWhNWGxAWx2e2uDsdJzOODwhBI5Bmtw8gmEvDUvVBTh6fUQHoAzC7RuMkAA2b1zBYePOkAtDcNIABMm22pF2+xrieo5xTV3T1EzIBYHC4fGzfgR0PkcOUBk02l4SJXRjMFiD/KWVEl7k8Eh8wmt1FC4Ui0TiVASSTgqQy2Vy+UKxVKFSqNTqDSaLTaTobV6O0AA5QIrN0pjrX1FgkMMQQ7LsYz7RB23tAdMGTDxU2uDN6CYLBVzITA+CbUF/H4VknnYEJcWAcxeCY3gwGYGpcXxQkQgAbnMI4JVcI9ATAGiQnPYIwiQCIokJW8CESZI0kyHI8gKIoSnKSpqlqZh6hgRpmlaKiRNosoexZMB/ASSxxSAkAizte01mmKJXSrRBawves/WM0SENWcso27Xs42OU5B2wy40xuAiPEYIitBIjA+FY9i8TQAlRkLW0kHte1Blcyt3Rc2ZYI8VLcFbRDEBc6Me1jA5JkwoccJHGK/UYH9CCgMj8x1fxLAgV4aCgRhuFxIgIHYKBspA3LJkC4YiqQL0vLKkBBuGmAZqq1ZVrqkKDnbZrItw0caFiqNWVKZ48kfedUVXEwuVm4t23bValqgmqYIbEAnju/yBmQ+rUKck6LjO9q7inR4A0BINtXBSEUQkVHVDRExMQDDiMq44lSXJKleFpP4mQs9kHs3dEuR5Xd7HhrVRUhASpQ8WV7AVJU2WCVURAgDUqMR0FeH1cYjXwE0zRGAU/nPByO1LFyvvc+1VtKv7GeFkMWd24GgpQuM1Yh4dovwjqEpwOxkpJwVyfJfwnk0SxiYACWkABZAAZABRYYah1XgAB9eAAEVcMoA/sEPXlgGiQR2+ycrQ6t7Ug9ySp9P6neqIHDhBw6pia8KsMhtrzcI4jrb4ZFHq3fwABIYFYXF3e9v2YCj3gADJeAYz5mIAfUHgAjCRh+Jj3mkkTiiQRYPeFMMdSEsQlmBGpfjF4sB+IPQS8GkSXeE0CB7GbzuKKCS8pOvWT4gUx8lJfVT3w0r9tN/fT/1aZVef4GAsiWxIuweAVk0A2QAMTNw6F0JOc00Iek7IVb6gUNZ+ibuKPW+cDagzjI6BMsCqKwDwLyWw9hgAImJFrYEzNFRHGeM7XgAByAAAp+LSP5mDPhUm+IoTDt7mFnCIcigdFyKGXKoPujF0rr3YPwTUJkQjrikQPJiFVcRMJEWgJhFBpFHAEQPTaOptpjRUcxXgaReAMjAKwDAvBfS8AAGJ5G5iqf+IhlTTW8OMdgIghY0J1EwkQ58o7SKYsZG6AMIC6FlvSBGATkasEYEw5xEAdF9wYdUXEPiAgYN4Ecbg28mJHD4k4ThSBQBiLgB8PAmQQBHCOEAA"} -import { Base, queryComponentAll } from '@studiometa/js-toolkit'; - -class Parent extends Base { - static config = { - name: 'Parent', - }; - - mounted() { - // Only get Foo instances inside this component's element - const foos = queryComponentAll('Foo', { from: this.$el }); - } -} -``` - -## `queryComponent` - -**Parameters** - -- `query` (`string`): a query string in the format `ComponentName(.cssSelector):state` -- `options` (`{ from?: HTMLElement | Document }`): optional scope for the search (defaults to `document`) - -**Return value** - -- `Base | undefined`: the first matching instance, or `undefined` if none found - -## `queryComponentAll` - -**Parameters** - -- `query` (`string`): a query string in the format `ComponentName(.cssSelector):state` -- `options` (`{ from?: HTMLElement | Document }`): optional scope for the search (defaults to `document`) - -**Return value** - -- `Base[]`: an array of all matching instances diff --git a/packages/docs/api/helpers/registerComponent.md b/packages/docs/api/helpers/registerComponent.md deleted file mode 100644 index ed99f9900..000000000 --- a/packages/docs/api/helpers/registerComponent.md +++ /dev/null @@ -1,93 +0,0 @@ -# registerComponent - -Registers a component in the global registry and mounts it on the matching elements in the DOM. Use it to instantiate components without the parent → child relationship of the [`config.components` configuration](/api/configuration.md#config-components). - -This function is inspired by the [`customElements.define()` function](https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define) of Web Components. - -::: tip 💡 Naming components -When using the `registerComponent` function to load and mount components, the [`config.name` property](/api/configuration.md#config-name) of the component is used to register and look for components. -::: - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"9c1d70450717691d825a4b8f762765da855d36460752d8a038214844e31900a8","data":"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="} -import { registerComponent, importWhenVisible } from '@studiometa/js-toolkit'; -import Component from './Component.js'; -import Link from './Link.js'; - -// Sync -registerComponent(Component); - -// Async -registerComponent(import('./AsyncComponent.js')); - -// Lazy -registerComponent( - importWhenVisible(() => import('./LazyComponent.js'), 'LazyComponent'), -); - -// Custom selector -registerComponent(Link, 'a[href^="https"]'); -``` - -**Parameters** - -- `ctor` (`typeof Base | Promise | (() => Promise)`): a component class, a promise resolving to a component class or a module namespace (`import(...)`), or a factory function returning such a promise (`() => import(...)`) -- `nameOrSelector` (`string`): an optional name or selector to use to find components in the DOM instead of the `config.name` property - -**Return value** - -- `instances` (`Promise`): a promise resolving to the created instances of the component - -Instances are mounted independently: if an element fails to mount, it is skipped (and logged with `console.error` in development) instead of rejecting the whole call, so the resolved array contains every instance that mounted successfully. - -## Examples - -### Basic usage - -Use the `registerComponent` function to register a component globally. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"dfb4fc6cfaaac78abdb5506540bedfb7822399776c57abaf92845c31071aac14","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYLykMCHspWQAYWqNjAIzQMjk9BGSgcMCBYFKpDKe1svD0XnhiORuVIxkYKNIiF4sgAPrxDJY/lJpMYKLwwMwagB5UgAZRgwwJAH4iYj2KNuESKVTJABBADuzCKMCgkgAkgjgm8YNJzjJjMZkO0zBZrLZ7N9fv9SEC9aCwAwqC43HgAEo/P77XghVgQABGbFYGF4zEUvEsEFe9mYzvYJE+/GBEHNaDpqJDWE0lNUX3g+SI/JCvFyPoEUZjgRmoXCkWicSoCSScFSGWyuXyhWKpQqVRqdQaTRaKXwHJwpDgKUNjsB+bB/gSllYHQokSwO0sTgJxJ7ebNYLziqRS/jvET1Spqbg6cz2YgvCKgS6s/nTgZzLZHJgS+kK7v3lRqk5ONPvDKqigzyouMfyriCY7TpE3zlKQYBOKKu5Jge3xHqwGajD+vo+qQpDMN6EBPP6gYWjKoHRuu/I9MqAQdF0IA9H0iAAIwAKxDCMYwTExADsRZzAsHhDsappgRayz8qsGwgFsOx7NcTHMScZw4HghAkOQMy3B4gjCLwwlkaJ3SzAwiBcQAzGxozjAMvHzMZIB6TGYmgkgABMmzbDhskHAAbIp1DnCpVzqdQmkgCwHBcHw2l+LCELyNCygGJo2horChjaDqVg2HYsJONa7ieBIPjCIW1DFkgERRPy5YEIkyRpJkOR5AUF7NpU1S1Mw9QwI0zStDRhm9MZ/SMRZHFTDZ/GFY4Qzia57kyfsrmTH5mDKR4qnXBp9BMHufaYHwDljpGYBPOwIREsA5i8Dd9KMjAvJoKQmYANzmEceWuAV8JnSEpXBGEFWltV8R1dWDV1s1jYlOU7Vtl1HZ9SkJ2/WUOFoB845oJOA10UZSCMWsPFROxVmIN5k12Sj51Oas5lSR5uxLYcq0BRtQU3DtHiMHtZAHXdNSPc9oxOPRxmMS5bkk5ZnHTGVfF2W+tMTQzi1yStpz+etlxqZzdnhQ8fCCfsR0WpIa0wPhumjhaeIEkSFtW6b9hksKqjm+cTs22gtICzALLsl+tg8rwfICkKiHu87WqZXqOXGyOa4Gc4X12g6xrOq6HqsF6Pp+gGQa5r84akTGcakLme7Jt4yHHuhOYhpGSfFEE5UoMDsSg1WNaNfWLVNrDradd1vVdj2rB9gOCcmt7WM41eIBzjhC6bN+L7eE3In2CdWLbhXCaRzXaaoSeOYXhBi83lQb4B4+z6vvdvAfnf345n+JFPEB+AgZv+ktwvUE0awSoPBKuSFj5oSzA3T4vQcJ4QIgXYiAFf4xnPIqX0/B4CXlomLAmkxBjS3GtxSmeBp7O2VogAAHAtTyzM1is21ptYKNAuZSV8CIchg0GKMW8sTYYMtrLy1sngThVVnJUJoUzOSjFKFHFopGWAeAsr6l4MAWEdIyHe14EcZ4SZeAAHIAACbUh7BFrE1BsRR9FvTAOYaKHCtHxUUIlFMV1Pih2CBjfgG5fqpTcbdP2RJ9HO30RQa62ibFHHMOYTRzdGDO24C9Jw8MkCgCcXAD4eBMggCOEcIAA"} -import { Base, registerComponent } from '@studiometa/js-toolkit'; - -class Component extends Base { - static config = { - name: 'Component', - }; -} - -registerComponent(Component); -``` - -### Async components - -Register components asynchronously by providing a dynamic import as parameter. The module's `default` export is used automatically, so you can pass the `import(...)` promise directly. - -```js -import { registerComponent } from '@studiometa/js-toolkit'; - -registerComponent(import('./AsyncComponent.js')); -``` - -You can also pass a factory function returning the import, mirroring how lazy [child components](/api/configuration.md#config-components) are declared. The import is triggered immediately. - -```js -import { registerComponent } from '@studiometa/js-toolkit'; - -registerComponent(() => import('./AsyncComponent.js')); -``` - -### Lazy components - -You can use the lazy import helpers such as [`importWhenVisible`](./importWhenVisible.md) to register lazy components. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"420199031a5bee5beec8ad022989e3f438314a394953014399062f7f8b8168c4","data":"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"} -import { registerComponent, importWhenVisible } from '@studiometa/js-toolkit'; - -registerComponent( - importWhenVisible(() => import('./LazyComponent.js'), 'LazyComponent'), -); -``` diff --git a/packages/docs/api/helpers/registerComponents.md b/packages/docs/api/helpers/registerComponents.md deleted file mode 100644 index f42b0db3c..000000000 --- a/packages/docs/api/helpers/registerComponents.md +++ /dev/null @@ -1,75 +0,0 @@ -# registerComponents - -Registers and mounts multiple components at once. It is a thin wrapper around [`registerComponent`](./registerComponent.md), looping over each given constructor so you do not have to call `registerComponent` repeatedly. - -::: tip 💡 Naming components -As with [`registerComponent`](./registerComponent.md), the [`config.name` property](/api/configuration.md#config-name) of each component is used to register and look for components in the DOM. Use `registerComponent` directly when you need a custom name or selector. -::: - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"47128342919d2217388de05173c9795d7319c4ee4dcec0c1daf8122f06c53e2d","data":"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"} -import { registerComponents } from '@studiometa/js-toolkit'; -import Action from './Action.js'; -import DataBind from './DataBind.js'; -import Figure from './Figure.js'; - -registerComponents(Action, DataBind, Figure); -``` - -This is equivalent to: - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"8fac8cec85d3754896c7d81feabd4e5c62d99d7cd9b1c6cc963db8610044d5cc","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvUjADm7ODVIBhCAFsskmGDQAeACq86NMFDi8AQlxiqwi0oLERSvALyXrt+47TOAfIxOpIi8hgA+vAAKpOoKMAa8EcAAOlK86bD8zIKsaCH6ANypAL5+ibyMjHyuZdGxcPHhvClpGTBZOXmhRWCl3BS8YMxqMADypADKMKwwQQD8IfbsYLLcIXVqcboAggDuzOw0ULoAknZozKIw+tiNfn7IALp+qewazmjScgpKqu9g2gYVCgEBECEQIAASt9FGReLJWBAAEZsVgYXiXKC8NQQYSfZjw9gkKQidSaAE6AB0qVS+nwMF4pP+gMZl14SIZWBiRHYsCxywxYHREH4vDQ9IEzjU5jYcAgGJEIhgWCOkpcInw7FYUFSTPJgPMAoABqSwPx2LJKXqtDo4EbEKkALQY3hGqwNI2MyTeII9Z0Ern1BkyOWsHkrMXygmmn2+FzOF04qA5BlDEZwLDMJUVI1vTSkNCMSnF7hG7h+l1ZILooSicSSL5oQSkMDLWS8OCOfAuwObBo5qpuMp5j5Fktl6lgVJnRSXJUymTY3E6GD80zK7SwHRokJs6YwEY6MX4ZifLJa8y+Jd43gKVJwADW7CwOCxLFMvERslkq9vUlgJCIlgh5oHwyywswWIigIBwcBG4oMrshAzKyrCsAMcqpAhXyhiQWLMKQpDMOipoXOBRgkKQ6LgRcVzHqe14rlinaKvAcBCGhGCUpQ1DMLI4LIMgIBwQ+PH4GgaBYHAiAAPQyQAVnAjq+BArBPmglKKIIUASCMFyUgBMnMFg7AyfSrA4KQcAyTI8iwioZI2hp4lqKwICPBQQmZkRag8UEoQStaFKfDGaAOEEAwJgS+zoleIaqSQt4ae5nkgN5ww8WmYyTPu/l0qmwwMgmDQzP5V6CA0WL8Am4oKF6zJUilQkyE2LY8dsvC9nEOEJW2kaChihHEbw0E4niv5BSyNFzvA3GPB5ICzgWSAAJxUDMKzikgACMADsVAXKQP4MBCtk/GQfz6joPFwbgiAAAxUBqBFZkoq3FBQ6C3HghCUTxND0HgI4Frw2xiBIYA8UtJ0AGz7cJ2iyFtiAwwdBHHXgYP1pD63LHd21PSeRFiGQSC7R9X04D9xCkwdxhA+8IMACKnswFjLFAUOHSd233QTCObfgSAABxo0dMAnSALMXOzpg3XjSAAEyEy9JPkIg5OfdQ30Qr9tPUPTELA58ABiFrNrgVDQztADMa0C0jQso2LGMQmbsgW/LAJIDbKvE29GsU9rVO6zT5B04DEIsBwXB8Gd9mXU5uiXBgARBLuQoDFl4xTKVcYLB2YVtmsUQxH28Qp08Lytoznzx78jnBTxIJgng0J2Uo8KIiinGCliY1HgS8jEvVV0aTSYD5aPTmslIHKddyvK/gKKcjaK2HVaQ0oYqwcoKkqKq/pvjKatquqNwaf6uqa5qWpNtr2k6LputYnqheFcYVgGZfdfFYZ9VeaM3owo+ATFFJcyYUJZQzFmBkjBcy1zHJSUs5Yn4EirHGGswhwYNhas2VsEYWLdm/kGAc1RhyIOLMgicE8Zy0XnINBkA9VQcw3OubcGAM5GBmCBeiZ5YKXnlMw28cB7xPhfL+d8WIvw/jXLwAC0wIDAUBGBc4MBIJrxglqABEokKqQZCIVEGEIBYQlH/PCg0iIkUkGROwFEyDUXODNPhjFVQsXnOxHIaJuJo34kgQSwlliiSoOJSS0k5KKWUhAVS6lNJNh0uoCWzADIwCIEZEyZlpiWWsvXC6F8qQuTch5LyL1fJPTjAFAx+SQrAI/s4SKLhorDTivABKDJDhzVSulMp4BCo51yhUqeWURouBKrMCp5VKpqmPHVe+yVikgDwW1KgHUur9nMQAqMUgCJWM0cwia1S/yziuHAOaC1raIG2nDdaiNkZ7RdhLPAuSHINSBIE72iAACsftXqkwekHTAIcCBh3+obEAxtQY4JxotbmO1hbfIdsjVGvFxaSyxhDL2d0EXPX9n87awsAU62BX9COkto6cB4F8DueTXnJyFGnOMGcMBZz6TlPOzgC5LBWCXDYWxK7PFeLXKl50Xlj2bqCcEUIYSdwRMiVE6JMSuJdMPbQ09gqTlpIFQ5hi56ckXnyK+q9oIbylDKXeUZWKHyqgmDUWodSiGqYaKQJpJC3ytI6x+YB/SundDAN+tTQGkC/gvUhGz4JRi9OcOp8ZGkQJTIMQqMDszwONkglBwaMHOCwXWCGjZ8F9SIT2H+/Z4GDhqLeSh45uAarAHQmaC4mHLhYeuHA7C0A7gGvuXh4oGLnl3v1YRd47DiNfBURVMjl7/lSYo5ROhVEQSgqKPtOjELIQMUYjsJidBmNaWGX8OzhqkQOHY6dVEjn0IZD2z4+zmKOA8Rxbx/0+ICSEiJMSEkpKyQUkpFSakOlaQSXpZJhljKmXMtkmy0qaVj0pIUpqaVSl+UGVq15kbYz1JGS6GK/VzHtPmV0xDVBs5svGQmIZhVMNjLKvKCqR8aqanMHMzpzUJb4PaiG8uPV/7hoGge4Uoob1qqmk4k5ZyrawsuStAALDcwWO14aHVdosqDoqnKYqQMinFvz1b3UJUCvW4cDaR3BUK6WbMOZcwIidRW21laIqdqLFFSmzOy05rjD5mmibabhXpu6xL9YAzJWwClccVOJ2CnS1OgRGWCmZQmkY/T2WkE5UXbl6xi0VyFFXQV+Y65heqeK1uEJ24iq7nK3uirhFDyJKqpjE8p5zNnuyPVxAl5yKNevCUm9t6ygtQfVUx9bVnwda8p119XUWndaNz13qX4ejQyA30aCOO/13eGdsgCFvRswwSJM8boGZmTQg3LaaywZtelmgQ2DsZ5pbAWrsRbSGlvIRWk7VCUE1rrScxhrjJ2wFbVudtnDO08JZFerR/aryDtEcO58o6pGfggN+Sd8jp1ARAvOmgGjoLLvgrotdqF0KbtMcGNb+6hrWJ0Me8wp7HHHOzODwT7i2IPq4k+vxKBX1BPfWEr9kTf2xIA7pJJKS0mgcyRZMgOT8uvNg2gVy8HulIbIyhseW3A0NKw80+UuGkrMYQz5TKrLc6kZcORkYlGBk1Ro1M4+tVGPVP10s6FqyMtcfW/1NkfG9lNoOah6aon3LnIk4rRWvt7PyYeZLZ54XATqY1j8tWSBdNa0BX5gzoLjMQvdp7cTVmlZSf5htR2Gmo94BzzIeP8MtNJ8uQShapJYAM1y80YVCdDnFAEGXXgAByAAAkLxJFxv1RJiYcHvPQIXoobPwbvPfKQyWn2ASkikJ85Y+LwFzHMu/qF7wvrfpgV9wDXzXFvFeGSz93/PmS5+j8n9SDH6pjAl+oLAI/15jAD9QFf+/sejBz/lg8RAZICgDGDaBwAYoQiKQgDFDFBAA=="} -import { registerComponent } from '@studiometa/js-toolkit'; -import Action from './Action.js'; -import DataBind from './DataBind.js'; -import Figure from './Figure.js'; - -registerComponent(Action); -registerComponent(DataBind); -registerComponent(Figure); -``` - -Async, factory and lazy components are supported too, since each argument is forwarded to [`registerComponent`](./registerComponent.md): - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"a539e64de9f45b435f570e7cd57044c07a08389b0ac89be413800c97a70b8ec8","data":"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"} -import { - registerComponents, - importWhenVisible, -} from '@studiometa/js-toolkit'; -import Action from './Action.js'; - -registerComponents( - Action, - import('./DataBind.js'), - () => import('./Table.js'), - importWhenVisible(() => import('./Figure.js'), 'Figure'), -); -``` - -**Parameters** - -- `...ctors` (`(typeof Base | Promise | (() => Promise))[]`): a list of components, each accepting the same forms as [`registerComponent`](./registerComponent.md)'s `ctor` parameter - -**Return value** - -- `instances` (`Promise`): a promise resolving to a flat array of the created instances - -## Error handling - -Components are registered independently, down to each instance. A failure — a rejected dynamic `import(...)`, or a single element that fails to mount — does not prevent the other components or instances from being registered, and the returned array contains every instance that mounted successfully. Failures are skipped and logged with `console.error` in development. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"87e70005977d62282ab3d9698402794a5d85eefe2b4d9bf54d48234044cf745c","data":"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"} -import { registerComponents } from '@studiometa/js-toolkit'; -import Action from './Action.js'; - -// `Action` is still registered even though the lazy import fails. -const instances = await registerComponents( - Action, - () => import('./Missing.js'), -); -``` diff --git a/packages/docs/api/html/data-component.md b/packages/docs/api/html/data-component.md deleted file mode 100644 index 4b619f156..000000000 --- a/packages/docs/api/html/data-component.md +++ /dev/null @@ -1,84 +0,0 @@ -# data-component - -Bind a JavaScript class to an element with the `data-component` attribute in HTML. - -:::tip READ MORE - -- [Configuration: `config.components`](/api/configuration.html#config-components) -- [Guide: managing components](/guide/introduction/managing-components.html) - -::: - -## Simple usage - -js-toolkit finds and mounts components on elements matching `[data-component=""]` where `` corresponds to the component's `config.name` or the name passed to `registerComponent`. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"1866d71daf94f1b60754eafba07c6671c574d43767130b8da1e8ee0601f3172a","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvUjADm7ODVIBhCAFsskmGDQAeACq86NMFDi8AQlxiqwi0oLERSvALyXrt+47TOAfIxOpIi8hgA+vAAKpOoKMAZ+FLxgzGowAPKkAMowrDBBAPwh9uxgstwh0bFw8QCCAO7M7DRQugCSdmjMojD62PH6fn7IALp+ADpg7BrOaNJyCkqqM2DaDFRQECIIiCAASguKZLyyrBAARmysGLzdULxqEMJzzCfsJFIi6pqrOknOt14WBiaji8zgEFYRFKsl4vkBXxWawAdJRqMxZDtkMgQBwwABrNH4NBoLBwRAAegpACs4ABaXyQ/HNZGKQRQCRpLrI2BECnMLDsCn4XI4UhwCkyeRHFTfLQ6ZHEtSsEAjCg4rDMUipNFBUIi3iIn5rQ2Sbx6gGvYHVGDgyHQspwiC8Fmq9UgTXatRolJpTI5PJ6/QG322gE1QO+FzwwQ1e78AFofAKU1IhVunEyNCCUhgNG1IEgsEyCFQmFO25SLXam4QfgPJ46GD3I3yualRTdETwVEjNUgTukBiIACcVDyZSTSAAjAB2KhdUiyGDDkBSxZkZbGnRovG4RAABioInwWuYYjISBHAF8KOh+nhCCRyAvjHhppoh7wt220YPhwAbPOuLaLIU6jguWrLquP6/OsuKlPu07Hqe2oXuQiCzre944I+xCXq+9DvjMX7pEmm5ynBf6LsO04HsBE5gfgM4ACyQUuK54GRIqymm8F7kgABMKFnuhSBYXe1APrsT4EdQb67CwHBcHw64yrBay6N0GABEEITaUkob+rk+RRkUvAlGUFRREWNRaWAGCjBMUwkXMalLJRaxops2x4Ac0pKCcZyXKw1yVvcjzPIC8gfKm25oP8LhWrZtolva5bwq8rZwaikGYkg2IIQSRIkmSlI0vSjKsMyaCstmHLqCuzA8jAfICkKIqsGKEruRRfGKmgyoZh6Z7eseUb6ra2Uml8nQOBaSWFjadplo68KumqGqjT6qQZNkJlBiGu28OGB0TTGcYCImybmNN6abWuK45nmVAFtaoI1CtDqwplVakDWJ31pFTYtp5Ogup0XY9qq/b/jOACsyEgZOzGIHO7HQXgvW8fFu6IUgbEgCeolKEgB7YVJuEyfhL7yURuwfrM35g/BcNowBY7I0xV4Y5xuwaTu4744ghPE2hpNowAHBTmBUwQNNojQ9MgEpnA8PMAV9fF9k6YEUb6Q5hm7cZkbOOZlnlJUKU605kyM1+2MC/BPk7PshyBacFxXDcdwNlFrwxdocVtolgLvcW8DpWtzpZSzuXovlKA4nihJUMSpLklStIMhATIsmyDVcs1vL8oKwqimQPXu1rbYDUND2ejq40AsGU0s6ac0+AClpLR9qWR6tP3Oht7qN2N4DG/tpsuK3yTHad08VrGzZXdGN3Bzlw1Zs9+a9xHpbfRW3S3P9zC1kDjYtBvJodl0PRwL2sM0TOktI4x4Ho+iHGro7LN46sSB4YiXFpeQ8MtpLy2fIrBSIB7ZzG4jXKiVA2bThHJzd+qNpyE0XJjXYCCca/iFgAxAQCiaoXPBLac0t+xfFgMRT8cxgAaw3AQuCvBrwCBBLwAA5AAAQLpyJqFUc55zQNwgA3HbVyzM+KcPUDw5EFInbIlpBIqRDDeD4KdnItQCiKRaLjqoyRYBJi/z4owJ23BjFmPiowAxfEkjcOULGXwagAByu1uFWLREXJAoBjDaDgBIPMuxaQgGvNeIAA=="} -import { registerComponent } from '@studiometa/js-toolkit'; -import Component from './Component.js'; -import OtherComponent from './OtherComponent.js'; - -registerComponent(Component); -registerComponent(OtherComponent, 'CustomName'); -``` - -```html - - - - - App - - -
    -
    - - -``` - -## Prefixed HTML elements - -In addition to resolving components with the `data-component` attribute, js-toolkit looks for prefixed HTML elements (the default is `tk-`). - -The previous HTML example can be rewritten to: - - -```html - - - - - App - - -
    // [!code --] -
    // [!code --] - // [!code ++] - // [!code ++] - - -``` - - -## Multiple components on a single HTML element - -Declare multiple components on a single HTML element by listing multiple names in the `data-component` attribute separated by a whitespace. - -In the following example, js-toolkit mounts both components from the previous app on the same element. - -```html - - - - - App - - -
    - - - - - -``` diff --git a/packages/docs/api/html/data-option.md b/packages/docs/api/html/data-option.md deleted file mode 100644 index a134c8001..000000000 --- a/packages/docs/api/html/data-option.md +++ /dev/null @@ -1,42 +0,0 @@ -# data-option-<​name> - -Configure the options of components from your HTML with `data-option-` attributes. - -:::tip READ MORE - -- [Configuration: `config.options`](/api/configuration.html#config-options) -- [Guide: managing options](/guide/introduction/managing-options.html) - -::: - -## data-option-no-<​name> - -Negate a boolean option's value by prefixing its name with `no-`. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"78bf935302f3b19c18f08cf5a0b2db13edfdf14ac8a91e4ef466ab3e281d1f59","data":"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"} -import { Base } from '@studiometa/js-toolkit'; - -/** - * @extends {Base<{ $options: { open: boolean } }>} - */ -class Component extends Base { - static config = { - name: 'Component', - options: { - open: { - type: Boolean, - default: true, - }, - }, - }; - - mounted() { - console.log(this.$options.open); // false - } -} -``` - -```html -
    -``` diff --git a/packages/docs/api/html/data-ref.md b/packages/docs/api/html/data-ref.md deleted file mode 100644 index d65b03053..000000000 --- a/packages/docs/api/html/data-ref.md +++ /dev/null @@ -1,10 +0,0 @@ -# data-ref - -Define elements inside the scope of a component with `data-ref` attributes. Access them in JavaScript with the `$refs` instance property. - -:::tip READ MORE - -- [Configuration: `config.refs`](/api/configuration.html#config-refs) -- [Guide: managing refs](/guide/introduction/managing-refs.html) - -::: diff --git a/packages/docs/api/html/index.md b/packages/docs/api/html/index.md deleted file mode 100644 index da8306590..000000000 --- a/packages/docs/api/html/index.md +++ /dev/null @@ -1,75 +0,0 @@ -# HTML API - -For a practical introduction to using these attributes, see the [Components](/guide/introduction/managing-components.html), [Refs](/guide/introduction/managing-refs.html), and [Options](/guide/introduction/managing-options.html) guides. - -The following attributes can be used: - -- [data-component](./data-component.md) -- [data-ref](./data-ref.md) -- [data-option](./data-option.md) - -## Customizing the attributes - -Configure these attributes with the [`defineFeatures` helper](/api/helpers/defineFeatures.html) or [`createApp`](/api/helpers/createApp.html): - -```js -import { defineFeatures } from '@studiometa/js-toolkit'; - -defineFeatures({ - attributes: { - component: 'tk-is', - option: 'tk-opt', - ref: 'tk-ref', - }, -}); -``` - -Then update your HTML templates: - -```diff -
    - ... -- -
    -``` - -## Using prefixed HTML element names - -js-toolkit also resolves components from a prefixed, dash-case element name in HTML. - -```diff --
    -+ - ... --
    -+ -``` - -Combine the attribute and element-name API to attach multiple components to a single element: - -```html -... -``` - -The prefix defaults to `tk`. Configure it with the [`defineFeatures` helper](/api/helpers/defineFeatures.html) or [`createApp`](/api/helpers/createApp.html): - -```js -import { defineFeatures } from '@studiometa/js-toolkit'; - -defineFeatures({ prefix: 'w' }); -``` - -```diff -- -+ - ... -- -+ -``` diff --git a/packages/docs/api/index.md b/packages/docs/api/index.md deleted file mode 100644 index f188a41e4..000000000 --- a/packages/docs/api/index.md +++ /dev/null @@ -1,26 +0,0 @@ -# Base class - -Create components by extending the `Base` class. For a step-by-step introduction, see the [Getting Started guide](/guide/). - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"8236f1f9a006c6b6a734b7ee2c84b31864bd3b8591483051ff85b8454a8d3b04","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiACs01EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+yQADYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAB2VEA0bjKaguYLDxLIaI1bWrY7PbXRDIyZ46jnQlXEnUMkgRhYTQ4OwYPhQ17vfz8GEAM3YIUQvGA5l4ed4YGYNSzpVIiJCAG5zEdBa53JC0xmJdRQuFItE4lQEkk4KkMtlcvlCsVShUqjU6g0mi0UimwOmQmUMWgqmB/AlLKxjZ9et8ABx7oaAu2IbEO8F3RshZZupAAZjRXqxhwDmAJHiJ11J9CYUa0ZEwPhC2LXhS3LJwzW+ABGNYHxtIF7RbR0IWA3BXSRRB/k9DFvQOf0TRTWA8F5Wx7GAOleCOXhU00SxeAAcgAAVHLUJ2YfsVSHIp6KrMBzBpEQExhd45HoJllFFHMwDzHoV34AQr3ZbNc3zVCs3ooTYTQeiKBUo5eJrKg2KQUBGTAOBVzwTIQCOI4gA="} -import { Base } from '@studiometa/js-toolkit'; - -class Component extends Base { - static config = { - name: 'Component', - }; -} -``` - -Discover how to configure and use the `Base` class in the following sections: - -- [Configuration](/api/configuration.html) -- [Lifecycle hooks](/api/methods-hooks-lifecycle.html) -- [Services hooks](/api/methods-hooks-services.html) -- [Events hooks](/api/methods-hooks-events.html) -- [Instantiation](/api/instantiation.html) -- [Instance properties](/api/instance-properties.html) -- [Instance methods](/api/instance-methods.html) -- [Instance events](/api/instance-events.html) -- [Static methods](/api/static-methods.html) diff --git a/packages/docs/api/instance-events.md b/packages/docs/api/instance-events.md deleted file mode 100644 index eaa63421f..000000000 --- a/packages/docs/api/instance-events.md +++ /dev/null @@ -1,182 +0,0 @@ -# Events - -::: tip See also -For an introduction to event handling patterns, see the [Events guide](/guide/introduction/working-with-events.html). -::: - -## Lifecycle events - -### `mounted` - -Emitted when the instance is mounted. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"e091a819fd70d4c6aa762518c34a46f870dde4ea2f7256e3a0b5d67f5af26e00","data":"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="} -import { Base } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - }; -} - -const app = new App(document.body); - -app.$on('mounted', () => { - console.log('App is mounted'); -}); -``` - -### `updated` - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"6d12bba04d835728554c88730fa0ba738b424b587579fd790876fad405f97c64","data":"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"} -import { Base } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - }; -} - -const app = new App(document.body); - -app.$on('updated', () => { - console.log('$update() has been called on this component'); -}); -``` - -### `destroyed` - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"2db7187c6f00e9171a656fe893fd069b979ae0ff921f8477841934b366fd778e","data":"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"} -import { Base } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - }; -} - -const app = new App(document.body); - -app.$on('destroyed', () => { - console.log('$destroy() has been called on this component'); -}); -``` - -### `terminated` - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"cf56b882e8fac7ee3d732f7a1b6b9e27f0630f6b53a3384555f20f0773c605e0","data":"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="} -import { Base } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - }; -} - -const app = new App(document.body); - -app.$on('terminated', () => { - console.log('$terminate() has been called on this component'); -}); -``` - -## Services events - -### `keyed` - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"ccfed257bb74472240913608d60630b42f86f654759edcaf349633a23d97a52b","data":"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="} -import { Base } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - }; -} - -const app = new App(document.body); - -app.$on('keyed', () => { - console.log('User is typing'); -}); -``` - -### `moved` - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"4b9cfb1138a280dd6dd25e4acb70e335721741846f37bd75161ed925dfd3d909","data":"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="} -import { Base } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - }; -} - -const app = new App(document.body); - -app.$on('moved', () => { - console.log('User is moving their cursor'); -}); -``` - -### `resized` - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"a7b91f15f0e3f34e4bed59a5948bb8563588027b8f2a6a4d09359231e9cd1d63","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAglhYTj19iACs01EjYxOIADMM168wYHmeryG7DAqwATJttqRdvskAA2E5nHB4QgkcgzW4eFgcLh8e5+BxSWTyEZKSmGbS8PReBkmcxWGx2SlOFxuRYSHzCQIgsJICJRGFxKgJJJwVIZbK5fKFYqlCpVGp1BpNFptTrdWbgtFooZ/cZTEFzBYeJbQ2FIBEgLY7PbXRAARgAHJjqOccVd8dRCSBGFhNDg7Bg+JD/PwIGAAGbsEKIXjAcy8TO8MDMGqp0qkGEhADc5iOPNc7hAAGF40mQsLqKFwpFolKCIlkmlMjk8gUiiVypVqrVmPUYI1mq044nk2VkWgqmB/AlLKwOl0QO9wZ7HcNRubECam1bwU668nljDVsCnUiUW7jqdfdiPLjrgT6Eww1oyJg+Dmea8AWRZvIaAwAOymgeAI/LMYJ4IBuB2qsPzOsiroHJMPqYK+lx4jcX4eDOpS8M0WCppCYG9OC7pwj8+7/Egt7wdaIDkVe9qIJ6iIuqiR44X6b4BoRZ4kWgpBlHsthPC8kgsuGJiMDAww1GAaCpgAEtIACyAAyACiqkjGg3CUS8FZ8h41a+CI4mSdJpC8AA7vgZDeGwrC8OM3iWKE7D8N5zAxPAvBYEI/AwI2wSiigkRYDslhOCpMBqfY0huQI1Q2LC6kAOQiJoED2ClaW8FAUCBF0raSvEnZyt2ip9iqg7qiOWoTjqrQwj06mcIu8Yrmga4bgaNFIO6gIMWaAIsaCbFUShSA8XefFuu6GLPrhFzvoGNBESARC9OVrhlGlqYACKnWlllVgAVHdAAGzkwi4zn1NdJmPQ9vCkLU85gCIzC/TACbuWAkXeRA3mZbyZ0mVl6nMNeUC8DCMPeC9igQO95jmMgOkXQAcrwABKoPg5F7SMDKXYpA0Km/qQ/iWBAABe7CsEI/i2CE9OVikADqMAAEYpI8agAJJC69OP8/w8Pqdw1EfJNK2MYeK2sWecM3Ut3G8Rh/Fwmsgl4btonfuGf5RrwV0K2l/gi9AGBabphnGept14Bl3gPY99uK8UztQBg313WF1uRiDYbwCZIg+bwkghxgxi8DJkgJsiNSqGgaeQLA6cJhjAjzn96knQ7JkUOnTlgGUXNo8XkDAVJ+ByJ7JW0OwpQBHjYAE8TZMU+XVM0/V8oM6wTMs+znPc7z8twELovi1LKSB2lKQp8rY2q5MUG/DBFonghHgp5xqwrehD4HHCT5YjtImfmJ8akeR5lQlu4Eep8nzQUxIEloz7sQsvrd0GxVpGzdKbLaQl8IfiDAdRgmpCBQD4F4eSBhFLGH8AAEnjMpEg6l8wSSLDXDgpQRhkFTAZYhaA9I9wUGQAA8qQOhJlGFUNhKQFhIt0gwD2DXLQA1AYAH5UzO3yDAZgYBeAAB8ngVQ4epLhzDeFYFETwVMjA+A6DTkQCA7AoDextK9MivBKHqN4AmMoENRFQzInIicJlorNjFPFRKyV6FZiJrmbwEBi6JxcepKqFBPHZyvNwsgWYABidi9hLkcSLbw/BPIwEqh0cJIAEqRKoCIpcIgWGaMKTYmSidHp/VZiQFRDCmHUNII9XgqDoBhMiH9copAwBOEeDYhJDjci8DsSLcxicrENLaRKWIdVZTyh7EqfsqohwalHOOScuoerBAhjALILSlBDTXAAYnjFkEJaAshpK5iLXYMQsgFLfqNb+41f6DCPoAuap48AEO6eAyBN9MJTDNk/AiL9EL+LgAlSGJFpHmCOk5aFwxUy1kBtI0xIBfa8EegimATTWZQAbt4H8RBjGhWBnADkwxyqizKCEEIRZEZwGkTDZg9ge7ASsJzY6gyfLmAAFLMCOgAZX4IWTRDKmU1GdBYOAlhI7EBJajEWGAXKi14CLTQzlVCkD7mAcwGK8UErkLQTkaAE7OWhhCwR7AkyBTjNYeM8dED9wjr0x6yLGXDCaeSEQL1xjNNqGgkQcA25kREFit+0j/DTxCLox6Ndw0ouGP4MgmhSCxqcajBNHqorOV6GAdN4wWUCFkWq7wZRVCo0Gc5QsNBHGyOVUTaAUVMjAQkjIyw/hzAut4CEae1yvJZukU0zZsioUXhCPODJjjq1FG8IM5Aj0fyRT8IOFwZQ0CPWprTBqKQC4wEyDzOYS8UhCBoKULIRA4Rwn8LQLqKQl3wACKuVghyH1+FKGu0yGb8aLs0MugIH6U2bvHrMtIe6D2L15MvU98BzmXuvbeqc96/2PoOS+t9fg0CwFIKQbg/heAYt7RAftmLsVepLSkoZFaXJFEIOutG9q7D0oqXuxAZHmnQAJZ23VYAAD6D1BZ5qLA9XjqZCN9rYOKylxGBF7AKv68Y0AgZ/WzDAWjMSSL1PUqwDA5g4AYAhvgTQkBy2WPYCFEu6qcZaqeFLBObllV/VUJYEWwwa6QCcr0OdDmGVabQDp8wXADNbGMxAUzHALOeXTj5JyjbYD+BbQWdtAReCCpgN57wC7IC1vjHK/9vBpYsOA9u+U4GAiQYFjB898Gb13ow2hw5zAsjZZ2ScjDWQqh8ATLYcwrMVMwm66QPyojuPmAMrQXM4Uy3ktGCXIjJHB2eqdTxx6q3MjmGxVGiAMa8puS5tDc1pBWBQDytwUsYA0i8A0DCU1qY9vTxcrYY7NdBkfrC2gDbEak3RsYLtlSD2ACkcA8o1zyod47p3zuXeu+pOUvB7sHae1AF7FqsPvc+4mqKKbbCMFhM5XgBkcM47yoLQgRga6MtQfS65qNtgvGoSd7gZ3zDQ8LLDuQROnI5zgKEDyihW03O8hhOdqPsOkGW5dzMhPU2plJ3kbQFP2r4Gp8wWn5EGcs5SFmTMRbkATjYO0L4v9Nfa7IvYYVoriiSTAJLMAGUe7Iv2vYXHTbEBEEsB6QEcIPSem4Cb7XRa+Gyat3Y239u4CO/kLwF3sA3ce8BGsfoQJff+6zEW1jN2yA5lYMh1wj6Uh0EEeupciAIIQQ9P0VPOv7B66OqwdoWRq3q/F2iRAV6q9m7kHXi37AxUx5gIgTPXS2C5//QX2gRfRGl9b2iNYfuLta4D/YDP6ks8j78jCAvdfeMgVGG3wEQJ+7iWzP4pkvASfzzJsRnq8Y8rnc27mrpjAA6yPmE5PBwAkJHAAIR21f2Qb/R6ZnBfK7NnW7P/UYGJQWS/Uma/FFMAX/C6f/Ugb/FHVtMXcwVbR6fucbSbSlctZjTKN1L7HFQUPwZbTAtbOADHUid7M/MEQVNtXMQVEcQgZyXRe/N+EqHDeg2oRgv6Zg1gnGDgmg+wSwDAd1JlPQPHKTKKSQ4YRgd7GuFNYA3rCQkgrbHbBHR7I7RnKHLXGHcA7Q8HZHRxdHMAcQ+QqKH7P7fbXgIHEHc/EwyHE3QwuHYwpHNA8wywjQ7HNNGQ6XYnOXcnYCJXFXNXenWERnYA1nG7OHZAQI8XXgYIhXUIqnWbGneHdXKIroRxFNI/Lgk/GoM/C/RuWAkZeAu/NQqw/wR/fNF/SA9/T/fxH/CAt/QAmIgwsAuHJAxo5ImAuAxlBAtogAtA/IsALAoIdxOKLcdLJwZARlecMeErNIOlcYMoEWWMaoXdJtTIHY2AbePtFIGrW9DgMWTbTIZWfUJ5VWT0aaY+UvYBNibFS+Cad0Q2W+B0IFf0EFJBM8FBANaAPgGon7bnXnCRJxDAGufwGE+5bPNQRKOHetZAdoMyXgQxYxaPAAandHTjxGnlV13mcErDwDcMcUeje3XSaV9XbjxxWHwx0gbkXCmzIjmCDjsgo0JWEAyRrhpIxnMCTG1XsHLSnS4BLjDCsF6GVTBPmAzTIkblV0qFEUkxFNRjFODRFlKCKGL3jFhTYDKFCnJUsE5ScnnV/RuwTEYEBG4GK07HlD8jAAgkPT5miDKFvQdKyASnmGXgdMBGQwtP8EBDQ3n0YETlBHZNZI8kbgSj8CnTNOL1YH8EG2G1jS3QnjA12PKyPSgxPRZVgwvSvVqyQwTIawTOTJZXLPOVBB4Dw37iwPWwhkKLjDsXsD0E+E4Mx00N+2bJIXsJOxrh7NMn0NALiNTEHNTH/kcUpI+0bM7JsPHMcMHM6JHNhzHLC17MnNezR3XUoOwJ4zS0y0ehLMrNTJAzpjK2dOPSqzg0LMQ11BLOfUOTLNsGG0rKyGrK6xkj628AGxfJZSXDcVinFBm0iicCIDWH8HdEgrWDWEeW3Amn6D3BmmYieLPGjVeI9HeKgU+I9FNk3DjFgDwA5FsHsGAEpF4COBsU0FlTygAAE1RhxNRmAFRexlQigqieNvVZIsAjUFA6QvA0wMwBdFxbVx0z90w5EswkJUw8pIQQchKjhzsjgCjAZ7ByIz8ZDIRGBdZXEd5ztAsXh8FCE8onN2A2YMlHDdEmQ04JLMxNsbCABVGzNlUyjmWbROLGN6FwsAI4M7JwJipAUAGkQGJcPATIEAI4I4IAA="} -import { Base } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - }; -} - -const app = new App(document.body); - -app.$on('resized', () => { - console.log('User is resizing the window'); -}); -``` - -### `scrolled` - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"299f329d2580f26b4bb0722c200a146f31de373cd47da607af6a41de7e3bce15","data":"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"} -import { Base } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - }; -} - -const app = new App(document.body); - -app.$on('scrolled', () => { - console.log('User is scrolling'); -}); -``` - -### `ticked` - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"25680bc6dbafe0088888a4dfd244ccc5155ade7599da4acfb945ac8bf3bbcdb2","data":"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"} -import { Base } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - }; -} - -const app = new App(document.body); - -app.$on('ticked', () => { - console.log('The render loop has ticked'); -}); -``` diff --git a/packages/docs/api/instance-methods.md b/packages/docs/api/instance-methods.md deleted file mode 100644 index fe01de0d0..000000000 --- a/packages/docs/api/instance-methods.md +++ /dev/null @@ -1,279 +0,0 @@ -# Instance methods - -::: tip See also -For practical examples of instance methods, see the [Components guide](/guide/introduction/managing-components.html) and [Lifecycle guide](/guide/introduction/lifecycle-hooks.html). -::: - -## `$log(...content)` - -Logs content to the console when the `instance.$options.log` option is set to `true`, either via the `config` getter or via the `data-options` attribute. - -**Parameters** - -- `...args` (`any[]`): The content to log - -**Example** - -```js {6,10} twoslash -// @twoslash-cache: {"v":1,"hash":"34b8b72cb0335c69489ffe98f1d4db7877c033401e3d9e22c4ab40523f1f2372","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADcBaLrAgOd4ACNVTBmGBa2AjoLXO5IZnsxLqKFwpFonEqAkknBUhlsrl8oViqUKlUanUGk0Wil02AsyEyhi0FUwP4EpZWMbPr1vti1v7baN7b9HeC7oOQst3UhH170ZifpBviFxEtcpL0EwsZaGQmB8CWZa8BWVZOGad7YhaT5Ag6I5OhCCG4G6SKINM/4+liJF4iGBIeGBEY0JB5LQfGcG8A2Tatvk7ZgKhXxINikzYlhL5/rM74eOx37EQArGi5F+pMVGYDRlzEjcjHRhuhBQEmLwwqmlgQGUcIwFAjDcLmRAQOwUC8be/E/BsALPsCNq4eJICGcZNC2URqyYWRGK+gcyJKaGtHhupEIxnGsGJnSkicnGJj+AAJOxuaMP42VgrOvDGTEkAAO5gMg7R8Doxi8FZNm9sKHgAMqWGwrC8PgMCsPGvC5GxjZIeUGYZsOwRSig46IpOBAKrOSoLqqy4amu2qbvq26tIiPRgPwMBZFp0ABBerAAMTsVke4KAwnQ3uaGFCc52EkW+zogOljZSas/zekFFHHCa6awHgvK2PYwB0rwRy8BmmiWLwADkAACq5ahuzDziqS5FLDXbmHQfL2LAGbMGUrD2DSIjJvpcJyPQTLKKK+ZgIWPQnvwAifuyeZ1oWBG5rDFOwmgsMUFzvVNmgpBlDAwuM+D2My15JlmXwDNFt1+DsAEr0hIwsMKz5sPcF2hZHOYPZUCjSCgIyYBwKeeCZCARxHEAA==="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - mounted() { - this.$log('mounted'); - } -} -``` - -## `$warn(...content)` - -Logs a warning to the console when the `instance.$options.log` option is set to `true`, either via the `config` getter or via the `data-options` attribute. - -**Parameters** - -- `...args` (`any[]`): The content to warn - -**Example** - -```js {6,10} twoslash -// @twoslash-cache: {"v":1,"hash":"5174cf63ab7c1548b16266e87922efde4893e328e324dfb77f71d502df67eec8","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADcBaLrAgOd4ACNVTBmGBa2AjoLXO5IZnsxLqKFwpFonEqAkknBUhlsrl8oViqUKlUanUGk0Wil02AsyEyhi0FUwP4EpZWMbPr1vti1v7baN7b9HeC7oOQst3UhH170ZifpBviFxEtcpL0EwsZaGQmB8CWZa8BWVZOGad7YhaT5Ag6I5OhCCG4G6SKINM/4+liJF4iGBIeGBEY0JB5LQfGcG8A2Tatvk7ZgKhXxINikzYlhL5/rM74eOx37EQArGi5F+pMVGYDRlzEjcjHRhuhBQEmLwwqmlgQGUcIwFAjDcLmRAQOwUC8be/E/BsALPsCNq4eJICGcZNC2URqyYWRGK+gcyJKaGtHhupEIxnGsGJnSkicnGJj+AAJAA7r0YC5ow/h5WCs68MZMSQOlYDIO0fA6MYvBWTZvbCh4ADKlhsKwvD4DArDxrwuS8K1MTeJlpAWKMchcOwZDDsEUooOOiKTgQCqzkqC6qsuGprtqm76turSIj0YD8DAWRadAAQXqwADEw1gFke4KAwnQ3uaGFCc52GILJ7nOiAGVZVJqz/N6QUUccJrprAeC8rY9jAHSvBHLwGaaJYvAAOQAAKrlqG7MPOKpLkU6NduYdB8vYsAZswZSsPYNIiMm+lwnI9BMsoor5mAhY9Ce/ACJ+7J5nWhYEbm6NM7CaDoxQItsY2uZoKQZQwLL3OI6T6teSZZl8FzRa9fg7ABP9I2MOjADqWVVgAhOj3DVrwaS8MgkvvFk2LtLwVsjbbdZHOYPZUHjSCgIyYBwKeeCZCARxHEAA="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - mounted() { - this.$warn('Warning!'); // [Component-1] Warning! - } -} -``` - -## `$on(event, callback[, options])` - -Bind a callback function to an event emitted by the instance. Returns a function to unbind the callback from the event. - -**Parameters** - -- `event` (`string`): The name of the event. -- `callback` (`EventListenerOrEventListenerObject`): A callback function or an object implementing the [`EventListener` interface](https://developer.mozilla.org/en-US/docs/Web/API/EventListener). -- `options` (`boolean|AddEventListenerOptions`): Options for the `addEventListener` method, defaults to `undefined`. - -**Return value** - -- `() => void`: A function to unbind the callback from the event. - -**Example** - -```js {10-15} twoslash -// @twoslash-cache: {"v":1,"hash":"949d31b9995a8f010091bd80642c1c904d47200a93fd1a1556afe815132c9841","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADcBaLrAgOd4ACNVTBmGBa2AjoLXO5IZnsxLqKFwpFonEqAkknBUhlsrl8oViqUKlUanUGk0Wil02AsyEyhi0FUwP4EpZWMbPr1vti1v7baN7b9HeC7oOQst3UhH170ZifpBviFxEtcpL0EwsZaGQmB8CWZa8BWVZOGad7YhaT5Ag6I5OhCCG4G6SKINM/4+liJF4iGBIeGBEY0JB5LQfGcG8A2Tatvk7ZgKhXxINikzYlhL5/rM74eOx37EQArGi5F+pMVGYDRlzEjcjHRhuhBQEmLwwqmlgQGUcIwFAjDcLmRAQOwUC8be/E/BsALPsCNq4eJICGcZNC2URqyYWRGK+gcyJKaGtHhupEJ7qUvCkDAhkkAAoiQcIADLsKUIxkLm5nssYvBWTZdnmhhnrDC5/H/GJzogPFiUwCl7wZVlbwRisAxyUFFH3mFKl0VFTBadAfBeJInJxiY/gACQwow+rvOWaCVqMFBsZlCg5bwTXpRt2WkAA8qQO1oC1m2Hc26QwHsa1aCeMJwAA/LmnHDB2vAAD68AAglAUAnWd+0HVg91gDwuV8DoBVFb5zh9osiJQLwzDra1ZC8Bmxl7KevC5MjYByKlxRBKO0qRFgOyWE4C1wkWABypbeBAGa4/g3g08TXTk5T35o6QRYAGJY6DuMQC23j8GwwxQIEXMgBTGJU1Qd2niIwOgyIGa2Kz3gAAb1VcAN7W1uu8MNMsdBQkTxeUpA8VQ30Y8LON48ZzaIzrqPnbLVuypOBAKrOSoLqqy4amu2qbvq26tIiPRgPwMBZObAQXqwADEMJZBzWSS6wrDNrsMRZCrD3XqafGIMiaz/BV2EBm+tWzfbsqrP83rdX6/pWn1oGRRBEIxnGsGJnS40GJNxgzexuX+HPYKzrwxkxJAADuYDIO0kPQ9ZsNCv2ADKlhS7wbOsPGotsY2SHlBmGbDsEUooOOiL+9OirziqS7qquWobrqW5DQpDjsEBOScU7njQJedO7Fc4wgUAwToN5zTIkmH+OuL5SI1QhNNSSfl+JOQ7oBA42JcTBmUn3NSA8Pxg3sAbZKRNAZtQhvlQqu8SrfH9GsH4wlgTYmqmCWq9DGqMONuBVu/FSJEOClMI4Jp0ywDwLyWw9hgB0l4EcDGmhLC8AAOQAAFf7rh1J/Rcao0C6K7OYOgfJ7CwAzMwMorB7A0hEMmfStNGSKGUKKfMBMb7MBPPwAQn52R5jrIWAiuZdHuNhBYigESr5NmWmUGACT/FHCsf4ryJkzJ8D8UWEJtC4oJUNqIvmYTxiZRmnNXRZQsBQECaZXRa08pQ3Cf4wpVSAi4MbIwOpDSmlQF0dwLshSjijPMIktIvAABKpSSCew5l7faiThFGz5uZMZGjzA9ioP/JAoAvFwFPHgTIIAjhHCAA==="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - mounted() { - const removeEventListener = this.$on('updated', () => { - this.$log('updated'); - }); - - // Remove the event listener - removeEventListener(); - } -} -``` - -:::tip Tip -Set the `options.once` parameter to run the callback only once. - -```js -this.$on('updated', () => {}, { once: true }); -``` - -::: - -## `$off(event, callback[, options])` - -Unbind a callback function from an event emitted by the instance. If no callback function is provided, all previously bound callbacks are removed. - -**Parameters** - -- `event` (`string`): The name of the event. -- `callback` (`EventListenerOrEventListenerObject`): The callback function or the object implementing the [`EventListener` interface](https://developer.mozilla.org/en-US/docs/Web/API/EventListener) which was bound to the event. -- `options` (`boolean|AddEventListenerOptions`): Options for the `removeEventListener` method, defaults to `undefined`. - -**Example** - -```js {10-15} twoslash -// @twoslash-cache: {"v":1,"hash":"a85762455a29fa2419a8ab21c151dde50e817c6d58408bf20ea3b19414f7411b","data":"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="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - mounted() { - const callback = () => this.$log('updated'); - - this.$on('updated', callback); - - // Removes the binded callback - this.$off('updated', callback); - } -} -``` - -## `$emit(event[, ...args])` - -Emit an event from the current instance, with optional custom arguments. The instance dispatches the event on its root element, so other components or scripts can listen to it. - -**Parameters** - -- `event` (`string | Event`): The name of the event or an `Event` instance. -- `...args` (`any[]`): The data to send with the event. - -**Example** - -```js {10-11} twoslash -// @twoslash-cache: {"v":1,"hash":"efac3a5fef63838518ab30e3ed959eb8d0139758bfb85d6817a9c65ccddc9729","data":"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"} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - mounted() { - this.$on('custom-event', (a, b) => this.$log(a + b)); // 3 - this.$emit('custom-event', 1, 2); - } -} -``` - -## `$query(query)` - -Get all descendant component instances matching the given query. This is sugar for `queryComponentAll(query, { from: this.$el })`. - -**Parameters** - -- `query` (`string`): a query string in the format `ComponentName(.cssSelector):state` (see [queryComponent](./helpers/queryComponent.html)) - -**Return value** - -- `Base[]`: an array of all matching descendant instances - -**Example** - -```js {12-14} twoslash -// @twoslash-cache: {"v":1,"hash":"04e180686338152ec3ca81fa66052be6d6d5302f46d4e6023ac8223a80d77b46","data":"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"} -import { Base } from '@studiometa/js-toolkit'; -import SliderItem from './SliderItem.js'; - -class Slider extends Base { - static config = { - name: 'Slider', - components: { - SliderItem, - }, - }; - - mounted() { - for (const item of this.$query('SliderItem')) { - this.$log(item.$id); - } - } -} -``` - -::: tip See also -`$query` is the sanctioned **parent → child** channel: a parent reads and drives its declared descendants. See [Data flow between components](/guide/concepts/component-tree.html#data-flow-between-components). -::: - -## `$closest(query)` - -Get the closest ancestor component instance matching the given query. This is sugar for `closestComponent(query, { from: this.$el })`. - -**Parameters** - -- `query` (`string`): a query string in the format `ComponentName(.cssSelector):state` (see [closestComponent](./helpers/closestComponent.html)) - -**Return value** - -- `Base | undefined`: the closest matching ancestor instance, or `undefined` if none found - -**Example** - -```js {9-11} twoslash -// @twoslash-cache: {"v":1,"hash":"ec4d1f572bff20bff0c3675be81f78a5c1cf444acc5feef8826dca64c82ec79f","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAyhywpACSNJZOPX2IAKzTKIjMYTRAARg21F68wYHme7FeHxgXyG7DAqwATJttqRdvskAA2E5nHB4QgkcgzW4eFgcLh8e5+BxSWTyEZKZmGbS8PReLkmcxWGx2ZlOFxuRYSHzCQIzULhSLROJUBJJOCpDLZXL5QrFUoVKo1OoNJotNqdbqzWEAdgAzENgeMpnK5gsPEtUeikFiQFsdntrogMX9idRzmSrpTqNSQIwsJocHYMHx4YjPv5+BAwAAzdghRC8YDmXgl3hgZg1AulUhokIAbnMRzFrncIAAwlncyFZVCwkgIlE0cqCIlkmlMjk8gUiiVypVqrVmPUYI1mq1Mzm82VcWgqmB/AlLKwOl0QD9YQAOQZA0ZOxAEl0wu6dvPLNGre2+nF4wPHU5h0kPHJa4qXoJh4y0MhMD4ctK14ata2+K0kAhQFhlvUFAVmJ8PFg3BPVWQE/VxAMDkmUNMEAy4KRuMCaSNQgoBTF4yCRSx/EsCAyjAGgoEYbgCyICAESQ3pYTBW0fXQkEkGtR83RATjuN4t8vUQOSv39fEgwo8MgMjWjYV9LNSngljSALLxJD5BMTF4AAfXhuNgXN0SgUTfjBAEHQwwl5KMuBzNU1YL2xLTAwhXSqOAqMaDo2MGOgPgrJsoxjH8AASQQIFUUprIkfLVH5YxjEYABHMoyAwKs0BrUYBOZQr1Fs4wHKcxQYFcmB3KocVWwAcVqXhxm8bLcvsZgwH4eBclIARqhsdEeN4NEeim7xLGYNAtlrYb8G8EJ2BIMBeAqqr/HMR4yhCXpeGzWxeAAAzGmaO2sLMRjQcrKtIDAKELO7NEsAtxnYAIMpgVheCObhHp7YI+xQRUh3iUd1XHLUp11WcDQXY0V1NVpVuCdaskSpQDzQI8AGIXtKLIzt+k9LTElCCVCm8ZMQDnsIUrLWBymbgqQDniJ/A4MXI/9KIuGLDOfMBTMChEyEsgrUu0VrHOczr3x6s9kPBfoH05u8Td5gKgoIgYwpI7SLyi2WDNAoy4wTKDk0ajWTEygX814Rh/CD6F1XamJIAAdzAZB2j4HRWqEkTepbPBHk21gof21hE2GiBeD9+DymzbN4flftkdiVG1Q1CdtWnPU50NRdl1XM1icm6aydqRiAkPVhqb9rINwUBgLQN1mgzBDTpLvLDoT5v3hfBSExdIlCwUdiMaJdhWlfMtXVCa4qPNhSXIRn0Fzfny2VajFYUJX7818QW0pZJJ3t+jeK3cgpNkoK1k9B2TKAMLZHknIWqZQRDVOqIRmwSg8NIfaK1FYk2mitKApdEYDiVFXMcmpJw6hnPqecRolwmjXCkdupMIKJl3PASmNMRJj3PN6SY09HSgk/BbPAGUk6DjUhCW24spgb1PJmWAeAhS2HsMAZk0NAbVF4AAcgAAIkKbsEAhdddTKIbGAcwjIRCplYp8OQQDFAgNUIWYshctrsH4PNTcIRwFFhOqWPCBZlEmPeJ8ZRFBbFHH0bYpSPFur8Rse4ksG49633AaDcGdMvrePMso7g+jSwrWzAHZWrw+BuMySWBJvsIAhEYMot4isVZmVvogfxNTXhQKYhk0sRxAmNicGQpAoA2RVKzHgTIIAjhHCAA=="} -import { Base } from '@studiometa/js-toolkit'; - -class SliderItem extends Base { - static config = { - name: 'SliderItem', - }; - - mounted() { - const slider = this.$closest('Slider'); - if (slider) { - this.$log('Inside slider:', slider.$id); - } - } -} -``` - -::: tip See also -`$closest` resolves a dynamic ancestor from the DOM and returns `Base | undefined`. Always guard the result; never dereference it unguarded in `mounted()`. See [Data flow between components](/guide/concepts/component-tree.html#data-flow-between-components). -::: - -## `$mount()` - -Mount the component and its children. Triggers the `mounted` lifecycle method. - -**Return value** - -- `Promise`: returns the current instance when all children components are mounted - -## `$update()` - -Update the children list from the DOM, mount any unmounted components, and re-bind [event hooks](./methods-hooks-events.md#onreforchildnameevent). - -**Return value** - -- `Promise`: returns the current instance when all children components are updated - -::: tip -js-toolkit re-mounts already registered or mounted components automatically on newly injected elements. For now, call the `$update()` method to re-bind [event hooks](./methods-hooks-events.md#onreforchildnameevent). -::: - -## `$destroy()` - -Destroy the component and its children. Triggers the `destroyed` lifecycle method. - -**Return value** - -- `Promise`: returns the current instance when all children components are destroyed - -## `$terminate()` - -Terminate the component. Its instance becomes available for garbage collection. - -**Return value** - -- `Promise`: returns a promise resolving when all children components are terminated - -:::warning -A terminated component can not be re-mounted, use with precaution. -::: diff --git a/packages/docs/api/instance-properties.md b/packages/docs/api/instance-properties.md deleted file mode 100644 index 6ed75ca08..000000000 --- a/packages/docs/api/instance-properties.md +++ /dev/null @@ -1,183 +0,0 @@ -# Instance properties - -::: tip See also -For practical usage of refs, options, and children, see the [Refs](/guide/introduction/managing-refs.html), [Options](/guide/introduction/managing-options.html), and [Components](/guide/introduction/managing-components.html) guides. -::: - -## `$options` - -An object containing the full options of the instance as defined in [the `config.options` property](/api/configuration.html#config-options). Additionally to the options defined in the config, the following properties are also available: - -- `$options.name` The name of the component -- `$options.log` whether the `$log` method is silent or not -- `$options.debug` whether the debug is active on this instance or not - -The values for the `$options` object are read from and written to the `data-option-` attribute of the root element. - -:::tip -Boolean options with `true` as a default value can be negated with a `data-option-no-` attribute. -::: - -## `$refs` - -An object containing references to all the component's refs, with each key being the name of the ref, and each value either the DOM element or a list of DOM elements. - -```ts -interface RefsInterface { - readonly [refName: string]: HTMLElement | Base | HTMLElement[] | Base[]; -} -``` - -Refs are resolved with the selector `data-ref=""` within the component's scope. Refs of [children components](#components) are excluded, even if the child has not been registered via the [`config.components`](#components) object. - -:::tip -You can force a ref to be an `Array` even when only one corresponding element exists in the DOM by appending `[]` to its name: - -```html -
      -
    • -
    -``` - -::: - -## `$children` - -::: warning Deprecated -`$children` is deprecated and will be removed in v4. Use [`$query(name)`](./instance-methods.html#query-query) instead. - -Note that the two shapes differ: `$children` exposes a **name-keyed object** (`{ Figure: Figure[], Slider: Slider[] }`), whereas `$query(name)` returns a **flat `Base[]`** containing every matching descendant. Group by `$options.name` yourself if you need the name-keyed shape. - -See [Data flow between components](/guide/concepts/component-tree.html#data-flow-between-components). -::: - -An object containing references to all the children component instances, with each key being the name of the child component, and each value a list of its corresponding instances. - -```ts -interface ChildrenInterface { - readonly [ComponentName: string]: Array; -} -``` - -**Example usage** - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"ca4326860dd2ebfd7d4b0076aa55cf545049ef70bbe8093af22cef608c93d6bc","data":"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"} -import { Base } from '@studiometa/js-toolkit'; -import { Figure, Slider } from '@studiometa/ui'; - -/** - * @extends {Base<{ $children: { Figure: Figure[], Slider: Slider[] } }>} - */ -class App extends Base { - static config = { - name: 'App', - components: { - Figure, - Slider, - }, - }; - - mounted() { - for (const figure of this.$children.Figure) { - console.log(figure.$id); - } - - for (const slider of this.$children.Slider) { - console.log(slider.$id); - } - } -} -``` - -## `$config` - -The resolved configuration based on the current class [static `config` property](/api/configuration.html) merged with its ancestors properties. - -## `$parent` - -::: warning Deprecated -`$parent` is deprecated and will be removed in v4. Use [`$closest(name)`](./instance-methods.html#closest-query) instead. - -`$parent` is a **live getter** that walks up the DOM ancestors on every access. It resolves to `null` unless a **live** (mounting or mounted) ancestor both lists the current component in its [`config.components`](./configuration.md#config-components) and DOM-contains this instance. An ancestor that has not started mounting, has been terminated, or that reaches this instance through the DOM without declaring it in `config.components` will not be matched — hence the `null`. Because resolution is dynamic, never dereference `$parent` unguarded. - -See [Data flow between components](/guide/concepts/component-tree.html#data-flow-between-components). -::: - -The parent instance when the current instance component is registered as another [component child](./configuration.md#config-components), defaults to `null` otherwise. - -```ts twoslash {9} -// @twoslash-cache: {"v":1,"hash":"3cca79ec7bc274afaf78dd2c56beeb23f9e5ac9bef06061cb330cb12477ce30a","data":"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"} -import { Base } from '@studiometa/js-toolkit'; - -class Child extends Base { - static config = { - name: 'Child', - }; - - mounted() { - console.log(this.$parent instanceof Parent); // true - } -} - -class Parent extends Base { - static config = { - name: 'Parent', - components: { - Child, - }, - }; -} -``` - -## `$root` - -::: warning Deprecated -`$root` is deprecated and will be removed in v4. Use [`$closest(name)`](./instance-methods.html#closest-query) instead. - -Unlike the old `$root`, the [`$closest(name)`](./instance-methods.html#closest-query) replacement resolves an ancestor dynamically from the DOM and returns `undefined` when no matching ancestor has been constructed — there is **no self-reference fallback**. Always guard the result; never dereference it unguarded in `mounted()`. - -See [Data flow between components](/guide/concepts/component-tree.html#data-flow-between-components). -::: - -The root instance of the application when the current instance has been mounted as a [child component](#components). Defaults to a self reference if the component is stand-alone. - -## `$services` - -A [Service](https://github.com/studiometa/js-toolkit/blob/main/src/abstracts/Base/classes/Services.js) instance to manage the [`scrolled`](#scrolled-props), [`resized`](#resized-props), [`ticked`](#ticked-props), [`moved`](#moved-props), [`keyed`](#keyed-props) services hooks. - -The following methods are available: - -- `has(service: string): boolean`: test if the current component instance has the service method defined and if it is currently enabled -- `enable(service: string): () => void`: enable the given service if the current component instance has the service method defined, returns a function to disable the service -- `disable(service: string): void`: disable the given service -- `toggle(service: string, force?: boolean): void`: toggle the given service -- `get(service: string): any`: get the props of the given service -- `enableAll(): Array<() => void>`: enable all services which are defined -- `disableAll(): void`: disable all services - -**Example** - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"c0005834199f1985063b08460f356e6a1d58533a30a5384e1981517811ab2a92","data":"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"} -import { Base } from '@studiometa/js-toolkit'; - -class Component extends Base { - static config = { - name: 'Component', - refs: ['btn'], - }; - - onBtnClick() { - if (!this.$services.has('ticked')) { - this.$services.enable('ticked'); - } else { - this.$services.disable('ticked'); - } - } - - ticked() { - // Do something on each frame... - } -} -``` diff --git a/packages/docs/api/instantiation.md b/packages/docs/api/instantiation.md deleted file mode 100644 index 3a88ca303..000000000 --- a/packages/docs/api/instantiation.md +++ /dev/null @@ -1,106 +0,0 @@ -# Instantiation - -::: tip See also -For getting started with component setup, see the [Getting Started guide](/guide/) and [Components guide](/guide/introduction/managing-components.html). -::: - -## Usage - -```js {9-10} twoslash -// @twoslash-cache: {"v":1,"hash":"edb62580820d87ffd0ffb38230cf6105ff04afcfb8ae4327b8e7317d2f45bc94","data":"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"} -import { Base } from '@studiometa/js-toolkit'; - -class Component extends Base { - static config = { - name: 'Component', - }; -} - -const component = new Component(document.querySelector('.component')); -component.$mount(); -``` - -**Parameters** - -- `element` (`HTMLElement`): the root element of the component/application - -**Return value** - -Returns an instance of the class not yet mounted. - -:::tip Recommended -The [`registerComponent(Component)`](./helpers/registerComponent.html) function registers and mounts components independently — no need for a monolithic App class. -::: - -:::tip -The [`$register(nameOrSelector?: string)`](./static-methods.html#factory-nameorselector) static method instantiates multiple instances on elements matching a name (e.g. `[data-component=""]`) or a CSS selector. -::: - -:::tip -The [`createApp(Base, rootElement)`](./helpers/createApp.html) function configures global features (breakpoints, attributes, blocking) and gives access to the root app instance. -::: - -## Examples - -### Using `registerComponent` (recommended) - -Register and mount components independently: - -::: code-group - -```js twoslash [app.js] -// @twoslash-cache: {"v":1,"hash":"863db4a3ef1a65415c57f82117ff3b6bd38f84b77fa3aeab0d1c54e8193b95a1","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvUjADm7ODVIBhCAFsskmGDQAeACq86NMFDi8AQlxiqwi0oLERSvALyXrt+47TOAfIxOpIi8hgA+vAAKpOoKMAZ+FLxgzGowAPKkAMowrDBBAPwh9uxgstwh0bFw8QCCAO7M7DRQugCSdmjMojD62PH6fn7IALp+ADpg7BrOaNJyCkqqM2DaDFRQECIIiCAASguKZLyyrBAARmysGLzdULxqEMJzzCfsJFIi6pqrOknOt14WBiaji8zgEFYRFKsl4vkBXxWawAdJRqMxZDtkMgQBwwABrNH4NBoLBwRAAegpACs4ABaXyQ/HNZGKQRQCRpLrI2BECnMLDsCn4XI4UhwCkyeRHFTfLQ6ZHEtSsEAjCg4rDMUipNFBUIi3iIn5rQ2Sbx6gGvYHVGDgyHQspwiC8Fmq9UgTXatRolJpTI5PJ6/QG322gE1QO+FzwwQ1e78AFofAKU1IhVunEyNCCUhgNG1IEgsEyCFQmFO25SLXam4QfgPJ46GD3I3yualRTdETwVEjNUgTukBiIACcVDyZSTSAAjAB2KhdUiyGDDkBSxZkZbGnRovG4RAABioInwWuYYjISBHAF8KOh+nhCCRyAvjHhppoh7wt220YPhwAbPOuLaLIU6jguWrLquP6/OsuKlPu07Hqe2oXuQiCzre944I+xCXq+9BMGwnA8PM0pLHKcG6N0GABEEIS0Ukob+rk+RRkUvAlGUFRREWNQ0WAGCjBMUwzF+64yrBaxops2x4AcFHHKcFxXDcdwNs8gLyB8qbbmg/wuFa/G2iW9rlvCrytnBqKQZiSDYghBJEiSZKUjS9KMqwzJoKy2YcuoK7MDyMB8gKQoiqwYoSpJlFpr5SoqmqGpnt6x5RvqtrWSaXydA4FpGYWNp2mWjrwq6yUeqlPqpBk2RsUGIa1bw4YNRlMZxgIibJuY2XppVWY5nmVAFtaoI1CVDqwpZVakDWLX1o8zzNnpbYup0XY9qq/b/jOB7ISBk74DOwGLtBeCxZuVEyeOiFIAAzChZ7oUgB7YdQD67E+BHUG+uwfrM37XTuVC7Yg07TmOh1gcdEHokuK54NJINOfuj0gCez1KDOAAc179l8sDvuJczAORG6yvFvDXgIIK8AA5AAAmyAVcswHkMhATLNPTADckwA1+yNzPwdP08iFLC8itJ85MkyXZT+mMML3C82ibNIKAxjaHAEh5rstIgNe15AA"} -import { registerComponent } from '@studiometa/js-toolkit'; -import Component from './Component.js'; - -registerComponent(Component); -``` - -```js twoslash [Component.js] -// @twoslash-cache: {"v":1,"hash":"bb4cbb4fc3398dcf8167d6bc92672ea4b5802320374e1ccaaeeb04faa26e05be","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADc5iOgtc7khmezEuooXCkWicSoCSScFSGWyuXyhWKpQqVRqdQaTRaKXTYCzITKGLQVTA/gSllYxs+vW+2LW/tto3tv0d4LuLZCy3dSBPXvRmL9QfxFyJ11J9CYsa0ZEwPgSzLXgKyrJwzUPbELVPIEHXbJ0IWA3A3SRRBpifH0sXQo4TXTWA8F5Wx7GAOleCOXgM00SxeAAcgAAQnLVp2YIcVVHIpaNrMBzDoPl7FgDNmDKVh7BpERkxhd45HoJllFFfMwELHp134AQb3ZPMCyLZDc1oyTYTQWiKG0o5uPrKgWKQUBGTAOANzwTIQCOI4gA="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - }; -} -``` - -::: - -### Using `createApp` - -Use `createApp` when you need to configure global features or access the root app instance: - -::: code-group - -```js twoslash [app.js] -// @twoslash-cache: {"v":1,"hash":"e8526274c5a73133cac60a251280826c56b0ad8ed94b4bf6ebcffce50b26637f","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8kxsnDy8AGZlYHtVYAKkMMw0AIJYLCSADKcnoIyUDhgAGEIGBSqQyntbJIvMYKLxZPIIcoDJptLw9F5DNpjIwAVhELxgRitGgPnAAPxUgAS0gAsgAZACiwxqYHsAB9eNDvr8YBSAPJYelwnhUxh8HTGXiGSzsVQg3gAMihMmMZgs1ls9n4Yv+gKcLjceAAkvDggLODReMxFLxLBBXvZxt4QuwSJ9+NUbGARvY4bxfbx/YHeJoIPYYHzw7wAO74EZRzO8LChbzbEQAIxgWdYEGYsCg5jdUHjtTKpE+zGer3ekdyvDKqmz3maWF47Adbv43gzWaKg5EYqgGECM1C4Ui0TiVASSTgqQy2Vy+UKxVKFSqNTqDSaLRSmdYOFIcBSZp+Fqw/gSllYHS6IB6fUQAEYAKxDCMYwTIcC5zAsHgPuKFLLEOqwbCAWw7Hs1x/v+JxnDgeCECQ5AzLcHhWDYdgiiGcLhk434MIgABsgFRMB4wDOB8w0SAsLGmGApwWGSC/ps2ykLs+xIAA7Jh1DnDhVz4dQhFIb4Iiwd0sw0b+awMcMozMYgADMrGQSAKlRPBSAGUhQkiWhtGSZg2EeLh1wEfQdwcFwfCCMIepYuCii4qoJK6FCQWGsRJpQlarjuJ4Eg+MI87UIuSARKZsTxIkyRpJkOR5AURQlOUlTVLUzD1DAjTNK0H6qb06m/mJQE6aB0xJRB7FLEMZn6YJKGiX+AAcdnSY5sk3K5HiMFg+JkJgfAUv4wZgE87AhFSwDmLwW28GAzA1FSCJDiEADcm3bcGXHhpuvAbZ8233ZxobhlSboYKdd1bUc71HFFNoeLCy2rYlwRhCly5DquBCZZu2U7nl+6FUeJWnhV56tEtK0hI2vwfC+aBvjVX5qfxekWdpIFILRhnsRjq28asrXIcJqEHMcpxSQ5lx4eN7FTTNdgYHwu37bwh2jFRxN/pMA1NRTiCtbMbF4MLuBdXxiAMUz1kHJMw2c05ck0BNIB81os2CwI5HcWg123Q9VvPa6YBveYP21T+v70bLukadTeAXU9AoIGrqxU5ZfVobr7P2RcBs80w01mwLfCPRRAovc7Et1fxA1aUxoGDG1Sv/Q7PEh+JvXM/1tnRyNXPOfJxssO5jzQU+kgxxATy8BSGLEviJjkoCVKd93ve8HSDLMrwbJcryMD8kKIrmhKgLSrK8LcAqSoqmqGpSKPPeAjqer90YBrmOFpFt6vWC/TF9o9E64pO3Wnrer2MYBlmAdpxGnzRljFmBMSYUwCnTJmABOY8zzF4IWXgJYywVirDWd03xyhNldK2N4G8owQC7D2aM/ZBzDjeGOSBg57AanrJWOcQRkooHBulNc0Mtw5V3PlA8RVjylXKpVC8V4bx3hvgtV875OjuxogAJikWHcmulC6KyMiIy05c/xSMrtrfiGFa76zGi5GmSkj530kUgKRek5H53Mn7DwJkVj8Q0eHKuaEpEYU/MGWAeAr72GAFCDEKiBxHGeJoSwvAADkAABQ8xUTzMG3LlPcRQwnvW8WRS64CnghPCf4FIqdrb+EyMk8w5gvJ+GMWCBQkIvA3TOj0ek/BLaAxCISGpH0dp7RgFSMJFIwkUDOltX+1tbb9O2nk8MfS2knDOl9V2xSwy0BIvYWATxmBlFYKaFeFIh5YG4MdJwsSkCgGxPCD4eBMggCOEcIAA="} -import { Base, createApp } from '@studiometa/js-toolkit'; -import Component from './Component.js'; - -class App extends Base { - static config = { - name: 'App', - components: { - Component, - }, - }; -} - -export default createApp(App); -``` - -```js twoslash [Component.js] -// @twoslash-cache: {"v":1,"hash":"bb4cbb4fc3398dcf8167d6bc92672ea4b5802320374e1ccaaeeb04faa26e05be","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADc5iOgtc7khmezEuooXCkWicSoCSScFSGWyuXyhWKpQqVRqdQaTRaKXTYCzITKGLQVTA/gSllYxs+vW+2LW/tto3tv0d4LuLZCy3dSBPXvRmL9QfxFyJ11J9CYsa0ZEwPgSzLXgKyrJwzUPbELVPIEHXbJ0IWA3A3SRRBpifH0sXQo4TXTWA8F5Wx7GAOleCOXgM00SxeAAcgAAQnLVp2YIcVVHIpaNrMBzDoPl7FgDNmDKVh7BpERkxhd45HoJllFFfMwELHp134AQb3ZPMCyLZDc1oyTYTQWiKG0o5uPrKgWKQUBGTAOANzwTIQCOI4gA="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - }; -} -``` - -::: diff --git a/packages/docs/api/methods-hooks-events.md b/packages/docs/api/methods-hooks-events.md deleted file mode 100644 index 9d9f11bcd..000000000 --- a/packages/docs/api/methods-hooks-events.md +++ /dev/null @@ -1,193 +0,0 @@ -# Event hooks - -::: tip See also -For an introduction to event handling in components, see the [Events guide](/guide/introduction/working-with-events.html). -::: - -Event hooks are methods of a class prefixed by `on`. Each one runs when the given event is dispatched on the given target. Every method receives a single parameter `ctx` whose type is: - -```ts -type EventHooksCallbackParams = { - /** - * The event emitted - */ - event: Event; - /** - * If the event is emitted on a component, given arguments - * can be accessed with the `args` property. - */ - args: Array; - /** - * If the event is emitted on multiple refs or children, the `index` - * property will be the index of the current target. - */ - index: number; - /** - * The target that emitted the event. - */ - target: Element | Base | Promise | typeof window | typeof document; -}; -``` - -## `on` - -Methods following this pattern run when the event is triggered on the instance's `$el` element. - -**Parameters** - -- `ctx` (`EventHooksCallbackParams`): the context of the event - -**Example** - -```js {10-11,16} twoslash -// @twoslash-cache: {"v":1,"hash":"69fc360cefb8f8fd884043c854bfbda2570aa1ff8125be86012dbac6eec1e759","data":"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="} -import { Base } from '@studiometa/js-toolkit'; - -class Foo extends Base { - static config = { - name: 'Foo', - emits: ['custom-event'], - }; - - // Will be triggered when clicking on `this.$el` - onClick({ event }) { - event.preventDefault(); - this.$emit('custom-event', 'foo', 'bar'); - } - - // Will be triggered when emitting the `custom-event` event - onCustomEvent({ event, args: [arg1, arg2] }) { - console.log(arg1); // 'foo' - console.log(arg2); // 'bar' - } -} -``` - -## `on` - -Methods following this pattern run when the corresponding event is triggered on the corresponding ref or child element. - -**Parameters** - -- `ctx` (`EventHooksCallbackParams`): the context of the event - -:::tip -Native DOM events registered on a child component bind to the child root element if it supports the event. See the second example below with the `
    ` element. -::: - -**Examples** - -```html {2-3,13-16} -
    -
    - - -``` - -```html {2,20-21,23-24} -
    - -
    - - -``` - -## `onDocument` - -Methods following this pattern run when the `event` event is dispatched on the `document`. - -**Parameters** - -- `ctx` (`EventHooksCallbackParams`): the context of the event - -**Examples** - -Implement a click-outside behaviour: - -```js {14-16} twoslash -// @twoslash-cache: {"v":1,"hash":"e030e32c50cff0609b0d95fa60018db77cdcfb0d7b055e01375435b4758572e4","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAIppYLgDuYE49fYgArNNREZjCaIAAcM168wYHmeWnenyG7DAqwATJttqRdvskAA2E5nHB4QgkcgzW4eFgcLh8e5+BxSWTyEZKemGbS8PReNkmcxWGx2elOFxuRYSHzCQIQsJICJRJFxKgJJJwVIZbK5fKFYqlCpVGp1BpNFptTrdWbQgDsAEYhkDxlMIXMFh4lojkUg0SAtjs9tdECiAMz46jnIlXUnUckgRhYF5kTB8WGvCAffz8CBgABm7BCiF4wHMvCLvDAzBqedKpCRIQA3IXi6QYJmVbxK9XkO062AjkLXO4QABhDPZkKS6ihcKRaIKgiJZJpTI5PIFIolcqVaq1Zj1GCNZqtdNZnNlTFoKpgfwJSysDpdEDfaGgi220b2xA4x1Qu7DnPLJGrAN0R9bFDmDTBCQ8YlrjJegmFjLR4wwPhS3LVs0CrUYvnNJArTWT1hlfEEAVmL8PBQ3A3VWAFvUxX0DkmMDQ0g8Mblgil4JwOwkN4RtmwrdD23aLDemhK0UQBAjgQdccnWhEBeIQSikF+IDaJAhjThDCDLhJVi5MYfVCCgRMXnhfwM1ENAwAHDh+BiRhgDkEgwHsI48wLMBiyckY0DzZgwAwLsjm4PMiAgdgoGEn4rUmZ9AUInCNhk0iQAsqybPYOy/3dMFVKxP0UUY7SoIjGg2OjLAdn1Mg+F3Hy/ICqLRJxJLJLfFTkudEA6pc7LVnBL0MXyg4rV+IqLhKvS4Kq2oau8lyGowJqcItDq2pBDqSK6nqGCUw48roqZxrDXSYLk/ylrNEScNBG14qkxBRs/LrSi0NlQmYM8Mz6gYDpA3DjuY07I3Ki7lv9NZBnut9iMhLqEIROUctwv6/WOTTwImlizqYQzoBMuEUwvDNHlcMoahcjK7MYELeDCiLwZRcSXwep7OrkkmyYptAqZnFYcMAwbgIKwGdOgkHzsaq6fhRX5BfW5TnrkwQIEcPaYtRg5jjvdNYDwPlbHsRyvF4I5eEzTRLF4AByAABHUN31Zg1SXTUimtrtzFpEQk3hOR6GZZQxQ8osejPfgBB/EIOXzesi3IvNrd9onrYoOOeKbFtkGtgAjKzra6esjk9zzeDS6zbPsxydtNvgQ+LHa1zel4Pq+sAaa7LzxnYAIEY7ovzHrTn+HJnzeZp2PS6LbuAhV1R+9Lo5zB7KgnaQUAmTAOBzzwTIQCOI4gA==="} -import { Base } from '@studiometa/js-toolkit'; - -class Dropdown extends Base { - static config = { - name: 'Dropdown', - refs: ['btn'], - }; - - onBtnClick({ event }) { - event.stopPropagation(); - this.open(); - } - - onDocumentClick() { - this.close(); - } -} -``` - -## `onWindow` - -Methods following this pattern run when the `event` event is dispatched on the `window`. - -**Parameters** - -- `ctx` (`EventHooksCallbackParams`): the context of the event - -**Examples** - -Watch the page hash: - -```js {8-10} twoslash -// @twoslash-cache: {"v":1,"hash":"ef0fe91641e95122f3726a7d733034aa0a9f701c779ce700f652fb3dc1781c38","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiACs01EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+yQADYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAB2VEA0bjKaguYLDxLIaI1bWrY7PbXRDIyZ46jnQlXEnUMkgRhYTQ4OwYPhQ17vfz8GEAM3YIUQvGA5l4ed4YGYNSzpVIiJCAG5zEdBa53JC0xmJdRQuFItE4lQEkk4KkMtlcvlCsVShUqjU6g0mi0UimwOmQmUMWgqmB/AlLKxjZ9et8ABx7oaAu2IbEO8F3RshZZupAAZjRXqxhwDmAJHiJ11J9CYUa0ZEwPhC2LXhS3LJwzW+ABGNYHxtIF7RbR0IWA3BXSRRB/k9DFvQOf1TkDd9LmJG4f3JCdCCgeMXhhJMYQAdURFwAHcAAkuHwT1RhgRhgDkEg4V4I4sxzMB83494s2YMAMCrMAjm4LMiAgdgoAgr4kCgu8Nngk8oMPJCLw8BimIgNiOK4+Ybwwi1Hxw59kVfIMPxDUiIUjHYJzIPh9Uk3hpIwdTd00n4oKPW1gR+c8nRAXy4Ws1ZbJAbDMR9ZE7yOE0U1gPBeVsew+K8ITeFTTRLF4AByAABUctQnZh+xVIcigquTzBpEQE1owTGUUZRRVEvMehXfgBCvdls1zfNUKzCquthNAKooKajjasTeBMxQzPYuBOO2bjeIkwSFMm9a8zSXgXFA7VxnLXhmKKfBeHGbw3mY3htl2/xvpW6snHqpBQF6uBVzwTIQCOI4gA=="} -import { Base } from '@studiometa/js-toolkit'; - -class Component extends Base { - static config = { - name: 'Component', - }; - - onWindowHashchange({ event }) { - // do something with the new hash... - } -} -``` diff --git a/packages/docs/api/methods-hooks-lifecycle.md b/packages/docs/api/methods-hooks-lifecycle.md deleted file mode 100644 index 3eefb2b30..000000000 --- a/packages/docs/api/methods-hooks-lifecycle.md +++ /dev/null @@ -1,113 +0,0 @@ -# Lifecycle hooks - -::: tip See also -For an introduction to lifecycle hooks with examples, see the [Lifecycle guide](/guide/introduction/lifecycle-hooks.html). -::: - -## `mounted` - -Runs after the instance is mounted. - -**Parameters** - -> This method has no parameters. - -**Example** - -```js {9-12} twoslash -// @twoslash-cache: {"v":1,"hash":"52622767dc2f0af3e444f0e5dcbce93f47b83b3eb22716a2762bd39a24056b64","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADcBaLrAgOd4ACNVTBmGBa2AjoLXO5IZnsxLqKFwpFonEqAkknBUhlsrl8oViqUKlUanUGk0Wil02AsyEyhi0FUwP4EpZWMbPr1vti1v7baN7b9HeC7oOQst3UhH170ZifpBviFxEtcpL0EwsZaGQmB8CWZa8BWVZOGad7YhaT5Ag6I5OhCCG4G6SKINM/4+liJF4iGBIeGBEY0JB5LQfGcG8A2Tatvk7ZgKhXxINikzYlhL5/rM74eOx37EQArGi5F+pMVGYDRlzEjcjHRhuhBQEmLwwqmlgQGUcIwFAjDcLmRAQOwUC8be/E/BsALPsCNq4eJICGcZNC2URqyYWRGK+gcyJKaGtHhupEIxnGsGJnSkicnGJj+AAJOxuaMP42VgrOvDGTEkAAO5gMg7R8Doxi8FZNm9sKHgAMqWGwrC8PgMCsPGvC5GxjZIeUGYZsOwRSig46IpOBAKrOSoLqqy4amu2qbvq26tIiPRgPwMBZFp0ABBerAAMTsVke4KAwnQ3uayL+n+wwuThYnOiA6WNlJqz3nJQUUccJrprAeC8rY9jAHSvBHLwGaaJYvAAOQAAKrlqG7MPOKpLkUcNduYdB8vYsAZswZSsPYNIiMm+lwnI9BMsoor5mAhY9Ce/ACJ+7J5nWhYEbmcOU7CaBwxQ3O9U2aCkGUMAi0zEM47LXkmWZfCM0WvBpLwAAyjYiHDis+XDvBFe1TPjN46bQoLvDsCI+umaL4w22l7GMHrRlK3D3BdoWRzmD2VCo0goCMmAcCnngmQgEcRxAA=="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - mounted() { - // Logs 'mounted' when the component is mounted - this.$log('mounted'); - } -} -``` - -## `updated` - -Runs after the instance is updated. - -**Parameters** - -> This method has no parameters. - -**Example** - -```js {9-12} twoslash -// @twoslash-cache: {"v":1,"hash":"89c6977701802f27dd3fa1502204457330291eca7d5dc2c0f99f8a3f72688652","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADcBaLrAgOd4ACNVTBmGBa2AjoLXO5IZnsxLqKFwpFonEqAkknBUhlsrl8oViqUKlUanUGk0Wil02AsyEyhi0FUwP4EpZWMbPr1vti1v7baN7b9HeC7oOQst3UhH170ZifpBviFxEtcpL0EwsZaGQmB8CWZa8BWVZOGad7YhaT5Ag6I5OhCCG4G6SKINM/4+liJF4iGBIeGBEY0JB5LQfGcG8A2Tatvk7ZgKhXxINikzYlhL5/rM74eOx37EQArGi5F+pMVGYDRlzEjcjHRhuhBQEmLwwqmZRYFAzA0FAjDcLmRAQOwUC8be/E/BsALPsCNq4eJICGcZplSasmFkRivoHMiSmhrR4bqRCMZxrBiZ0pInJxiY/gACTsbmjD+FlYKzrwZSxJAADuYDIO0fA6MYvBWTZvbCh4ADKlhsKwvD4DArDxrwuRsY2SHlBmGbDsEUooOOiKTgQCqzkqC6qsuGprtqm76turSIj0YD8DAWRadAAQXqwADE7FZHuCgMJ0N7msi/p/sMLk4WJzogGlja+fxTneoFFHHCa6awHgvK2PYwB0rwRy8BmmiWLwADkAACq5ahuzDziqS5FLDXbmHQfL2LAGbMGUrD2DSIjJvpcJyPQTLKKK+ZgIWPQnvwAifuyeZ1oWBG5rDFOwmgsMUFzPVNmgpBlDAwuM+D2My15JkwGZfAM0WvBpLwAAyjYiLDCumbDvCFW1jPjN46bQgLvDsCI+tKyL4w26l7GMHrRmK1AsPcF2hZHOYPZUCjSCgIyYBwKeeCZCARxHEAA"} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - updated() { - // Logs 'updated' when the component is updated - this.$log('updated'); - } -} -``` - -## `destroyed` - -Runs when the component is destroyed. - -**Parameters** - -> This method has no parameters. - -**Example** - -```js {9-12} twoslash -// @twoslash-cache: {"v":1,"hash":"0e4706e63a61107f8b4e55690d52cb41b3a66341cfd6dc2e064d21aee77b026a","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADcBaLrAgOd4ACNVTBmGBa2AjoLXO5IZnsxLqKFwpFonEqAkknBUhlsrl8oViqUKlUanUGk0Wil02AsyEyhi0FUwP4EpZWMbPr1vti1v7baN7b9HeC7oOQst3UhH170ZifpBviFxEtcpL0EwsZaGQmB8CWZa8BWVZOGad7YhaT5Ag6I5OhCCG4G6SKINM/4+liJF4iGBIeGBEY0JB5LQfGcG8A2Tatvk7ZgKhXxINikzYlhL5/rM74eOx37EQArGi5F+pMVGYDRlzEjcjHRhuhBQEmLwwqmsAVhAGAwFAjDcLmRAQOwUC8be/E/BsALPsC/xic6zjwGgmgmbZRGrJhZEYr6BzIkpoa0eG6kQjGcawYmdKSJycYmP4AAk7G5ow/g5WCs68GUsSQAA7mAyDtHwOjGLwVk2b2woeAAypYbCsLw+AwKw8a8LkbGNkh5QZhmw7BFKKDjoik4EAqs5KguqrLhqa7apu+rbq0iI9GA/AwFkWnQAEF6sAAxOxWR7goDCdDe5rIoGwnAqR7kQhljZSas95ycFFHHCa6awHgvK2PYwB0rwRy8BmmiWLwADkAACq5ahuzDziqS5FLDXbmHQfL2LAGbMGUrD2DSIjJvpcJyPQTLKKK+ZgIWPQnvwAifuyeZ1oWBG5rDFOwmgsMUFzfVNt5ZQwMLjPg9j0uGd5xmmeZnPS4WaS8AAMo2Iiw/LPmmbDvDFR1jPjN46bQgLvDsCIeuK1AIvjDb6XsYwutefrUCw9wXaFkc5g9lQKNIKAjJgHAp54JkIBHEcQA==="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - destroyed() { - // Logs 'destroyed' when the component is destroyed - this.$log('destroyed'); - } -} -``` - -## `terminated` - -Runs when the component is terminated. - -**Parameters** - -> This method has no parameters. - -**Example** - -```js {9-12} twoslash -// @twoslash-cache: {"v":1,"hash":"eda4cdbf8c5ffe482c1e132845a3c2a25213ba76e65cd460a813134127282a1c","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADcBaLrAgOd4ACNVTBmGBa2AjoLXO5IZnsxLqKFwpFonEqAkknBUhlsrl8oViqUKlUanUGk0Wil02AsyEyhi0FUwP4EpZWMbPr1vti1v7baN7b9HeC7oOQst3UhH170ZifpBviFxEtcpL0EwsZaGQmB8CWZa8BWVZOGad7YhaT5Ag6I5OhCCG4G6SKINM/4+liJF4iGBIeGBEY0JB5LQfGcG8A2Tatvk7ZgKhXxINikzYlhL5/rM74eOx37EQArGi5F+pMVGYDRlzEjcjHRhuhBQEmLwwqm+yWIizA0FAjDcLmRAQOwUC8be/E/BsALPsC95vs6kakEZJamVJqyYWRGK+gcyJKaGtHhupEIxnGsGJnSkicnGJj+AAJOxuaMP42VgrOvBlLEkAAO5gMg7R8Doxi8FZNm9sKHgAMqWGwrC8PgMCsPGvC5GxjZIeUGYZsOwRSig46IpOBAKrOSoLqqy4amu2qbvq26tIiPRgPwMBZFp0ABBerAAMTsVke4KAwnQ3uayKTJ6wwuThYkeeljZ+fxTnekFFHHCa6awHgvK2PYwB0rwRy8BmmiWLwADkAACq5ahuzDziqS5FLDXbmHQfL2LAGbMGUrD2DSIjJvpcJyPQTLKKK+ZgIWPQnvwAifuyeZ1oWBG5rDFOwmgsMUFzvVNmgpBlDAwuM+D2My4ZxmmeZnMy4WaS8AAMo2IiwwrPkwFAsO8EV7WM+M3jptCAu8OwIh6yZBsi+MttpexjC62Q3kO4b3BdoWRzmD2VAo0goCMmAcCnngmQgEcRxAA="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - terminated() { - // Logs 'terminated' when the component is terminated - this.$log('terminated'); - } -} -``` diff --git a/packages/docs/api/methods-hooks-services.md b/packages/docs/api/methods-hooks-services.md deleted file mode 100644 index 4e3511d4c..000000000 --- a/packages/docs/api/methods-hooks-services.md +++ /dev/null @@ -1,155 +0,0 @@ -# Services hooks - -::: tip See also -For an introduction to using services in components, see the [Services guide](/guide/introduction/using-services.html). For the service architecture overview, see [Service Architecture](/guide/concepts/service-architecture.html). -::: - -## `scrolled` - -Called when the user is scrolling. - -**Arguments** - -- `props` (`ScrollServiceProps`): The [scroll service props](/api/services/useScroll.html#props). - -**Example** - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"034ac5b7029bb78ee88e624229a89bc601f8118971653ff288266fb37ac5b4bf","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADcBaLrAgOd4ACNVTBmGBa2AjoLXO5IZnsxLqKFwpFonEqAkknBUhlsrl8oViqUKlUanUGk0Wil02AsyEyhi0FUwP4EpZWMbPr1vti1v7baN7b9HeC7oOQst3UhH170ZifpBviFxEtcpL0EwsZaGQmB8CWZa8BWVZOGad7YhaT5Ag6I5OhCCG4G6SKINM/4+liJF4iGBIeGBEY0JB5LQfGcG8A2Tatvk7ZgKhXxINikzYlhL5/rM74eOx37EQArGi5F+pMVGYDRlzEjcjHRhuhBQEmLwwqmcD8JorDDFAMZxrOvAdomuZEBA7BQLxt78T8GwAs+wKYbh4mmkZ+SmVJqxed6GK+gcyJKaGtHhupEIxjsG5kHwzGWdZTnmtifzCcCsnec6IApYFSDBQBYX8biwbKaBMUQXFzGwYmdKSJyFnGP4AAk7G5ow/i9WClllLEkAAO5gMg7R8Doxi8HZDm9sKHgAMqWGwrC8PgMCsPGvC5GxjZIeUGYZsOwRSig46IpOBAKrOSoLqqy4amu2qbvq26tIiPRgPwMBZFp0ABBerAAMTsVke4KAwnQ3hl1rZThYn5Z1jZFSCZGhRRwHUdVam1VBCW1ElvApbmaUw98yJrLlwweUguWIxChVEas/whYB4VWkcJrprAeC8rY9jAHSvBHLwGaaJYvAAOQAAKrlqG7MPOKpLkUUtduYdB8vYsAZswZSsPYNIiMm+lwnI9BMsoor5mAhY9Ce/ACJ+7J5nWhYEbmUum7CaBSxQ7t7U2aCkGUMAB3bIsa5HhnGaZ5lGHwttFjt+DsAEyMhIwUux/5Vb+8TFncF2hZHOYPZUIrSCgIyYBwKeeCZCARxHEAA="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - scrolled(props) { - this.$log('scrolling', props); - } -} -``` - -:::tip Tip -See the [`useScroll` service](/api/services/useScroll.html) for more details. -::: - -## `resized` - -Called when the document has been resized. - -**Arguments** - -- `props` (`ResizeServiceProps`): The [resize service props](/api/services/useResize.html#props). - -**Example** - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"175d415b09a346dfbab2110a8d125a790367fb90cd28da24ed0e1edfb13fe6bd","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADcBaLrAgOd4ACNVTBmGBa2AjoLXO5IZnsxLqKFwpFonEqAkknBUhlsrl8oViqUKlUanUGk0Wil02AsyEyhi0FUwP4EpZWMbPr1vti1v7baN7b9HeC7oOQst3UhH170ZifpBviFxEtcpL0EwsZaGQmB8CWZa8BWVZOGad7YhaT5Ag6I5OhCCG4G6SKINM/4+liJF4iGBIeGBEY0JB5LQfGcG8A2Tatvk7ZgKhXxINikzYlhL5/rM74eOx37EQArGi5F+pMVGYDRlzEjcjHRhuhBQEmLwwqmpDwOwABeMBQDGcazrwHaJrmRAQOwUC8be/E/BsALPsCNq4eJICGXAJlmVJqyYWRGK+gcyJKaGtHhupEIxjsG5kHwzFWTZznmtiPyhcMnlILJPnOiAaXBUgoXeuFFH3tFKl0fFUFxrBiZ0pInKWcY/gACTsbmjD+ANYJWWUsSQAA7mAyDtHwOjGLw9mOb2woeAAypYbCsLw+AwKw8a8LkbGNkh5QZhmw7BFKKDjoik4EAqs5KguqrLhqa7apu+rbq0iI9GA/AwFkWnQAEF6sAAxOxWR7goDCdDeWUWj8wnAqRYnFT1jZlSCYWAQcwHUaBcUQQlWBJbUKW8GluYZfD3zImsnp5dhiCFWjEKlURqz/JVuMotJRwmumsB4Lytj2MAdK8EcvAZpoli8AA5AAAquWobsw84qkuRQK125h0Hy9iwBmzBlKw9g0iIyb6XCcj0EyyiivmYCFj0J78AIn7snmdaFgRuYK9bsJoArFC+4dTZoKQZQwGHLtS3r8f+YF5lpXwztFvt+DsAEGMhIwCvJ6ZUCh5TlncF2hZHOYPZUOrSCgIyYABTCeCZCARxHEAA="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - resized(props) { - this.$log('resized', props); - } -} -``` - -:::tip Tip -See the [`useResize` service](/api/services/useResize.html) for more details. -::: - -## `keyed` - -Called when the user is typing. - -**Arguments** - -- `props` (`KeyServiceProps`): The [key service props](/api/services/useKey.html#props). - -**Example** - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"5b7d47300b5e852df56ac50da413c5f73323a8ecd547aeeaeb32648f984b8383","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADcBaLrAgOd4ACNVTBmGBa2AjoLXO5IZnsxLqKFwpFonEqAkknBUhlsrl8oViqUKlUanUGk0Wil02AsyEyhi0FUwP4EpZWMbPr1vti1v7baN7b9HeC7oOQst3UhH170ZifpBviFxEtcpL0EwsZaGQmB8CWZa8BWVZOGad7YhaT5Ag6I5OhCCG4G6SKINM/4+liJF4iGBIeGBEY0JB5LQfGcG8A2Tatvk7ZgKhXxINikzYlhL5/rM74eOx37EQArGi5F+pMVGYDRlzEjcjHRhuhBQEmLwwqmMQwBgMBQDGcazrwHaJrmRAQOwUC8be/E/BsALPsCsm4eJICGcZDlEasmFkRivoHMiSmhrR4bqRCMY7BuZB8MxFlWY55rYj8PzCR5b7OiAyVSYFckhRRFoRSpdExVBcawYmdKSJy5nGP4AAk7G5ow/hdWCFllLEkAAO5gMg7R8Doxi8LZ9m9sKHgAMqWGwrC8PgMCsPGvC5GxjZIeUGYZsOwRSig46IpOBAKrOSoLqqy4amu2qbvq26tIiPRgPwMBZFp0ABBerAAMTsVke4KAwnQ3ulFqkcM7k4WJeVtY2hUDMVgEHMB1GgdFEGxVg8W1IlvDJbmqWQ3e/RBbD2GIJ5CMQgVAWo8F6Mov6RwmumsB4Lytj2MAdK8EcvAZpoli8AA5AAAquWobsw84qkuRQS125h0Hy9iwBmzBlKw9g0iIyb6XCcj0EyyiivmYCFj0J78AIn7snmdaFgRuYS8bsJoBLFCu9tTZoKQZQwH7NtC2r4e+SZZlGHw1tFpt+DsAESMhIwEvR1AvvE+Z3BdoWRzmD2VDy0goCMmAcCnngmQgEcRxAA"} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - keyed(props) { - this.$log('keyed', props); - } -} -``` - -:::tip Tip -See the [`useKey` service](/api/services/useKey.html) for more details. -::: - -## `moved` - -Called when the user is moving their cursor. - -**Arguments** - -- `props` (`PointerServiceProps`): The [pointer service props](/api/services/usePointer.html#props). - -**Example** - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"5e7d262323c006348a5c51c81acf0d8a6f87c208fd122f6d17fea63f772fbdf6","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADcBaLrAgOd4ACNVTBmGBa2AjoLXO5IZnsxLqKFwpFonEqAkknBUhlsrl8oViqUKlUanUGk0Wil02AsyEyhi0FUwP4EpZWMbPr1vti1v7baN7b9HeC7oOQst3UhH170ZifpBviFxEtcpL0EwsZaGQmB8CWZa8BWVZOGad7YhaT5Ag6I5OhCCG4G6SKINM/4+liJF4iGBIeGBEY0JB5LQfGcG8A2Tatvk7ZgKhXxINikzYlhL5/rM74eOx37EQArGi5F+pMVGYDRlzEjcjHRhuhBQEmLwwqmlhXFAMZxrOvAdomuZEBA7BQLxt78T8GwAs+wKybh4kgIZJB2URqyYWRGK+gcyJKaGtHhupEIxjsG5kHwzFmRZ9nmtiPw/MJblvs6ICJVJ/lyUFFEWmFKl0VFUFxrBiZ0pInKmcY/gACTsbmjD+B1YJmWUsSQAA7mAyDtHwOjGLw1m2b2woeAAypYbCsLw+AwKw8a8LkbGNkh5QZhmw7BFKKDjoik4EAqs5KguqrLhqa7apu+rbq0iI9GA/AwFkWnQAEF6sAAxOxWR7goDCdDeqUWqRwyuThYk5S1jb5QMhWAQcwHUaBkUQdFWCxbU8W8IlubJeDd79AF0PYYg7lwxCeV+cjgWoyi/pHCa6awHgvK2PYwB0rwRy8BmmiWLwADkAACq5ahuzDziqS5FGLXbmHQfL2LAGbMGUrD2DSIjJvpcJyPQTLKKK+ZgIWPQnvwAifuyeZ1oWBG5mLhuwmgYsUM7m1NmgpBlDAPtWwLKuh95MDGYlfCW0W634OwAQIyEjBi5HUDe4TpncF2hZHOYPZULLSCgIyYBwKeeCZCARxHEAA==="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - moved(props) { - this.$log('moved', props); - } -} -``` - -:::tip Tip -See the [`usePointer` service](/api/services/usePointer.html) for more details. -::: - -## `ticked` - -Executed on every frame with `requestAnimationFrame`. - -**Arguments** - -- `props` (`RafServiceProps`): The [raf service props](/api/services/useRaf.html#props). - -**Example** - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"13ce3e3b716c4364be322c2a293d2d331e3ca0a47a754af0935b36db6130a4f1","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiABsg1EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+xRAEYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAAOADsQ0B4ymoLmCw8SyGiNWqJAWx2e2uiAAzMdTtRzoSriTqGSQIwsJocHYMHwoa93v5+DCAGbsEKIXjAcy8Qu8MDMGq50qkREhADcBaLrAgOd4ACNVTBmGBa2AjoLXO5IZnsxLqKFwpFonEqAkknBUhlsrl8oViqUKlUanUGk0Wil02AsyEyhi0FUwP4EpZWMbPr1vti1v7baN7b9HeC7oOQst3UhH170ZifpBviFxEtcpL0EwsZaGQmB8CWZa8BWVZOGad7YhaT5Ag6I5OhCCG4G6SKINM/4+liJF4iGBIeGBEY0JB5LQfGcG8A2Tatvk7ZgKhXxINikzYlhL5/rM74eOx37EQArGi5F+pMVGYDRlzEjcjHRhuhBQEmLwwqmJ78DEMBQDGcazrwHaJrmRAQOwUC8be/E/BsALPsCPxvs61DsEZJlSasmFkRivoHMiSmhrR4bqRCMY7BuZB8MxFlWY55rYj8NpudhiCybh4kgMlAVIEF3ohRRwHUaB0UQbFzGwYmdKSJy5nGP4AAk7G5ow/i9WCFllLEkAAO5gMg7R8Doxi8LZ9m9sKHgAMqWGwrC8PgMCsPGvC5GxjZIeUGYZsOwRSig46IpOBAKrOSoLqqy4amu2qbvq26tIiPRgPwMBZFp0ABBerAAMTsVke4KAwnQ3ulFp5cM7k4WJ3mdY2xUgsFgEHJVynVWptVQfFtSJbwyW5qlMPfMiayuQjOV5cjEJFURqz/GVWMoopJrprAeC8rY9jAHSvBHLwGaaJYvAAOQAAKrlqG7MPOKpLkUUtduYdB8vYsAZswZSsPYNIiMm+lwnI9BMsoor5mAhY9IZAifuyeZ1oWBG5lLpuwmgUsUG7e1NmgpBlDA/t2yLGsR4ZxmmclfC20WO34OwASoyEjBSzHJl+6T5ncF2hZHOYPZUIrSCgIyYBwKeeCZCARxHEAA=="} -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - ticked(props) { - this.$log('ticked', props); - } -} -``` - -:::tip Tip -See the [`useRaf` service](/api/services/useRaf.html) for more details. -::: diff --git a/packages/docs/api/services/index.md b/packages/docs/api/services/index.md deleted file mode 100644 index 3b3aade4f..000000000 --- a/packages/docs/api/services/index.md +++ /dev/null @@ -1,33 +0,0 @@ -# Services - -::: tip See also -For an introduction to using services in components, see the [Services guide](/guide/introduction/using-services.html). For architecture details, see [Service Architecture](/guide/concepts/service-architecture.html). -::: - -Services implement common tasks and hide their repetitive parts. A service always has the following signature: - -```ts -interface ServiceProps { - [key:string]: any; -} - -interface Service { - add: (key:string, fn: (props:ServiceProps) => void) => void; - remove: (key:string) => void; - has: (key:string) => boolean; - props: () => ServiceProps; -} - -useService(...args?):Service; -``` - -The following services are available: - -- [useDrag](./useDrag.html) to implement drag features -- [useKey](./useKey.html) to implement keyboard features -- [useLoad](./useLoad.html) to implement window load features -- [useMutation](./useMutation.html) to implement DOM mutation features -- [usePointer](./usePointer.html) to implement mouse/touch features -- [useRaf](./useRaf.html) to implement `requestAnimationFrame` features -- [useResize](./useResize.html) to implement window resize features -- [useScroll](./useScroll.html) to implement scroll features diff --git a/packages/docs/api/services/useDrag.md b/packages/docs/api/services/useDrag.md deleted file mode 100644 index eafac207b..000000000 --- a/packages/docs/api/services/useDrag.md +++ /dev/null @@ -1,127 +0,0 @@ ---- -outline: deep ---- - -# Drag service - -The drag service runs registered callbacks on drag interactions with an element. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"852a216ed7d99ed80265c7d1277ab2574f8b8b8d676ebe8f147f2399a163b408","data":"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="} -import { useDrag } from '@studiometa/js-toolkit'; - -const target = document.querySelector('.draggable'); -const { add, remove, props } = useDrag(target, { - dampFactor: 0.5, - dragTreshold: 10, -}); - -add('custom-id', (props) => { - console.log(props.mode); // 'start', 'drag', 'drop', 'inertia' or 'stop' - console.log(props.MODES); // an object of all available modes - console.log(props.isGrabbing); // true if the target element is grabbed - console.log(props.x); // horizontal position of the cursor in the viewport - console.log(props.y); // vertical position of the cursor in the viewport -}); - -// Get the latest prop object -console.log(props()); - -// Remove the callback -remove('custom-id'); -``` - -## Parameters - -### `target` - -- Type : `HTMLElement` - -The target element of the drag. - -### `options` - -- Type : `{ dampFactor?: number, dragTreshold?: number }` - -Options for the drag behavior. The `dampFactor` option is used for the inertia, it defaults to `0.5`. The `dragTreshold` property is the distance from which we prevent clicks on child elements, it defaults to `10` (pixels). - -## Props - -### `mode` - -- Type: `'start'|'drag'|'drop'|'inertia'|'stop'` - -The current mode of the dragging logic. - -### `MODES` - -- Type: `{ START: 'start', DRAG: 'drag', DROP: 'drop', INERTIA: 'inertia', STOP: 'stop' }` - -An object representing the different mode of the draggin logic. Use it to match against the current mode: - -```js twoslash {2} -// @twoslash-cache: {"v":1,"hash":"4df7eee3014addd915dfc68a84b2e0c2133eb8627d9e228c51c8391f2ec87c0f","data":"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"} -import { useDrag } from '@studiometa/js-toolkit'; -// ---cut--- -useDrag(target).add('key', (props) => { - if (props.mode === props.MODES.START) { - console.log('drag is starting'); - } -}); -``` - -### `target` - -- Type: `HTMLElement` - -The target element of the drag. - -### `isGrabbing` - -- Type: `boolean` - -Whether the user is currently grabbing the targeted element or not. - -### `hasInertia` - -- Type: `boolean` - -Whether the drag currently has inertia or not. - -### `x` - -- Type: `number` - -The current horizontal position in the viewport. - -### `y` - -- Type: `number` - -The current vertical position in the viewport. - -### `delta` - -- Type: `{ x: number, y: number }` - -The delta between the current position and the previous position. - -### `origin` - -- Type: `{ x: number, y: number }` - -The initial position where the dragging started. - -### `distance` - -- Type: `{ x: number, y: number }` - -The distance from the current position to the origin. - -### `final` - -- Type: `{ x: number, y: number }` - -The final position that will be reached at the end of the inertia. diff --git a/packages/docs/api/services/useKey.md b/packages/docs/api/services/useKey.md deleted file mode 100644 index 4373bcf3a..000000000 --- a/packages/docs/api/services/useKey.md +++ /dev/null @@ -1,115 +0,0 @@ ---- -outline: deep ---- - -# Key service - -The key service runs registered callbacks on keyboard events. It merges the `keydown` and `keyup` events. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"1ae0ca9345d431402f26817191bd84a99e82957312f7414f7613af67d96d960e","data":"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"} -import { useKey } from '@studiometa/js-toolkit'; - -const { add, remove, props } = useKey(); - -add('custom-id', (props) => { - console.log(props.direction); // 'down' on keydown, 'up' on keyup - console.log(props.isUp); // true on keyup, false on keydown - console.log(props.isDown); // true on keydown, false on keyup - console.log(props.triggered); // 1 - console.log(props.ENTER); // will be `true` when the pressed key is enter -}); - -// Get the latest prop object -console.log(props()); - -// Remove the callback -remove('custom-id'); -``` - -## Props - -### `event` - -- Type: [`KeyboardEvent`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent) - -The original event instance. - -### `direction` - -- Type: `String` -- Values: `up` or `down` - -The direction of the keystroke, `up` for the event is of type `keyup`, `down` when the event is of type `keydown`. - -### `isUp` - -- Type: `Boolean` - -A boolean for the event's direction. Will be `true` on `keyup` events. - -### `isDown` - -- Type: `Boolean` - -A boolean for the event's direction. Will be `true` on `keydown` events. - -### `triggered` - -- Type: `Number` - -The number of time, especially for `keydown` events, the events have been fired. - -### `ENTER` - -- Type: `Boolean` - -Will be `true` if the key initiating the event is the enter key. - -::: tip -The `ENTER` prop and the following ones are mapped from the [`keyCodes`](/utils/#keycodes) utility. -::: - -### `SPACE` - -- Type: `Boolean` - -Will be `true` if the key initiating the event is the space key. - -### `TAB` - -- Type: `Boolean` - -Will be `true` if the key initiating the event is the tab key. - -### `ESC` - -- Type: `Boolean` - -Will be `true` if the key initiating the event is the escape key. - -### `LEFT` - -- Type: `Boolean` - -Will be `true` if the key initiating the event is the left key. - -### `UP` - -- Type: `Boolean` - -Will be `true` if the key initiating the event is the up key. - -### `RIGHT` - -- Type: `Boolean` - -Will be `true` if the key initiating the event is the right key. - -### `DOWN` - -- Type: `Boolean` - -Will be `true` if the key initiating the event is the down key. diff --git a/packages/docs/api/services/useLoad.md b/packages/docs/api/services/useLoad.md deleted file mode 100644 index de388eac3..000000000 --- a/packages/docs/api/services/useLoad.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -outline: deep ---- - -# Load service - -The load service runs registered callbacks on the `window` load event. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"87308d13227fcfe5021b9e2b102a14b7600726acd713d05915235e9884da3bc2","data":"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="} -import { useLoad } from '@studiometa/js-toolkit'; - -const { add, remove } = useLoad(); - -// Add a callback -add('custom-id', () => { - console.log('loaded!'); -}); - -// Remove the callback -remove('custom-id'); -``` - -## Props - -This service does not have any props. diff --git a/packages/docs/api/services/useMutation.md b/packages/docs/api/services/useMutation.md deleted file mode 100644 index 388392797..000000000 --- a/packages/docs/api/services/useMutation.md +++ /dev/null @@ -1,63 +0,0 @@ -# Mutation service - -The mutation service observes DOM mutations on a component with the MutationObserver API. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"85a532a3a47ab81137c3808d48485a980296bd7b950fa09f8c18f647aa5abbd5","data":"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"} -import { useMutation } from '@studiometa/js-toolkit'; - -const { add, remove } = useMutation(); - -// Add a callback -add('custom-id', ({ mutations }) => { - console.log('Some attribute has changed!'); -}); - -// Remove the callback -remove('custom-id'); -``` - -## Parameters - -### `target` - -- Type: `Node` - -The target element to observe, defaults to `document.documentElement`. - -**Example** - -Observe any attribute mutation on the `` element: - -```js -const service = useMutation(document.body); -``` - -### `options` - -- Type: [`MutationObserverInit`](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/observe#options) - -Options for the mutation observer, defaults to `{ attributes: true }` only. - -**Example** - -Observe everything on the given element: - -```js -const element = document.querySelector('#element'); -const service = useMutation(element, { - attributes: true, - childList: true, - subtree: true, -}); -``` - -## Props - -### `mutations` - -- Type: `MutationRecord[]` - -The list of `MutationRecord` that triggered the callback. diff --git a/packages/docs/api/services/usePointer.md b/packages/docs/api/services/usePointer.md deleted file mode 100644 index be3568de3..000000000 --- a/packages/docs/api/services/usePointer.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -outline: deep ---- - -# Pointer service - -The pointer service runs registered callbacks on cursor movement. It merges the mouse and touch `move`, `up` and `down` events. Pass an `HTMLElement` to the `usePointer` function to make the positional props (`x`, `y`, etc.) relative to that element's size. By default, positions are based on the viewport's size. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"e54acdd50f312bd4d0c7df1ec3242ebaed620edf7239f011f422556073b0b883","data":"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"} -import { usePointer } from '@studiometa/js-toolkit'; - -const { add, remove, props } = usePointer(); - -add('custom-id', (props) => { - console.log(props.isDown); // `true` if the pointer is down - console.log(props.x); // the pointer X position - console.log(props.y); // the pointer Y position - console.log(props.event); // the latest MouseEvent object -}); - -// Get the latest prop object -console.log(props()); - -// Remove the callback -remove('custom-id'); -``` - -## Parameters - -### `target` - -- Type : `HTMLElement | undefined` - -The target element to use to compute the positionnal props. - -## Props - -### `event` - -- Type: `MouseEvent` - -### `isDown` - -- Type: `Boolean` - -### `x` - -- Type: `Number` - -### `y` - -- Type: `Number` - -### `changed` - -- Type: `Object` -- Interface: `{ x: boolean, y: boolean }` - -For both axis, whether or not the current position has changed since the last one. - -### `last` - -- Type: `Object` -- Interface: `{ x: number, y: number }` - -The last position on both the `x` and `y` axis. - -### `delta` - -- Type: `Object` -- Interface: `{ x: number, y: number }` - -The difference between the last position and the current one. - -### `progress` - -- Type: `Object` -- Interface: `{ x: number, y: number }` - -The position on both axis mapped to a `0` to `1` range. - -::: tip Examples -If the cursor is in the **middle of the viewport or the target element**, the value of this prop will be: - -```js -{ x: 0.5, y: 0.5 } -``` - -If the cursor is in the **top left corner of the viewport or the target element**, the value of this prop will be: - -```js -{ x: 0, y: 0 } -``` - -::: - -### `max` - -- Type: `Object` -- Interface: `{ x: number, y: number }` - -The maximum value the pointer can reach. The values of `window.innerWidth` and `window.innerHeight` by default, the widht and height of the element when the service is used with a target element. diff --git a/packages/docs/api/services/useRaf.md b/packages/docs/api/services/useRaf.md deleted file mode 100644 index cd43ac7a8..000000000 --- a/packages/docs/api/services/useRaf.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -outline: deep ---- - -# RAF service - -The RAF (short for `requestAnimationFrame`) service runs registered callbacks on every animation frame. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"f5806ce6eb09eacf243fefab727dde3b0a1efd81f3e03fb0b9dce61ce4b07622","data":"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"} -import { useRaf } from '@studiometa/js-toolkit'; - -const { add, remove, props } = useRaf(); - -add('custom-id', (props) => { - console.log(props.time); // latest `performance.now()` - console.log(props.delta); // time elapsed since the last frame - - // Read the DOM and compute values... - - return () => { - // Update the DOM... - }; -}); - -// Get the latest prop object -console.log(props()); - -// Remove the callback -remove('custom-id'); -``` - -## Props - -### `time` - -- Type: `Number` - -The time elapsed since the [time origin](https://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp#The_time_origin). - -::: tip -Read the [`performance.now()` documentation](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) to find out more on the time origin. -::: - -### `delta` - -- Type: `Number` - -The time elapsed between the current frame and the previous frame in milliseconds. This value is `0` on the first frame and represents the frame duration for subsequent frames. - -::: tip -The `delta` property is useful for creating frame-rate independent animations and calculations. You can use it to scale movement or animations based on the actual time elapsed between frames. -::: diff --git a/packages/docs/api/services/useResize.md b/packages/docs/api/services/useResize.md deleted file mode 100644 index 5e6f8b8df..000000000 --- a/packages/docs/api/services/useResize.md +++ /dev/null @@ -1,124 +0,0 @@ ---- -outline: deep ---- - -# Resize service - -The resize service runs registered callbacks on window resize. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"d4868666259dba393da3a176b2a2e70501ae5d746bf7bc19ec7d3f62c1c7d025","data":"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"} -import { useResize } from '@studiometa/js-toolkit'; - -const { add, remove, props } = useResize(); - -add('custom-id', (props) => { - console.log(props.width); // the viewport's width - console.log(props.height); // the viewport's height - console.log(props.ratio); // the width / height ratio - console.log(props.orientation); // the orientation of the viewport - console.log(props.breakpoint); // the current active breakpoint - console.log(props.breakpoints); // all breakpoints' names - console.log(props.activeBreakpoints); // a record of all breakpoints and their status as boolean -}); - -// Get the latest prop object -console.log(props()); - -// Remove the callback -remove('custom-id'); -``` - -::: warning IMPORTANT -A debounce of 300ms is configured to limit the execution of each resize callback to only when the window stops being resized. -::: - -### Define custom breakpoints - -The `useResize()` service accepts an object defining breakpoints as parameter. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"f01ec8c71cc937532cc9c708997814c481070bd536f11ea3ffcc4fe861014fdf","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808BjCMONAAi1IizkXYAUASnYBeAHzsASvACWALxgBlMkVmMYABW68APMAA6YdifZ8zaUrLABzANxHT7ALb82V2w+OmANm8vW9kYAvuKUIFAQjAiIIADiMBxo+DBmquowAORwnDpwAHThbACGpAyIABxUPjC2yUgArFRopTaJeFw8CNXWuIgADFSM+KXFjDTklcEU6Nh9BMRk4TT0eALFPrLFcCIArnAwMnAKMPqOpubugV5OrhYeQd4mfvfXIeICAEakMMUA1lgINY0HAAPz8QxPMz+B43Ux3K6ec7PGFvMDBdgAH3YuzAsAAZr0oEJ+EcTipSGoNABJMATfFjU6QpyXAJIqEItmPJwvRGPUJGWTOQFlHEHMmKcKRaJ4ACqB3YyVSP2OijSlIyhWaxRsMWQyBAmzAf3C+DQaF4iAA9FaAFZwAC0aAgEB8f1kaHybF2UFkEGciWK+VgRCtxSwsitBw1GjgVv2hzkinyZucPhAAF0M1QSmUkABGKqG2o2eqIACc2tIbXKIATEtwPTAfUGIGGo3GS0QhemsxweEIJHIzTotYEnRwZQwIlZDyKLTziAAzAAmaolsv5qs1vDdQ29AtDEakMYTJAr3vUOYDxbD6ijtYTsiYEScuc5hflAAsX/XdXwh7UK07SxM44RGn0a5tsep5dheMxXv2sSDksI6rLE446M+07sLyXLzqU5QNEWNT/oBC47rE6ZNn0S5Hh2Z6IPBfbzChd4rLWYDFAGcBYIy7DMKwrowEYRClAJLBwMJ/AAMKScJUpRDEIAACopOwAAGglSTUGkuNAuw1LkxCyLAOTFGYQpYEZsCfLsNg2IEElCUZyTFBwsg5McziyD44nOoqKRGAAUsUYlKIwVhYBw2nCS4MDtmAnnOMZaiwFA7CfBg7AAO4wJ8mXcDl0YFEYRhqakzgGUZdAiiCio5RAZg4IwsiEowEnCiwtQgogZVgAAVOwACCmlyS5MB6YwflwDkOUevg8XJNAXm7MM7DbJpsU1PkPgQDYwgaRQW3yTtZDcKQh0bXiJ0TfkOWlGAV1uTFxTGJ8qQJhlAU5VYNCKk1b3ZQActAMD5Pa9y/M4+RGENo02HtnwbLdOmTew1glGAGjOYSNi7D831Nb9HqpAFyAaZ0sYFGwkS7GgGkZgIZoWnwNqQLA9r5BA1ZWtKcZ+TQbAOkQK4rvktBhhGVpU/ABSpj4ADEsuzbTED0yIb1QEYFMqzTaCwKQpCM8z5qWuzYNczzNh80pVqC/AaAi2LEtS5GespmgabK9w1O0+dQj5OwFXsIjEDIz4qPCVNb2ZZ9BwZfNy30xjXVlE5SqaRzMCINt6NVVAhng/1AD6A0DQA6o9gTlyX/Ah2HEfOWj7Dh7aCVoNkS2EFA5k/OwzYLWQzeeTQdI+BgRhwBg2P4NwkD7Lhsh/GT6nfBAxXD8NmjUjkSrZSqMDOJ8NTHZApAbf3+8j2wPUT0Y2wz8M8/qzkmwrxtPiRxASoX6DsAQy8pYaGBR2AqFXqkCmkB/osGMtTdg1IrQAHkTYs3NlabOVteb83tu5R2ztxaS3DO7X2ctPbe2KA6aBMAHQsAdHrB0foRD4h5kYKq/drAsNIM4dyfowCwzAEYAAorQbi1l44Z3Uo3FGWlTqTT6oIsAGllH2iMHnXa+0BCZBSF/YmPMfBQEyEILwNp2DaGBOYHRe1cr6KgMdAKat6ZqLkRog62iYC6PYAAUjgJkY6mRGqkAMUYkxVozEeF6uwKxeigl2IBhYOmaBnF3XOjzAQzYcrsCEUbNJmQK6EC6MdKSAZkhOWRhlEYWAcDNkMUIYxRhTHmLpDkVJF8eJwB1KkLWFgxh/EVCeHGDiDbnQUaYkw2SLr8HyS6XgRT/SJHwGU4oFTwzVJgNrMAYzTDuXYMgGAYkfAZkQA0bsDQGlhKcDsiKUVPSkFxLSNSnlxocUENnRARBXD5lXN2CoQhzlOA2hwJBnx27jHyHcsADzFlwGeaOV5YN3muCXP0csy5fn/MuRwN5wIyBcR8DLUhs0rR0ASvTPhiAADsFLuzlgxdsjgeyDkZgdL9VZZBEAADYmIrjpSYHZ+yNjXNkNFeFsBEA4tIHiglUQ5bEtoKStA5KKVco5f0P5myLn0oHgiiVUqeHWGJQckufImJLmXP1bSWLuKpFEOwPJvlI5SHDpjFgmQvDqIepKgQGkAAib02gXwACTAC4gGYIABCdgfrbBkHDRpepGrwkWP4NGgN7AK4OukM6oSYBI2ptjfYpq/sjZGGURpfqIixFGX2JI1IGlxpoymjNPg/Uy2qOxpJDg6sOC2prEoYB3ElDzMIDlYQ7rO3sHOmIUOiR+0/EHcOjeY7klsBcBgBtcVbUZObsJfIG6agCG7cdAOXg2HrpcXtNx0SbGxJCf8ppkTr2BIMYW1uTiwDOHPXdS9Wjr0+L8Xa59tTQlJuafwJ9tjX3drPfu8GrT0kwEyRM3J0zClmHmaU2wmVllRLZTUoxCbGkRPMMgZDpApkFNmehkpiysPlNw1U2o6zszxPOhaidoabV2ozV/LNnwXVgDdTBlxnqnq+v9cPYNnGI1Rok6QONhGwkPvMPmi+PHHXZqkrm2TMb5OvrY0o5RywdR6gNAcRsIBkBSQJhoJmaC2ZWkcskXYnx8jMGcBgy2cZs5WhPuHK0otCH21kJ8K06j7RCEzNmEAuZyjKr/KWAClLtwgTbHI8CB5OX0QGYxfol5MBIQWEOZYD4MI0egCIWDriBDtM6eCa6GBjr5GazwRVLANiaFGM4cwQNkAZhJOwIgQIMoCAANT5lbkOPayzItUH5ngZT8SNKOIZrlBaA9EMQSDgAWUMoq8Rl98YBmaQJWOH1ODbATsdJOi0lRGEJKQVdX0Np73UlwIUpRsq1baNdDKGxI7LN9G1vFYp1kvbMC5tgHoyUsFEhsXY8BLI+T8hfcmlMIn4gEEuIQqCzbWitDwsAFLua8yNLsSWhP6GdLjITpcBLgT4nyEuchPh1UCEzq0XYx36qlC6bxvis0wdo7JT4fIXCeFoEOnZs2DnMEFGtrbaIuChZO0C67Yh8ZFWi4VorEX4v3L66dq0HYgdW0qLgCumK6s6TToaOO79mjMjMFxGgfgXjDHHWd3SRToHIle9d+wJo8SVsrt3T+p31vXcAf9z75T/B/f8CD0MxJpblH9XAbsjSIuxc8wl1L02rN8dy5JzbHBDthZq6IdLbPOu9e54N/Xo31YdjsC4fpDhYBDd8K1EBXUSB9QxesBocIRB+j5HzOP/o/QosfkIkgCov5ixkWXCl2sl6MvNiQBy7LsFJgVHy9eZCt4SvoRAGJC+808QbymdYSImSABkio5gQHxKHJGGxHl7nm7EEO5cNKX7vw0nLmMknEwFblfwsgzSv0yTbg7k4CBBOwCkzgAI3lbhBTgI9AOB8EZ36mQG2x9WBmkBgHxDIFqFswL3QRDA8R4DIHyCqnkAdSDAVxwQrnyitG3kQSgLvytBQJylmxi0/HnxIg3CS23yAmrFS14I3z6DEPbByy7HzGYkQlYmPzQjHCfCnBEGsGbFIAzSgGSH4DAC5w+jvG/1UnUnnSgFoTAAnnTVv1QI0LAL/20LID0OSCAKGh+DQAJlYEClSAlT9Av1MmSHAL8LW2gIxmMAjHlR8ByHZxGA8jgHsXUnmn0MWhfzCN4K7j8gwG7UG1kEQzqkDmDgSMiOmh9ER2QOCPSNf0ziHEVUYBRjgEildEjmRlIGOjalbmbAxhyC4HgB6gER1nwMIJkBIJ+GxhgGl0LxtCoL2knDoIgAYK/iYOwTtlYNCw4KtC4I3itBcN0OqP4NiyQHLCaCX0SwLFbAolS32LcIAhoi3x307EmHzHLAP0KzYhP04mtV4n4jzjhwvjzlknSzmyUjwBDlkQmj0gLiLlSlMkRwsm8gO1snskciwzzkCh2U8iR18n8iajuzAFCnCkimFStwmnikSmSjhPSkymyjygKnXk3keyGLABDhhJqloDqj3kamagSjanUE6kBGbDA36nhjGjkSbUuzWxCPK17gh3Wk2khLRmqxx2OiVN3Xgxx1+yjh2lE2elKMaPenjiF2Jj+jJkBjABBjBkAShm4gETFOkUjnVN0kiKxhxkEjxgJhNNyjNPiV1kJX1kSVxxmM805nlzWKV3L1VxdirxIRlVmhZx9njNmgNm7U1jxB1nR2TK9GGSNmDPQWL2YLtijIIXV2lg9h1z1mLVIGKIbnfydLzhjiNNB0TgWjyKsh5kVSw0zg0jeUbP0kLh2lLnLirklRrgGjrhKNSEdJ3SMlgPGC7llL7lSEHl/hvjHjQHvlYCfjnhYFfiXg/kzkZOjBGh3lexgAPgGOPlPm1Qvl5z8Oym0lHjvkni4mnlnhfkXnfj52/jXP/nBkhncBASDgz0zigR/lSFgT1gQWQXzNly8xL0VwFjwQrxjLdmlWpkTMoWoWsPoQDMYQgGYVYQ/R5n8M70b27wrVEWFGrWOG7KkXrJ1PkTNw0nbXUXDwg1vVj2I3Aw8WsSA1fRDw7QdyvT4qan/X8SAzvUTTjyiTEpvRfWD1TPfXUXg23TIy0VQyo2KQWSWRWUY3wzqRA0W1aXilmk6W1JKEYD6UsH4mTxGTpTIwoxmSSOo10roxw0qTWQ2S2T5QZQFUOWOVOV5UBTARJOinBXuVZOhVhXoFFRzg+W7G+ULHVV8tCuBVBVuSis/1io4HSQRUSuRVRSXHRUTUxW1TFV1Q2AwtlRJUYBhzAEpWpVeJCp2UZQ2GZVZUY3Iy5TFlao4ACqFRFXysqrpFxWqr1jlQVSVRVTVX6oqpziqvxX1U2QCuNS5FNXNUUUtQHmtWnXtV4ydX4xzSE2EuVL1PE103YCk2tRk1UwU2Mp4p0zTXUz4wEzzTk3DUEtzNIFT3LUUUrRookXorrVg0lNmgUT+rYonTyN7VnQHWcCHQDBHWXTOoGqNmnT7QRqRpgBRoTR2s/Vg2nW3XUVg0PXpmPSNgTWExEt/Xkqku4uTTks8QEviWgw/S/WVI4vkoksA1sWkqIyZs4sUoCnZsJpcTUsQyyRyUujyUo1cp0swxsGw30u8oI0eqZtIxlucrQ0Vto2Vvoy8qYygBYwCgM0t12oDH2teqOoE1OvFrugutU2upDVuo+t0wevvSeudpts0xYHdoDS+tYxLUMw0mMz7xQDMxgAsys3VlIHIPs3xyc3wBczc39FDJgHtAzt8yRgCzQs2FC3Cx2BnwELn27BXEX1IguOS3EMojSwmmkKQApSeNy3eJUOKzULWFlMqwvU0W+xgHqyBiaxa2ij4Q6y6x60tL6wGyG1MkEHG0mzIGm2JEUhlFiEWwCmW2UtWxuw2xyi23YF2x8H2yMk525xyENLjgu0FziV3oJIeyewTnB0znex4VIC+zlgsu6X+w2igCBzHsjme02jgEh0VW8OBzhx8ARy8iFFxNRyan9IZyxxx2mKwHx0J2JwVzJwpzeipzaBpzejp3ezpEZ2ZwVjZw52rC5x6mXM/kjgFyfuFy1xz24Xcnz0TotjDMQrLxQujKCw1xry9iVjr1YbQENwdGNzqRZLbQtzRokhd1t3ty5sdwT28Q93ke9w1rAw0YDyTyLW3tDx2nDwT2j0j0Zu0dUb0YSXZrLXT2jsz2z0N3YZlyLwQqLMjN4dLNjM118kTJEYl3Eckdbx5nbzIq7xYB7xaAjoHzouHyoFH3H0n2nyzFn0XC+SgirrLDolrtS3XweJrrkN33nzbpvA7vvFPx2onHMGEDEEkAbApCpC0DyDOChFnDRFuFRHZB5E6f5DCFBLXviESDCOjEaa7iqZ72OKSrEMyaSzOOuNrCqcboKZgmeILCUIK3btQnKfUKwk0KINVGUHSA0G0C6H0GhFeE8BcB6bsFwmufYFCHyG+F+ABAQIDwMBi3eaxHYHeecE+exHeZ8HeYIjSZ/AS03CuOAlrCef+EBGBCWebuggYjgjywQg2dKa2Y4jwE41+PdLkQBNnJznYFg1XuUghP7PZNSE6DSgRKR2RPylRKcgxJel6JxJR3iQJKJOKCGrJJbgDEpLgBSipfhIyiylynykKg3hKhZLZOqlSFqk7O5KLRan5I6ncyFJochsGhGnFKhIEmbWlMWiXPlMWkVPYs0VVKYvyE1L0m6WdPBj1K1OZcvvO2ex+l9ICiBnYH/JtKArtLhm1ZnLtb0kxhaEmNxlkHxkJniRJn+jRw9hWzgtca4fceQpVy8fQorKEaTL9m3vTI2X9OzOrMTc4czvDNL2LM8crwzYDMTKrJ+trIYvDhkX7OdeNNbOTg8jTi7OVp7L7IlIHKLhZLLkrmrlsFrnrkbabgxPnM7hyCNfvNXJSEBMkmfPHlfPfOfj3K/OXggQlaZNPN3gfPYEPmvJgDPhCfvOvifNvjXYfg3d3IXjfh3bodbj/OtMAoRtAVAvUnApgSiIDJgpQVQfguTYjNTfwSrY10zYoSoQgtwoYSYWCd+pIo73Cf4SoqrWBp7cnebYlM1ZkcMfBm5pZv5vMcfXpsgyUpTzOrD0dz/V8UktI60fI5I9iW+uo9UploQyQy47lpcrmRoz0oYzVqMq9osUnRlrMo6R+26SspsoGXNISQcrKulsmXTXloE/coNs8rw3WXmvasCpOXzDORU78rCpuUishWiqeRYBeRGoSs+WStKrSp2Qyo7ks6hRs7Grivs8RWXBRTRVSs1TM+xTGslQmoDKmvquByappX04Cs6pPG6s5W5XmsGvCrytC4mClUmrqoaspVmqC4BR2Sy/GuWuKANTWpNRXDNSXHY1YCtStttQOo02Oq01Oo9Uem9WdpurDQDtjXjWY5UzkzsMOr9u03uvY4M1sYBuooOxrRBp1cbT1cu3w/NwtthpnTQDnWhhxrxqUfRovjhu2+xsXVHXxonQdpbi3SltJrkXJrQEpprNPQ5qq2I/4qY7E+0eFriVFvfSu9o9Es8V5oCU+5kqep+6g3+85o1K4/Ut460oVow31pVuE+NvVq+8iS1rU8R806VtR6NpqVNqanNrkc42tszVtpOq8AB91K68urTV65gDus+sG8x+G6ut9ra/9ueoLWDuQ7LXDtMxi2jvCFjpsymIoIc2TtTvcwzqzp8z81CyrYLrCxcQixLsmfzA5UrpEKbtXyYBBP3E30qBbq7BRZYnRfYlKxABqwWQqyJd7oOn7sHstOHu5lHvax8E6xPG634F63634FnpGwXtvGXv4LMI3qai3qDINb3oPqPpPq6SofPtO2bIYfWWu3W3vtkEew4CAfPNyA+3fqk6/puh/sBw9AAZbPBxAc+Ch3Ab4UgegdZbxMz2IbEeQfzPQbekwdJ2sHJwJ1wb4nwaH7ACIYxyZxZwofUjPpocvh/OvsYYQaz2YacZQal6TdLe4YrbTcg+r2Ydry10N0CebykZYuhoa50cUcI+qwjxdzd3UZjyG/j0j0T3Y/ZrNbcRMc9zMZf50ff5UcbGaeRRBngpiONG8zjEMoWTA7K4IOaFARofyzb+MG8ojCRmfyQ6hNIiaHSJiZn7xmYh8FmBJhPnzBT5NeghbsBSgyZ68V8OTNfPtCWZFhCmqzKYKi0PxFYMWNvSpnkH4A1MJA+zckEcyaanNmQFwa5siCuYXNuQvgcQeiD6YRAwSsQBIEkHUgjMMgYzPIBMwoH5h4s5xMsHM0hYdA8gjAs3i8XWbsDPindDCI4Rwj1MhBJzPQMAHOZ8gbmb4a4LcykE3MHm0LF5kzQEDvMLcIAL5j8z+bfNDQ7zIQH1mBblBCwuvZfPmC3B0C8APg2Fs0hMGIt5CkwFcBb2UJW8viWLH4nxFxYTR8WQJR3g3X6akt1IQbAdkZCFZmQNotLGyPSwciMs5EmJRIq33gZ+EQoYULlhlwJYUkRgSUAVtSTByit6Se7KVv1BlaDk5WnJBVg1CVZ8l2ogpbqCKUURil60/baaFKV3pGsQGCpHIHaxVJHRLW1rbUicIdZ6QnWZ2NttG3dYWkrSACD9vOhhj+sEYjFGoSGzejFDPSUbN1qTD9JZlMKCbYDlvywTlsPGe/BAeWRraVkAyK2PNpmXjY/Vi28vMtkhTgGoV+GcI7MgiOTLVkG205L4S2zuE18bs7ZLtrWizgIpyWsrIdiOVHY2Bx2U5N/E20jjTt0CC5OdvbzlILsYAQ8ZdqwFXabl12O5T8k+0PJrwioJ5DgueUvIHBT257O8lfBSCPkV2N7MUXewlFbspRi/H+Euy9bvsgEbwr9vYzAq9kIK3ROBHLEA7oiYBUI8DjiLLJxlMKOubCnBzoQIdCKSHNhKRWwEUUImGHIGmKBpGBtGya3VirIy/501WOwSMjpYgo5scgBKlJ3nGOsQg8Ga//SHqmKSQ0czocPKWhpT4661keQnQnusgx7g9xOplfupZRaDWV+kdlfRobHIyOVta6nfjm5Xx6G1dOPlYLqFQM5HIjOJnFzhwG5YedrOMKWznCl86JV0mPyIruVTc5goIUnnGcd50y4FUkUAXEqsuK1Sldwu+KXLvKmi5KpmqtKUzkOIS4sokuk4FLn1WvH8oDk3LeKuKjC45dIueXGLsqk5RzVnxWKHVJ+OqorVDUGwdag8E2p1dtqHGPas1y5520lGu6J2iNyZ4s8PabPGsdox9qU9xu/XPTFR2m4gDhEc3WijSO2G6tdhENC/jGJhopxjuO3BdMjSXQXcr+U6RiadxYnncDua6Imjd0yR3cJoD3J7tTVe7pj3E8Y4DOz14pSSoe+Y2nkRzo480GOfNLijmOTEi0moYtGHoWIujcdVOKGDTj2JR59iDKVY0TthKx5OUuxZYwTh5VVrG1ieEnZDhbXJ4IS8J3PQTDT10n2t6ePXV2n1157yYsJgtHCSN0Qk5oCJQdM2iHUF7ahomUdGOtZnjqS8OGjmBaLL3Tpy5s6SvPOkFlV5F1IsKTUuouBXA6CwWSWBFvM0N4VDjefQSsBkKKYDASmR+MppizKx8ie6tNF3v7zd7sBmsHvYHOPV96T0MA09IPsNnnoTYw+EAGbCSwWzEYlsCbOPhkgT57ZhUp9FPvP1bZL9M+cfHPnnxr6bQX6VgN+h/XMoydy+vGSvsNMAZP1gGoDaHBAzAAHIW+3kOBsCI76Y5sc3fG0Bg0QrYMx+eDeAGPwn4M4p+5DIwPEWT5HZ5+95H+hnyJgOM1+kAjfulMdFYiSy+/SMII29goCxGjedAbqHP6KICOcjf3DfwLFKTv+b/NRqYxdyJjX+D/QPB/zTG017+dIRAAzM0YySABrMvMX9TsaQJV+vjdfg6LcawDsZsI3GUgPxnH9G8p/EmZgPYRhMgx/CIXvgMHyTER8Y+EgWQJKmTMxYZxGZkgGyY1SqIDA/Jo1OYGMR98bAj4qoW2a1TV0VTXgSIH4F2CYwwgxwRILaZdN4Qsg7pp4PeALSlBQzTOGoI0AaCugWgsumLEammzjkBvWIIs2tmmC1mrUjgdb1PyYQaCezL2Y0wcFwAzm/s+wJIJcEeDK5DzU8LIBIAAAhedL4O0YyBmApAKALoACGhCQhQQ/5uEMoCZQXQNQN6PIKNlLgEWSciqUkNiC1yG5Tc1ISCCWY2yVmjEbIcEGizMBYALsjgE4Kqb3Np09YJMDAAECiDzAmQfoFgFoB+JzgdwTIKqgvlXyKA5wF4JkEUJT5L5189EGJNjG8F8gtxaomIFEC2plUvyG5qYksAI5b+P6KpsIEebzzXmxidgKYkyDOBMgUCzRDAsDgpDXmOwMBWEmQDZAAMKCohT4EyAZh0FB0TBfkFnkwBG5zzBebgqQVhInB5gCBWe0kFsLjoLwBkLEVSDBBwgJSYoEgFACjhagxwFgHgHtAgBggwQIAA=="} -import { useResize } from '@studiometa/js-toolkit'; -// ---cut--- -const { props } = useResize({ - s: '0px', - m: '600px', - l: '1200px', -}); - -console.log(window.innerWidth === 768); // true -console.log(props().breakpoint); // 'm' -console.log(props().breakpoints); // ['s', 'm', 'l'] -console.log(props().activeBreakpoints); // { s: true, m: true, l: false } -``` - -Custom breakpoints values will be used to define `(min-width)` media queries to manage responsive features such as [responsive options](/api/decorators/withResponsiveOptions.html), breakpoint [manager](/api/decorators/withBreakpointManager.html) and [observer](/api/decorators/withBreakpointObserver.html) for components. - -## Parameters - -### `breakpoints` - -- Type: `Record` -- Required: `false` - -Configure the breakpoints used for responsive features of this service. This parameter is optional, its default value is: - -```js -{ - xxs: '0rem', // 0px - xs: '30rem', // 480px - s: '48rem', // 768px - m: '64rem', // 1024px - l: '80rem', // 1280px - xl: '90rem', // 1440px - xxl: '120rem', // 1920px - xxxl: '160rem', // 2560px -} -``` - -::: tip 💡 Configuring breakpoints globally -At the application level, these breakpoints can be configure with the `options` parameter of [the `createApp` function](/api/helpers/createApp.html). -::: - -## Props - -### `width` - -- Type: `Number` - -The width of the viewport. - -### `height` - -- Type: `Number` - -The height of the viewport. - -### `ratio` - -- Type: `Number` - -The `width / height` ratio of the viewport. - -### `orientation` - -- Type: `String` -- Values: `square`, `portrait` or `landscape` - -### `breakpoint` - -- Type: `string` -- Value: the name of the current active breakpoint - -### `breakpoints` - -- Type: `string[]` -- Value: the names of all defined breakpoints - -### `activeBreakpoints` - -- Type: `Record` -- Value: an object with breakpoints as keys and their boolean state as values diff --git a/packages/docs/api/services/useScroll.md b/packages/docs/api/services/useScroll.md deleted file mode 100644 index 95f86a2c7..000000000 --- a/packages/docs/api/services/useScroll.md +++ /dev/null @@ -1,172 +0,0 @@ ---- -outline: deep ---- - -# Scroll service - -The scroll service runs registered callbacks on page scroll. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"9a0b0f7c22d33092461d21c3d1fb2e2753756df6df15ad130d9f689b0dfeb02b","data":"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"} -import { useScroll } from '@studiometa/js-toolkit'; - -const { add, remove, props } = useScroll(); - -add('custom-id', (props) => { - console.log(props.x); // the horizontal position of the scroll - console.log(props.y); // the vertical position of the scroll - console.log(props.changedX); // will be `true` when the `x` scroll has changed -}); - -// Get the latest prop object -console.log(props()); - -// Remove the callback -remove('custom-id'); -``` - -::: warning IMPORTANT -A throttle of 100 ms is configured to limit the execution of each scroll callback to a minimum. If you need 60 FPS animations, use the [`raf`](./useRaf.html) service. -::: - -## Props - -### `x` - -- Type: `Number` - -The current horizontal scroll position. - -### `y` - -- Type: `Number` - -The current vertical scroll position. - -### `changed` - -- Type: `Object` -- Interface: `{ x: boolean, y: boolean }` - -For both axis, whether or not the current position has changed since the last one. - -### `changedX` - -- Type: `boolean` - -Shorthand for `changed.x`. - -### `changedY` - -- Type: `boolean` - -Shorthand for `changed.y`. - -### `last` - -- Type: `Object` -- Interface: `{ x: number, y: number }` - -The last position on both the `x` and `y` axis. - -### `lastX` - -- Type: `number` - -Shorthand for `last.x`. - -### `lastY` - -- Type: `number` - -Shorthand for `last.y`. - -### `delta` - -- Type: `Object` -- Interface: `{ x: number, y: number }` - -The difference between the last position and the current one. - -### `deltaX` - -- Type: `number` - -Shorthand for `delta.x`. - -### `deltaY` - -- Type: `number` - -Shorthand for `delta.y`. - -### `progress` - -- Type: `Object` -- Interface: `{ x: number, y: number }` - -The scroll position on both axis mapped to a `0` to `1` range, based on the [max](#max) property. - -### `progressX` - -- Type: `number` - -Shorthand for `progress.x`. - -### `progressY` - -- Type: `number` - -Shorthand for `progress.y`. - -### `max` - -- Type: `Object` -- Interface: `{ x: number, y: number }` - -The maximum value the scroll can reach. - -### `maxX` - -- Type: `number` - -Shorthand for `max.x`. - -### `maxY` - -- Type: `number` - -Shorthand for `max.y`. - -### `direction` - -- Type: `Object` -- Interface `{ x: 'LEFT'|'RIGHT'|'NONE', y: 'UP'|'DOWN'|'NONE' }` - -The direction of the scroll. - -### `isUp` - -- Type: `boolean` - -Shorthand for `direction.y === 'UP'`. - -### `isRight` - -- Type: `boolean` - -Shorthand for `direction.x === 'RIGHT'`. - -### `isDown` - -- Type: `boolean` - -Shorthand for `direction.y === 'DOWN'`. - -### `isLeft` - -- Type: `boolean` - -Shorthand for `direction.x === 'LEFT'`. diff --git a/packages/docs/api/static-methods.md b/packages/docs/api/static-methods.md deleted file mode 100644 index 2e7424a94..000000000 --- a/packages/docs/api/static-methods.md +++ /dev/null @@ -1,35 +0,0 @@ -# Static methods - -For practical examples of components and registration, see the [Components guide](/guide/introduction/managing-components.html). - -## `$register(nameOrSelector?: string)` - -Instantiates a class on each element matching the given component's name or CSS selector. This method uses the [child component resolution](#components) to find components. - -**Parameters** - -- `nameOrSelector` (`string`): the name of the component or a CSS selector - -**Return value** - -- `Base[]`: an array of instances of the component that triggered the method - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"21edd6ee6f6346ff37fde5baab459c9067c8fe1673fc1f9b49ceb92a05960127","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQgVMAULhwAdE5ozADm7sjIIBxgANZO+Gho2ogA9CkAVnAAtGgQEKwx7Gj+cGgArlDsEJYwwf6wRCnMWOwpIAC67VSlzHZIAJxUrDBgIWj4SAAsVMGkIbV4Xk7RuIgADFT8+L3M/DTkiP0AvhTo2KsExGRB8niCwrwAwtU2YCMM3bMMiACs01EjMYTQ4zXrzb4gZ7WCBvMAfKLsN5IABMm22pF2+yQADYTmccHhCCRyDNbh4WBwuHx7n4HFJZPIRko6YZtLw9F5WSZzFYbHY6U4XG5FhIfMJAqCwkgIgjYvFEsk0pkcnkCkUSuVKtVasx6jBGs1Wh0uiAen1EAB2VEA0bjKaguYLDxLIaI1bWrY7PbXRDIyZ46jnQlXEnUMkgRhYTQ4OwYPhQ17vfz8GEAM3YIUQvGA5l4ed4YGYNSzpVIiJCAG5zEdBa53JC0xmJdRQuFItE4lQEkk4KkMtlcvlCsVShUqjU6g0mi0UimwOmQmUMWgqmB/AlLKxjZ9et8ABx7oaAu2IbEO8F3RshZZupAAZjRXqxhwDmAJHiJ11J9CYUa0ZEwPhC2LXhS3LJwzW+ABGNYHxtIF7RbR0IWA3BXSRRB/k9DFvQOf1TkDd9LmJG4fw8GkRATGF3ggr4UTWC0j1tYFBiQi8PCo2F4RWAZHxw581lfIMPxDUiIUYCdCCgPgvBkOR6CZZQDGjXQWRU4x/AAElIGAQnYUoyEkTkVIoXg3xgCBUyeF5qLhYxGHGfSs3MyzrOhLjTNQgB5UgAGUYGGPZbAAfhLNAy1Gbgs0MSx9KkTj3mMZB2lrYUPAAJV0/T9l4ZhFF4SwIDKOFctYVheERHowH4eBeFc8ZvBTdykyCVtpXbRFOwIBVeyVAdVWHDUx21Sd9WnVoehXfgskk6AAg3VgAGIdL0gzSCyVDbFUQLcnWsDRm3U06N9KDGPgk9WNmdiQG0rK1pvDDWOwzEfRgoSiM/UMaDIkAKLcxM4Vo3d7zWa1hmY3i2KdBtmsB9DVigj10Reg5BII8zgxI79xNm6S6TkxlFCU1QuXZNSjA027Vv2IzlKMUyXKshK7Ic/AnLM85XOZtBPKLGAfP8naQrCiKQii3gYriyRuaSlKqCFetMupshcvywrivsNhysq4Jqtq+r8EamyuObYIpRQDq5S7Hq+2VQc1RHTVxx1PUDRnSb2Gm3H5rQTdlru/YNr5raApgIK9vC8DOh3c070RpiEJBKGISp7Kv1lBGkafV60fxC5PrEu5fEo42aJj74736MHjxY89oe5h6EZ+PiUaQXPCPz0TsaYXGZIkAmFKJ8m2Q5OntEpla09IWmSZMjmcC50uWcc3t54spml55gs+YF0Pw9C0DI8i6LNFi1Rpc32XUsVgOVbyqACqKkqtYqsAqpqkQDaN2Hila82ZQ7PKHstt+pDnVKOLUE5dRTkNCkD2XtahSR9n7Sea0g41BDkLCOotDqQSmKDBOF064p1QVieGSAoLN1+sjXCFDBImhTLAPAvJbD2GAHSXgRxeCplPrwAA5AAAQgc7YI/YVRgLQHwqsYBzB/W5vJBQzIvDZlzIfZgU0BBXjJjmMA+Zt4gT4dzPhFBVFHGkUccw5g0i8AAOrsDKo/DWZlDb/VsvYP6MJeAAANkBQHUcwLITUAZoB0KYGGwSwntC8XIYYNQ4RwHMNzLSpCyCMG4NIqxKRbH2PKurEqDVXFcTFLSTxPi/HBECZvUJIAABieRInRNDnEtACSwBJNTmtRgfC6kQD4ekyxYBrF2IcawPIMRnHf2CcUz+uivH+EsBgSpP9GmxPeK09pKTSBdPmYsoJbi+kVicFApAoBCZwFXHgTIIAjhHCAA"} -import { Base } from '@studiometa/js-toolkit'; - -class Component extends Base { - static config = { - name: 'Component', - }; -} - -// Will mount the Component class on `[data-component="Component"]` elements -Component.$register(); - -// Will mount the Component class on `[data-component="Foo"]` elements -Component.$register('Foo'); - -// Will look the component class on `.my-component` elements -Component.$register('.my-component'); -``` diff --git a/packages/docs/assets/events-diagram.png b/packages/docs/assets/events-diagram.png deleted file mode 100644 index 1fab36cee..000000000 Binary files a/packages/docs/assets/events-diagram.png and /dev/null differ diff --git a/packages/docs/assets/lifecycle-hooks-dark.svg b/packages/docs/assets/lifecycle-hooks-dark.svg deleted file mode 100644 index 9b7f246fc..000000000 --- a/packages/docs/assets/lifecycle-hooks-dark.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/docs/assets/lifecycle-hooks.svg b/packages/docs/assets/lifecycle-hooks.svg deleted file mode 100644 index 05257349a..000000000 --- a/packages/docs/assets/lifecycle-hooks.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/docs/assets/services-hooks-dark.svg b/packages/docs/assets/services-hooks-dark.svg deleted file mode 100644 index b7f0426de..000000000 --- a/packages/docs/assets/services-hooks-dark.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/docs/assets/services-hooks.svg b/packages/docs/assets/services-hooks.svg deleted file mode 100644 index 4bf3bd6dd..000000000 --- a/packages/docs/assets/services-hooks.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/docs/examples/accordion/index.md b/packages/docs/examples/accordion/index.md deleted file mode 100644 index 8f929d140..000000000 --- a/packages/docs/examples/accordion/index.md +++ /dev/null @@ -1,66 +0,0 @@ -# Accordion - -An expandable/collapsible content section toggled by a button click. This example demonstrates refs, event handling, and ARIA attribute management. - -## What we're building - -A single accordion panel with a trigger button and a collapsible content area. Clicking the button shows or hides the content and keeps `aria-expanded` in sync for screen readers. - -::: tip Production use -For an accessible accordion with animations and keyboard navigation, the [`@studiometa/ui`](https://ui.studiometa.dev) package ships an `Accordion` component. -::: - -## HTML markup - -The root element is marked with `data-component`. The component declares two refs with `data-ref`: `btn` (the trigger) and `content` (the panel): - -```html -
    - -
    -

    Accordion content goes here.

    -
    -
    -``` - -## JavaScript component - -The component hides the content on mount and toggles visibility on button click. The component keeps the ARIA attributes in sync: - -```js -import { Base } from '@studiometa/js-toolkit'; - -export default class Accordion extends Base { - static config = { - name: 'Accordion', - refs: ['btn', 'content'], - }; - - onBtnClick() { - const isOpen = this.$refs.content.style.display !== 'none'; - this.$refs.content.style.display = isOpen ? 'none' : ''; - this.$refs.btn.setAttribute('aria-expanded', String(!isOpen)); - } - - mounted() { - this.$refs.content.style.display = 'none'; - this.$refs.btn.setAttribute('aria-expanded', 'false'); - } -} -``` - -## App setup - -```js -import { registerComponent } from '@studiometa/js-toolkit'; -import Accordion from './Accordion.js'; - -registerComponent(Accordion); -``` - -## Further reading - -- [Refs guide](/guide/introduction/managing-refs.html) — connecting HTML elements to your component -- [Lifecycle guide](/guide/introduction/lifecycle-hooks.html) — the `mounted()` hook -- [Events guide](/guide/introduction/working-with-events.html) — auto-bound click handlers -- [Base class API](/api/) — full `Base` class reference diff --git a/packages/docs/examples/counter-component/Counter.html b/packages/docs/examples/counter-component/Counter.html deleted file mode 100644 index 24f6eab39..000000000 --- a/packages/docs/examples/counter-component/Counter.html +++ /dev/null @@ -1,13 +0,0 @@ -
    - -
    0
    - -
    diff --git a/packages/docs/examples/counter-component/Counter.ts b/packages/docs/examples/counter-component/Counter.ts deleted file mode 100644 index ee13eb1ba..000000000 --- a/packages/docs/examples/counter-component/Counter.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { registerComponent, Base } from '@studiometa/js-toolkit'; - -class Counter extends Base { - static config = { - name: 'Counter', - refs: ['add', 'remove', 'counter'], - }; - - get count() { - return Number(this.$refs.counter.innerHTML); - } - - set count(value) { - this.$refs.counter.innerHTML = value; - } - - onAddClick() { - this.count += 1; - } - - onRemoveClick() { - this.count -= 1; - } -} - -registerComponent(Counter); diff --git a/packages/docs/examples/counter-component/index.md b/packages/docs/examples/counter-component/index.md deleted file mode 100644 index abc5648a3..000000000 --- a/packages/docs/examples/counter-component/index.md +++ /dev/null @@ -1,88 +0,0 @@ -# Counter component - -A reactive counter that increments and decrements a number. - -## What we're building - -A counter with two buttons (+ and −) and a number display. Clicking the buttons updates the count in real time. This demonstrates **refs** for DOM access and **event handling** via the `on` naming convention. - -## HTML markup - -The HTML uses `data-component` to mark the root element and `data-ref` to expose three child elements to the component: - -```html -
    - -
    0
    - -
    -``` - -## JavaScript component - -The component declares its refs in `static config`. A getter/setter pair on `count` reads from and writes to the `counter` ref. js-toolkit auto-binds click handlers when you name them `onClick`: - -```js -import { Base } from '@studiometa/js-toolkit'; - -export default class Counter extends Base { - static config = { - name: 'Counter', - refs: ['add', 'remove', 'counter'], - }; - - get count() { - return Number(this.$refs.counter.innerHTML); - } - - set count(value) { - this.$refs.counter.innerHTML = value; - } - - onAddClick() { - this.count += 1; - } - - onRemoveClick() { - this.count -= 1; - } -} -``` - -## App setup - -Register the component so js-toolkit auto-mounts it on any matching `data-component="Counter"` element: - -```js -import { registerComponent } from '@studiometa/js-toolkit'; -import Counter from './Counter.js'; - -registerComponent(Counter); -``` - -## Live demo - - - -
    - -## Further reading - -- [Refs guide](/guide/introduction/managing-refs.html) — learn how `data-ref` connects HTML to your component -- [Events guide](/guide/introduction/working-with-events.html) — the `on` naming convention -- [Base class API](/api/) — full reference for the `Base` class diff --git a/packages/docs/examples/form-validation/index.md b/packages/docs/examples/form-validation/index.md deleted file mode 100644 index da51d2c3f..000000000 --- a/packages/docs/examples/form-validation/index.md +++ /dev/null @@ -1,179 +0,0 @@ -# Form validation - -A form component with real-time field validation, error messages, and submit handling. This example demonstrates refs, event handlers on child elements, options, and the component lifecycle. - -## What we're building - -A contact form with name, email, and message fields. Each field validates in real time as the user types (on `input` events). Error messages appear below invalid fields. The form prevents submission until all fields pass validation. - -## HTML markup - -Each field group includes an input and an error message element. Array refs (`fields[]` and `errors[]`) let the component iterate over them. The form itself is the component root: - -```html -
    -
    - - - -
    - -
    - - - -
    - -
    - - - -
    - - -
    -``` - -Add basic styles for error states: - -```css -.error { - color: red; - font-size: 0.875rem; - min-height: 1.25rem; - display: block; -} - -input:invalid, -textarea:invalid { - border-color: red; -} -``` - -## JavaScript component - -The component validates each field on `input` events using rules defined in `data-rules`. The `on` pattern with array refs receives the `index` so we know which field triggered the event: - -```js -import { Base } from '@studiometa/js-toolkit'; - -export default class FormValidation extends Base { - static config = { - name: 'FormValidation', - refs: ['fields[]', 'errors[]', 'submitBtn'], - }; - - /** - * Validation rules — each function returns an error message or empty string. - */ - rules = { - required: (value) => - value.trim() === '' ? 'This field is required.' : '', - - email: (value) => - value && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value) - ? 'Please enter a valid email address.' - : '', - - minLength: (value, min) => - value.length > 0 && value.length < Number(min) - ? `Must be at least ${min} characters.` - : '', - }; - - /** - * Validate a single field by index. Returns true if valid. - */ - validateField(index) { - const field = this.$refs.fields[index]; - const errorEl = this.$refs.errors[index]; - const rulesAttr = field.dataset.rules || ''; - let errorMessage = ''; - - for (const rule of rulesAttr.split('|')) { - if (!rule) continue; - const [name, ...params] = rule.split(':'); - const validator = this.rules[name]; - if (validator) { - errorMessage = validator(field.value, ...params); - if (errorMessage) break; - } - } - - errorEl.textContent = errorMessage; - field.setAttribute('aria-invalid', String(!!errorMessage)); - return !errorMessage; - } - - /** - * Validate on each input event (real-time feedback). - * The `index` tells us which field in the array triggered the event. - */ - onFieldsInput({ index }) { - this.validateField(index); - } - - /** - * Also validate when a field loses focus. - */ - onFieldsBlur({ index }) { - this.validateField(index); - } - - /** - * Intercept form submission on the root element. - */ - onSubmit({ event }) { - event.preventDefault(); - - // Validate all fields - const results = this.$refs.fields.map((_, i) => this.validateField(i)); - const allValid = results.every(Boolean); - - if (allValid) { - // Collect form data - const formData = new FormData(this.$el); - const data = Object.fromEntries(formData.entries()); - console.log('Form submitted:', data); - - // Reset the form - this.$el.reset(); - this.$refs.errors.forEach((el) => { - el.textContent = ''; - }); - } - } -} -``` - -## App setup - -```js -import { registerComponent } from '@studiometa/js-toolkit'; -import FormValidation from './FormValidation.js'; - -registerComponent(FormValidation); -``` - -## Further reading - -- [Refs guide](/guide/introduction/managing-refs.html) — array refs with `[]` suffix -- [Events guide](/guide/introduction/working-with-events.html) — `on` handlers and the `index` parameter -- [Base class API](/api/) — `$el`, `$refs`, and instance properties diff --git a/packages/docs/examples/index.md b/packages/docs/examples/index.md deleted file mode 100644 index b056d2b86..000000000 --- a/packages/docs/examples/index.md +++ /dev/null @@ -1,20 +0,0 @@ -# Examples - -Worked examples of common UI patterns built with `@studiometa/js-toolkit`. Each example shows the HTML, the component code, and the app setup. - -## Basics - -- [Counter component](/examples/counter-component/) — Increment and decrement a number with refs and event handling -- [Accordion](/examples/accordion/) — Show and hide a content section with ARIA support - -## Patterns - -- [Tabs](/examples/tabs/) — Switch between panels with keyboard navigation and ARIA roles -- [Modal](/examples/modal/) — Open a dialog with a backdrop, focus trapping, and Escape to close -- [Form validation](/examples/form-validation/) — Validate fields in real time with error messages - -## Advanced - -- [Scroll-linked animation](/examples/scroll-linked-animation/) — Drive parallax and skew effects from scroll position -- [Lazy image](/examples/lazy-image/) — Defer image loading with the `withMountWhenInView` decorator -- [Teleport refs](/examples/teleport-refs/) — Move DOM elements outside the component tree while keeping ref access diff --git a/packages/docs/examples/lazy-image/index.md b/packages/docs/examples/lazy-image/index.md deleted file mode 100644 index 907569224..000000000 --- a/packages/docs/examples/lazy-image/index.md +++ /dev/null @@ -1,59 +0,0 @@ -# Lazy image - -Defer image loading until the element scrolls into the viewport, improving initial page performance. This example demonstrates the `withMountWhenInView` decorator. - -## What we're building - -An `` element that stores its real URL in `data-src`. The component only activates when the image enters the viewport, at which point it sets the real `src` attribute — triggering the download exactly when needed. - -::: tip Production use -This is a minimal example. In a real project you may want to handle loading states (e.g. a placeholder or skeleton), error states, and `srcset` / `sizes` for responsive images. -::: - -## HTML markup - -The image element itself is the component root. The real URL is stored in `data-src` so the browser does not download it immediately: - -```html -Lazy loaded image -``` - -## JavaScript component - -`withMountWhenInView` wraps the `Base` class and delays the `mounted()` hook until the element scrolls into view. The component runs no JavaScript for images that never enter the viewport: - -```js -import { Base, withMountWhenInView } from '@studiometa/js-toolkit'; - -export default class LazyImage extends withMountWhenInView(Base) { - static config = { - name: 'LazyImage', - }; - - mounted() { - const src = this.$el.dataset.src; - if (src) { - this.$el.src = src; - this.$el.removeAttribute('data-src'); - } - } -} -``` - -## App setup - -```js -import { registerComponent } from '@studiometa/js-toolkit'; -import LazyImage from './LazyImage.js'; - -registerComponent(LazyImage); -``` - -## Further reading - -- [Decorators guide](/guide/going-further/using-decorators.html) — how `withMountWhenInView` and other decorators work -- [Lifecycle guide](/guide/introduction/lifecycle-hooks.html) — the `mounted()` hook -- [`withMountWhenInView` API](/api/decorators/withMountWhenInView.html) — decorator reference diff --git a/packages/docs/examples/modal/index.md b/packages/docs/examples/modal/index.md deleted file mode 100644 index fa7f70c34..000000000 --- a/packages/docs/examples/modal/index.md +++ /dev/null @@ -1,156 +0,0 @@ -# Modal - -A modal with open/close behaviour, backdrop overlay, focus trapping, and Escape to close. This example demonstrates refs, events, the `keyed` service hook, and the `trapFocus` / `untrapFocus` utilities. - -## What we're building - -A button that opens a modal. When open, the modal: - -- Displays a backdrop overlay -- Traps keyboard focus inside the dialog (Tab cycles through focusable elements) -- Closes on Escape key press -- Closes when clicking the backdrop or a close button -- Restores focus to the trigger button on close - -## HTML markup - -The trigger button and the modal markup live inside the same component. The `backdrop` and `dialog` are separate refs. The dialog has `role="dialog"` and `aria-modal="true"` for accessibility: - -```html -
    - - - -
    -``` - -Add some basic CSS to position the backdrop and dialog: - -```css -.modal-backdrop { - position: fixed; - inset: 0; - display: flex; - align-items: center; - justify-content: center; - background: rgba(0, 0, 0, 0.5); - z-index: 1000; -} - -.modal-backdrop [role='dialog'] { - background: white; - padding: 2rem; - border-radius: 0.5rem; - max-width: 500px; - width: 100%; -} -``` - -## JavaScript component - -The component uses `trapFocus` from `@studiometa/js-toolkit/utils` to keep Tab navigation inside the dialog, and `untrapFocus` to restore focus on close. The `keyed` hook listens for Escape: - -```js -import { Base } from '@studiometa/js-toolkit'; -import { - trapFocus, - untrapFocus, - keyCodes, -} from '@studiometa/js-toolkit/utils'; - -export default class Modal extends Base { - static config = { - name: 'Modal', - refs: ['openBtn', 'closeBtn', 'backdrop', 'dialog'], - }; - - isOpen = false; - - /** - * Open the modal when the open button is clicked. - */ - onOpenBtnClick() { - this.open(); - } - - /** - * Close the modal when the close button is clicked. - */ - onCloseBtnClick() { - this.close(); - } - - /** - * Close the modal when clicking the backdrop (but not the dialog itself). - */ - onBackdropClick({ event }) { - if (event.target === this.$refs.backdrop) { - this.close(); - } - } - - /** - * Close on Escape key press. - */ - keyed(props) { - if (this.isOpen && props.ESC && props.isDown) { - this.close(); - } - - // Trap focus inside the dialog while open - if (this.isOpen && props.event.keyCode === keyCodes.TAB) { - trapFocus(this.$refs.dialog, props.event); - } - } - - /** - * Show the modal and trap focus. - */ - open() { - this.isOpen = true; - this.$refs.backdrop.hidden = false; - // Focus the first focusable element inside the dialog - this.$refs.dialog.focus?.() || - this.$refs.dialog - .querySelector('button, [href], input, select, textarea') - ?.focus(); - } - - /** - * Hide the modal and restore focus. - */ - close() { - this.isOpen = false; - this.$refs.backdrop.hidden = true; - untrapFocus(); // Restores focus to the element focused before the modal opened - } -} -``` - -## App setup - -```js -import { registerComponent } from '@studiometa/js-toolkit'; -import Modal from './Modal.js'; - -registerComponent(Modal); -``` - -## Further reading - -- [Refs guide](/guide/introduction/managing-refs.html) — connecting DOM elements to components -- [Events guide](/guide/introduction/working-with-events.html) — `onClick` event handlers -- [Services guide](/guide/introduction/using-services.html) — the `keyed` service hook -- [`trapFocus` utility](/utils/trapFocus.html) — trap Tab navigation inside an element -- [`keyCodes` utility](/utils/keyCodes.html) — key code constants -- [Teleport refs example](/examples/teleport-refs/) — moving modal elements to `` diff --git a/packages/docs/examples/scroll-linked-animation/ScrollLinkedAnimation.html b/packages/docs/examples/scroll-linked-animation/ScrollLinkedAnimation.html deleted file mode 100644 index 0a141354a..000000000 --- a/packages/docs/examples/scroll-linked-animation/ScrollLinkedAnimation.html +++ /dev/null @@ -1,28 +0,0 @@ -
    -
    - - - - - -
    -
    - - - - - -
    -
    - - - - - -
    -
    diff --git a/packages/docs/examples/scroll-linked-animation/ScrollLinkedAnimation.js b/packages/docs/examples/scroll-linked-animation/ScrollLinkedAnimation.js deleted file mode 100644 index 7234ddaa2..000000000 --- a/packages/docs/examples/scroll-linked-animation/ScrollLinkedAnimation.js +++ /dev/null @@ -1,79 +0,0 @@ -import { Base } from '@studiometa/js-toolkit'; -import { map, damp, transform } from '@studiometa/js-toolkit/utils'; - -export default class ScrollLinkedAnimation extends Base { - static config = { - name: 'ScrollLinkedAnimation', - refs: ['cols[]', 'offsetItem'], - }; - - scrollDeltaY = 0; - - dampedScrollDeltaY = 0; - - scrollProgressY = 0; - - dampedScrollProgressY = 0; - - parallaxOffsetHeight = 100; - - mounted() { - this.parallaxOffsetHeight = this.$refs.offsetItem.offsetHeight / 2; - } - - resized() { - this.parallaxOffsetHeight = this.$refs.offsetItem.offsetHeight / 2; - } - - scrolled(props) { - // Enable `ticked` service when it is disabled and the user scrolls - if (props.changed.y && !this.$services.has('ticked')) { - this.$services.enable('ticked'); - } - - this.scrollProgressY = props.progress.y; - this.scrollDeltaY = props.delta.y; - } - - ticked() { - // Read from the DOM and compute values in the method body - this.dampedScrollDeltaY = damp(this.scrollDeltaY, this.dampedScrollDeltaY, 0.05, 0.0001); - - this.dampedScrollProgressY = damp( - this.scrollProgressY, - this.dampedScrollProgressY, - 0.25, - 0.0001, - ); - - const items = this.$refs.cols.map((col, index) => { - const skewY = index % 2 ? this.dampedScrollDeltaY * -0.25 : this.dampedScrollDeltaY * 0.25; - - let translateY; - if (index % 2 === 0) { - translateY = map( - this.dampedScrollProgressY, - 0, - 1, - this.parallaxOffsetHeight, - this.parallaxOffsetHeight * -1, - ); - } - - return { col, skewY, translateY }; - }); - - // Disable service when animation has ended - if (this.dampedScrollDeltaY === this.scrollDeltaY) { - this.$services.disable('ticked'); - } - - // Update and write to the DOM in the returned function to improve performance - // and avoid layout trashing. - return () => { - items.forEach((item) => { - transform(item.col, { skewY: item.skewY, y: item.translateY }); - }); - }; - } -} diff --git a/packages/docs/examples/scroll-linked-animation/index.md b/packages/docs/examples/scroll-linked-animation/index.md deleted file mode 100644 index 6fdac147b..000000000 --- a/packages/docs/examples/scroll-linked-animation/index.md +++ /dev/null @@ -1,155 +0,0 @@ -# Scroll-linked animation - -Animate elements based on scroll position with damped physics. This example demonstrates the `scrolled` and `ticked` services, the `map` / `damp` / `transform` utilities, and manual service toggling. - -## What we're building - -A three-column image grid where columns skew based on scroll velocity and alternate columns move at different parallax speeds. The animation feels smooth thanks to damped interpolation. - -## HTML markup - -A grid of images split into three columns. Each column is a `cols[]` ref (the `[]` suffix creates an array ref). One image is also marked as `offsetItem` to measure the parallax offset: - -```html -
    -
    - - - -
    -
    - - -
    -
    - - -
    -
    -``` - -## JavaScript component - -The component uses `scrolled()` to capture scroll progress and delta, then `ticked()` to apply damped transforms on each animation frame. Services are toggled manually for performance — `ticked` is only enabled while scrolling: - -```js -import { Base } from '@studiometa/js-toolkit'; -import { map, damp, transform } from '@studiometa/js-toolkit/utils'; - -export default class ScrollLinkedAnimation extends Base { - static config = { - name: 'ScrollLinkedAnimation', - refs: ['cols[]', 'offsetItem'], - }; - - scrollDeltaY = 0; - dampedScrollDeltaY = 0; - scrollProgressY = 0; - dampedScrollProgressY = 0; - parallaxOffsetHeight = 100; - - mounted() { - this.parallaxOffsetHeight = this.$refs.offsetItem.offsetHeight / 2; - } - - resized() { - this.parallaxOffsetHeight = this.$refs.offsetItem.offsetHeight / 2; - } - - scrolled(props) { - if (props.changed.y && !this.$services.has('ticked')) { - this.$services.enable('ticked'); - } - this.scrollProgressY = props.progress.y; - this.scrollDeltaY = props.delta.y; - } - - ticked() { - this.dampedScrollDeltaY = damp( - this.scrollDeltaY, - this.dampedScrollDeltaY, - 0.05, - 0.0001, - ); - this.dampedScrollProgressY = damp( - this.scrollProgressY, - this.dampedScrollProgressY, - 0.25, - 0.0001, - ); - - const items = this.$refs.cols.map((col, index) => { - const skewY = - index % 2 - ? this.dampedScrollDeltaY * -0.25 - : this.dampedScrollDeltaY * 0.25; - const translateY = - index % 2 === 0 - ? map( - this.dampedScrollProgressY, - 0, - 1, - this.parallaxOffsetHeight, - -this.parallaxOffsetHeight, - ) - : undefined; - return { col, skewY, translateY }; - }); - - if (this.dampedScrollDeltaY === this.scrollDeltaY) { - this.$services.disable('ticked'); - } - - // Return a function to batch DOM writes (avoids layout thrashing) - return () => { - items.forEach((item) => { - transform(item.col, { skewY: item.skewY, y: item.translateY }); - }); - }; - } -} -``` - -## App setup - -```js -import { registerComponent } from '@studiometa/js-toolkit'; -import ScrollLinkedAnimation from './ScrollLinkedAnimation.js'; - -registerComponent(ScrollLinkedAnimation); -``` - -## Live demo - - - -
    -
    -

    Pictures from picsum.photos

    -
    - -## Further reading - -- [Services guide](/guide/introduction/using-services.html) — how `scrolled` and `ticked` hooks work -- [`scrolled` service](/api/services/useScroll.html) — scroll service reference -- [Utils: `transform`](/utils/css/transform.html) — apply CSS transforms from JS -- [Utils: `damp`](/utils/math/damp.html) — damped interpolation for smooth animations -- [Utils: `map`](/utils/math/map.html) — remap a value from one range to another diff --git a/packages/docs/examples/tabs/index.md b/packages/docs/examples/tabs/index.md deleted file mode 100644 index b464b789f..000000000 --- a/packages/docs/examples/tabs/index.md +++ /dev/null @@ -1,175 +0,0 @@ -# Tabs - -A tabbed interface with multiple panels, keyboard navigation, and ARIA attributes. This example demonstrates array refs, the `keyed` service hook, options, and accessible markup patterns. - -## What we're building - -A tab bar with clickable tab buttons and corresponding content panels. Only one panel is visible at a time. The component supports: - -- Click to switch tabs -- Arrow key navigation between tabs -- Proper ARIA roles and attributes for screen readers -- A configurable default active tab via options - -## HTML markup - -Each tab button is a `tabs[]` ref and each panel is a `panels[]` ref. ARIA attributes connect them: - -```html -
    -
    - - - -
    - -
    -

    Content for Tab 1

    -
    - - -
    -``` - -## JavaScript component - -The component tracks the active tab index, handles click events on the `tabs[]` array ref, and listens for keyboard events via the `keyed` service hook. Arrow keys move focus between tabs, and Enter/Space activates the focused tab: - -```js -import { Base } from '@studiometa/js-toolkit'; -import { keyCodes } from '@studiometa/js-toolkit/utils'; - -export default class Tabs extends Base { - static config = { - name: 'Tabs', - refs: ['tabs[]', 'panels[]'], - options: { - defaultTab: { type: Number, default: 0 }, - }, - }; - - activeIndex = 0; - - mounted() { - this.activate(this.$options.defaultTab); - } - - /** - * Handle click on any tab button. - * The `index` parameter tells you which tab in the array was clicked. - */ - onTabsClick({ index }) { - this.activate(index); - } - - /** - * Handle keyboard navigation when a tab button is focused. - * Arrow keys move focus; Enter/Space activates. - */ - keyed(props) { - // Only handle keys when a tab button is focused - const focusedIndex = this.$refs.tabs.indexOf(document.activeElement); - if (focusedIndex < 0) return; - - const { event } = props; - const lastIndex = this.$refs.tabs.length - 1; - - if (event.keyCode === keyCodes.RIGHT || event.keyCode === keyCodes.DOWN) { - event.preventDefault(); - const nextIndex = focusedIndex < lastIndex ? focusedIndex + 1 : 0; - this.$refs.tabs[nextIndex].focus(); - } - - if (event.keyCode === keyCodes.LEFT || event.keyCode === keyCodes.UP) { - event.preventDefault(); - const prevIndex = focusedIndex > 0 ? focusedIndex - 1 : lastIndex; - this.$refs.tabs[prevIndex].focus(); - } - - if ( - event.keyCode === keyCodes.ENTER || - event.keyCode === keyCodes.SPACE - ) { - event.preventDefault(); - this.activate(focusedIndex); - } - } - - /** - * Activate a tab by index — show its panel, hide the rest. - */ - activate(index) { - this.activeIndex = index; - - this.$refs.tabs.forEach((tab, i) => { - const isActive = i === index; - tab.setAttribute('aria-selected', String(isActive)); - tab.setAttribute('tabindex', isActive ? '0' : '-1'); - }); - - this.$refs.panels.forEach((panel, i) => { - panel.hidden = i !== index; - }); - } -} -``` - -## App setup - -```js -import { registerComponent } from '@studiometa/js-toolkit'; -import Tabs from './Tabs.js'; - -registerComponent(Tabs); -``` - -## Further reading - -- [Refs guide](/guide/introduction/managing-refs.html) — array refs with `[]` suffix -- [Options guide](/guide/introduction/managing-options.html) — typed options with defaults -- [Services guide](/guide/introduction/using-services.html) — the `keyed` service hook -- [Events guide](/guide/introduction/working-with-events.html) — the `index` parameter in array ref events -- [`useKey` service API](/api/services/useKey.html) — keyboard service reference -- [`keyCodes` utility](/utils/keyCodes.html) — key code constants diff --git a/packages/docs/examples/teleport-refs/Modal.html b/packages/docs/examples/teleport-refs/Modal.html deleted file mode 100644 index 14527e4b7..000000000 --- a/packages/docs/examples/teleport-refs/Modal.html +++ /dev/null @@ -1,4 +0,0 @@ -
    - -
    Content.
    -
    diff --git a/packages/docs/examples/teleport-refs/Modal.js b/packages/docs/examples/teleport-refs/Modal.js deleted file mode 100644 index b53989d75..000000000 --- a/packages/docs/examples/teleport-refs/Modal.js +++ /dev/null @@ -1,61 +0,0 @@ -import { Base } from '@studiometa/js-toolkit'; - -/** - * Modal class. - */ -export default class Modal extends Base { - static config = { - name: 'Modal', - refs: ['open', 'content'], - options: { - move: String, - }, - }; - - /** - * @type {Modal['$refs']} - */ - orignalRefs; - - /** - * Get teleported refs. - * @returns {Base['$refs']} - */ - get $refs() { - const $refs = super.$refs; - - // Add original refs to the current refs - if (this.originalRefs) { - Object.entries(this.originalRefs).forEach(([name, value]) => { - if (!$refs[name]) { - $refs[name] = value; - } - }); - } - - return $refs; - } - - /** - * Mounted hook. - * @returns {void} - */ - mounted() { - if (this.$options.move) { - const target = document.querySelector(this.$options.move); - - if (target) { - this.originalRefs = this.$refs; - target.appendChild(this.$refs.content); - } - } - } - - /** - * Click handler for the `open` ref. - * @returns {void} - */ - onOpenClick() { - // Implement modal opening logic here. - } -} diff --git a/packages/docs/examples/teleport-refs/index.md b/packages/docs/examples/teleport-refs/index.md deleted file mode 100644 index e71a2a885..000000000 --- a/packages/docs/examples/teleport-refs/index.md +++ /dev/null @@ -1,97 +0,0 @@ -# Teleport refs - -Move a DOM element outside the component tree (e.g. to ``) while keeping ref access. This pattern solves CSS stacking-context issues for modals, tooltips, and dropdowns. - -## What we're building - -A modal component that teleports its content element to a different part of the DOM (via the `move` option) while still being able to access that element through `$refs`. This demonstrates **options**, **ref overriding**, and the **mounted lifecycle hook**. - -## Why teleport? - -CSS stacking contexts can stop modals from appearing above other content. Common culprits: - -- **`z-index` conflicts** — a parent creates a stacking context, capping child z-index -- **`overflow: hidden` on parents** — clips absolutely positioned children -- **`transform`, `filter`, `opacity` on ancestors** — create new stacking contexts - -Move the element to `` to escape these constraints. - -::: tip When to use this -Only use this pattern when CSS `position: fixed` with a high `z-index` is not enough. For most cases, CSS alone is simpler. -::: - -## HTML markup - -The `data-option-move` attribute tells the component where to teleport the content: - -```html -
    - -
    Modal content goes here.
    -
    -``` - -## JavaScript component - -The key technique: save refs _before_ teleporting (while they are still inside `$el`), then override the `$refs` getter to merge saved refs with current ones: - -```js -import { Base } from '@studiometa/js-toolkit'; - -export default class TeleportModal extends Base { - static config = { - name: 'TeleportModal', - refs: ['open', 'content'], - options: { - move: String, - }, - }; - - originalRefs; - - get $refs() { - const $refs = super.$refs; - - // Merge saved refs with current refs - if (this.originalRefs) { - Object.entries(this.originalRefs).forEach(([name, value]) => { - if (!$refs[name]) { - $refs[name] = value; - } - }); - } - - return $refs; - } - - mounted() { - if (this.$options.move) { - const target = document.querySelector(this.$options.move); - if (target) { - this.originalRefs = this.$refs; - target.appendChild(this.$refs.content); - } - } - } - - onOpenClick() { - // Implement modal opening logic here - } -} -``` - -## App setup - -```js -import { registerComponent } from '@studiometa/js-toolkit'; -import TeleportModal from './TeleportModal.js'; - -registerComponent(TeleportModal); -``` - -## Further reading - -- [Refs guide](/guide/introduction/managing-refs.html) — how `$refs` works -- [Options guide](/guide/introduction/managing-options.html) — defining and reading `data-option-*` attributes -- [Lifecycle guide](/guide/introduction/lifecycle-hooks.html) — the `mounted()` hook -- [Base class API](/api/) — `$refs`, `$options`, and other instance properties diff --git a/packages/docs/guide/concepts/component-tree.md b/packages/docs/guide/concepts/component-tree.md deleted file mode 100644 index 8ab0a6cc3..000000000 --- a/packages/docs/guide/concepts/component-tree.md +++ /dev/null @@ -1,271 +0,0 @@ -# Component Tree - -## How the tree is built - -The component tree in js-toolkit is determined by the DOM structure and the `components` configuration. When a component mounts, it scans its root element for child components declared in `config.components`. - -```js -class App extends Base { - static config = { - name: 'App', - components: { Header, Sidebar, Content }, - }; -} -``` - -```html - -
    - -
    - -
    ...
    - -``` - -In this example, `App` is the parent of `Header`, `Sidebar`, and `Content`. But `Nav` is only a child of `Header` if `Header` declares it in its own `config.components`. - -## Element resolution - -Child components are found using two selector strategies: - -1. **Attribute selector**: `[data-component=""]` — matches elements with the exact component name -2. **Tag selector**: `-` — matches custom element tags (e.g. ``) - -If no matching element is found, the child is not instantiated — no errors, no empty instances. - -Multiple instances of the same child component are supported: - -```html -
    -
    Item 1
    -
    Item 2
    -
    Item 3
    -
    -``` - -## Mounting order - -Components mount **depth-first, children before parents**. This guarantees that when a parent's `mounted()` hook runs, all its children are already mounted. - -``` -1. App starts mounting -2. Header starts mounting -3. Nav mounts → Nav.mounted() -4. Header.mounted() -5. Sidebar.mounted() -6. Content.mounted() -7. App.mounted() -``` - -js-toolkit uses a queue internally to batch DOM reads and writes, avoiding layout thrashing during mount. - -::: warning Do not assume an ancestor exists while mounting -The children-before-parents guarantee runs **one way**: it covers the children a parent mounts through its own `ChildrenManager` (declared in `config.components` and DOM-contained). Whether the **reverse** works — a child resolving its parent from its own `mounted()` — depends on **how the child was mounted**: - -- **Mounted by its parent** — the ancestor is already constructed and registered (from its `before-mounted`, before `mountAll()` runs), so [`$closest`](/api/instance-methods.html#closest-query) and `$parent` resolve, even though the parent is not yet `$isMounted`. -- **Mounted independently** — globally registered components (`registerComponent` recursively registers declared children) are auto-mounted by a document-wide `MutationObserver`. Lazy and async children mount on their own schedule. On that path the ancestor may not exist yet and `$closest` returns `undefined`. - -Application code cannot tell which path mounted a given instance, so never rely on an ancestor in `mounted()`. Route communication through the channels in [Data flow between components](#data-flow-between-components). -::: - -## Scoping - -Each component's scope is bounded by its root element (the `data-component` element). This scoping affects: - -- **Refs** — `this.$refs` only finds refs within the component's own scope, not inside nested child components -- **Children** — only direct children declared in `config.components` are managed -- **Events** — event handler methods like `onBtnClick` only bind to refs within scope - -```html -
    - -
    - -
    -
    -``` - -Here, `Parent`'s `this.$refs.btn` is only the first button. The second button belongs to `Child`'s scope. - -## Querying components - -You can traverse the tree at runtime: - -- **`$query(name)`** — find all descendant instances matching a component name (replaces the deprecated `$children`) -- **`$closest(name)`** — find the nearest ancestor instance (replaces the deprecated `$parent` / `$root`) - -```js -class Child extends Base { - static config = { name: 'Child' }; - - mounted() { - const app = this.$closest('App'); - const siblings = app.$query('Child'); - } -} -``` - -::: tip API Reference -See [Instance methods — $query](/api/instance-methods.html#query-query) and [Instance methods — $closest](/api/instance-methods.html#closest-query). -::: - -## Data flow between components - -A component can't assume its parent exists while it is mounting (see [Mounting order](#mounting-order)). Both ancestor lookups are resolved dynamically — by walking the DOM ancestors on every access — but they differ: - -- **`$parent`** (deprecated) returns `null` unless a live ancestor both declares this component in its `config.components` and DOM-contains it. -- **`$closest(name)`** returns any constructed ancestor with that name, including one not yet, or no longer, mounted (e.g. breakpoint-inactive). It is `undefined` only when no such ancestor has been constructed. Add the `:mounted` state (`$closest('Slider:mounted')`) to require a mounted one, and always guard with `?.`. - -Structure communication through the sanctioned channels below. `$closest` element-correctness and the store utilities below require `@studiometa/js-toolkit >= 3.6.0`. - -### Parent → child: `$query` - -The parent is always mounted when it queries, so reading or commanding children is safe: - -```js -class Slider extends Base { - static config = { name: 'Slider', components: { SliderBtn } }; - - goTo(index) { - this.$query('SliderBtn').forEach((btn) => btn.setActive(index)); - } -} -``` - -### Child → parent: `$emit` - -Children never dereference the parent — they emit, and the parent listens via the `on` convention: - -```js -class SliderBtn extends Base { - // The emitted event name must differ from the DOM event (`click`), otherwise - // `$emit` re-dispatches on `$el` and re-triggers `onClick` in a loop. - static config = { name: 'SliderBtn', emits: ['go-to-index'] }; - - onClick() { - this.$emit('go-to-index', this.index); - } -} - -class Slider extends Base { - static config = { name: 'Slider', components: { SliderBtn } }; - - // Child-event handlers receive a single params object; `args` holds the payload. - onSliderBtnGoToIndex({ args: [index] }) { - this.goTo(index); - } -} -``` - -### Dynamic ancestor lookup: `$closest` - -When a child genuinely needs the ancestor, resolve it lazily and guard the result with `?.` — never at construction, and **never unguarded in `mounted()`**: - -```js -class SliderBtn extends Base { - static config = { name: 'SliderBtn' }; - - onClick() { - this.$closest('Slider')?.goTo(this.index); // undefined-safe - } -} -``` - -### Shared state: a per-instance store - -When both sides read and write the same state (e.g. the active `index`), lift it into a store and drop the parent⇄child runtime dependency. Give **each** parent its own store instance so multiple sliders on a page don't share state: - -```js -// Slider/Slider.js -import { Base } from '@studiometa/js-toolkit'; -import { - createStorage, - createMemoryStorageProvider, -} from '@studiometa/js-toolkit/utils'; -import { SliderChild } from './SliderChild.js'; - -export class Slider extends Base { - static config = { name: 'Slider', components: { SliderChild } }; - - // One store per Slider instance — the shared `memoryStorageProvider` - // singleton would sync every Slider on the page. - store = createStorage({ provider: createMemoryStorageProvider() }); - - index = 0; - - mounted() { - // Runs after `__children.mountAll()`, so every SliderChild is mounted. The - // parent reaches its children deterministically regardless of how they were - // mounted, so subscribe them from here, then push the current state so every - // subscriber receives its initial value. `$query` matches descendants at any - // depth; with nested Sliders the idempotent `subscribe()` keeps each child on - // the innermost store it already joined. - for (const child of this.$query('SliderChild')) { - child.subscribe(this.store); - } - this.store.set('index', this.index); - } - - goTo(index) { - this.index = index; - this.store.set('index', index); - } -} -``` - -```js -// Slider/SliderChild.js -import { Base } from '@studiometa/js-toolkit'; -import { isFunction } from '@studiometa/js-toolkit/utils'; - -export class SliderChild extends Base { - static config = { name: 'SliderChild' }; - - index = 0; - - // Idempotent: safe to call from the parent's handshake and from a late mount. - subscribe(store) { - if (isFunction(this.unsubscribe)) return; - this.index = store.get('index') ?? this.index; - this.unsubscribe = store.subscribe('index', (index) => { - this.index = index; - }); - } - - mounted() { - // A child mounted *after* its Slider (e.g. through `$update()`) can resolve - // it here; guard because `$closest` is undefined when it cannot. - const slider = this.$closest('Slider'); - if (slider) this.subscribe(slider.store); - } - - destroyed() { - if (isFunction(this.unsubscribe)) this.unsubscribe(); - // Clear it so a destroy → remount cycle can subscribe again. - this.unsubscribe = undefined; - } -} -``` - -::: warning Two-sided handshake -Whether a `SliderChild` can resolve its `Slider` from its own `mounted()` depends on the mount path (see [Mounting order](#mounting-order)): when the `Slider` mounts its children, the ancestor is already resolvable; but a child auto-mounted independently (global registry, lazy import) can run `mounted()` before its `Slider` exists, where `$closest('Slider')` is `undefined`. A child that only subscribed through a guarded `$closest('Slider')?.store.subscribe(...)` would then be **silently never subscribed** and would never sync, with no error. - -The handshake closes the gap from both sides: the child subscribes itself whenever it _can_ reach the Slider, and the `Slider` subscribes every child from its **own** `mounted()`, which runs after `__children.mountAll()` and reaches them deterministically before pushing the current state. Making `subscribe()` idempotent lets both paths run without double-subscribing. -::: - -For state shared across unrelated components or persisted across reloads, use a module-level store with [`createLocalStorage`/`createSessionStorage`](/utils/storage/createStorage.html) instead of a per-instance memory provider. - -## Dynamic updates - -When the DOM changes (elements added or removed), call `$update()` on the parent to re-evaluate the tree: - -```js -this.$el.insertAdjacentHTML( - 'beforeend', - '
    ', -); -this.$update(); // Re-scans children, mounts new ones -``` - -If you use `registerComponent`, a global `MutationObserver` handles this automatically for top-level registered components. diff --git a/packages/docs/guide/concepts/philosophy.md b/packages/docs/guide/concepts/philosophy.md deleted file mode 100644 index b02462d11..000000000 --- a/packages/docs/guide/concepts/philosophy.md +++ /dev/null @@ -1,59 +0,0 @@ -# Philosophy - -## Progressive enhancement, not application framework - -`@studiometa/js-toolkit` is designed for **server-rendered websites** — WordPress, Laravel, Symfony, static HTML, or any backend that produces HTML. Instead of owning the DOM (like React or Vue), it **enhances existing markup** with JavaScript behavior. - -The core idea: your HTML is the source of truth. Components bind to it via `data-*` attributes — no virtual DOM, no JSX, no template compilation. - -## The data-attributes approach - -Every concept in js-toolkit maps to a `data-*` attribute: - -| Concept | HTML attribute | Purpose | -| ----------------- | ------------------------- | -------------------------------------------- | -| Component binding | `data-component="Name"` | Identifies which class manages this element | -| Refs | `data-ref="name"` | Marks elements the component needs to access | -| Options | `data-option-key="value"` | Passes configuration from HTML to JavaScript | - -This approach has several advantages: - -- **No build step for HTML** — your server-rendered templates work as-is -- **Inspectable** — open DevTools and see exactly which components are active on which elements -- **Portable** — works with any backend (PHP, Python, Ruby, static HTML) -- **Resilient** — if JavaScript fails to load, the HTML still renders - -## How it compares - -### vs. React / Vue / Svelte - -These frameworks own the rendering pipeline. They generate the DOM from JavaScript (or compiled templates). js-toolkit takes the opposite approach: the DOM already exists, and JavaScript adds behavior to it. - -Use React/Vue/Svelte when you need a **full client-side application** with complex state, routing, and client-side rendering. - -Use js-toolkit when you have **server-rendered HTML** and need to add interactive behaviors — accordions, carousels, scroll animations, form validation, modals. - -### vs. Alpine.js / Stimulus - -Alpine.js and Stimulus share js-toolkit's philosophy of enhancing server-rendered HTML. The key differences: - -- **Class-based architecture** — js-toolkit uses ES classes with inheritance. Components are proper classes, making them easy to extend, type with TypeScript, and test. -- **Built-in services** — scroll, resize, pointer, keyboard, RAF, and more — automatically tied to component lifecycle. No need to manually add/remove event listeners. -- **Scoped resolution** — refs and child components are scoped to the nearest `data-component` boundary, preventing accidental cross-component access. -- **Tree-shakeable utilities** — a set of DOM, math, CSS, string, and animation helpers you can import individually. - -## Design principles - -1. **Convention over configuration** — naming conventions drive behavior. Name a method `onBtnClick` and it automatically listens for click events on the `btn` ref. -2. **Automatic lifecycle** — services are enabled when a component mounts and disabled when it destroys. No manual cleanup. -3. **Lazy by default** — async component imports are only fetched if a matching DOM element exists. Automatic code-splitting with zero configuration. -4. **TypeScript-first** — full type definitions for refs, options, children, and service props. Works with JSDoc too. - -::: tip Further reading - -- [Getting Started](/guide/) — install and create your first component -- [API Reference](/api/) — the complete `Base` class API -- [Component Tree](/guide/concepts/component-tree.html) — how components are resolved and mounted -- [Service Architecture](/guide/concepts/service-architecture.html) — the singleton service pattern - -::: diff --git a/packages/docs/guide/concepts/service-architecture.md b/packages/docs/guide/concepts/service-architecture.md deleted file mode 100644 index e591d34e7..000000000 --- a/packages/docs/guide/concepts/service-architecture.md +++ /dev/null @@ -1,118 +0,0 @@ -# Service Architecture - -## What are services? - -Services are shared, singleton event listeners that distribute browser events (scroll, resize, pointer movement, keyboard input, animation frames) to all subscribed components. Instead of each component adding its own `addEventListener`, the service shares one listener. - -## The singleton pattern - -Each service (e.g. `useScroll`, `useResize`, `useRaf`) creates **one instance** regardless of how many components use it. `AbstractService.getInstance()` implements this, caching instances with a `WeakMap`-like pattern. - -``` -┌─────────────────────────────────────┐ -│ ScrollService (1 listener) │ -│ │ -│ callbacks: │ -│ "Header-0" → Header.scrolled() │ -│ "Sidebar-1" → Sidebar.scrolled() │ -│ "Hero-2" → Hero.scrolled() │ -└─────────────────────────────────────┘ - ↑ single scroll listener - │ - window.scroll -``` - -When the event fires, the service iterates over all registered callbacks and calls them with computed props (position, delta, direction, etc.). - -## Why this matters for performance - -Without services, 20 components reacting to scroll would mean 20 separate `scroll` event listeners on `window`. Each computes its own values, potentially causing redundant layout calculations. - -With services: - -- **One listener** per event type, regardless of component count -- **Shared computation** — scroll position, viewport size, pointer coordinates are computed once per frame -- **Built-in throttling/debouncing** — `useScroll` is throttled, `useResize` is debounced, preventing excessive callbacks -- **Automatic cleanup** — when the last callback is removed, the event listener is removed too - -## Automatic lifecycle - -The `ServicesManager` ties services to the component lifecycle automatically: - -1. **On mount** — if a component defines a `scrolled()`, `resized()`, `ticked()`, `moved()`, or `keyed()` method, js-toolkit enables the matching service -2. **On destroy** — js-toolkit disables all active services for that component -3. **On terminate** — full cleanup, including removing the callback from the singleton - -This means you never manually add or remove event listeners: - -```js -class Parallax extends Base { - static config = { name: 'Parallax' }; - - // Defining this method is enough — the scroll service - // enables on mount, disables on destroy - scrolled({ y, changed }) { - if (changed.y) { - this.$el.style.transform = `translateY(${y * 0.5}px)`; - } - } -} -``` - -## Manual service control - -Enable, disable, or toggle services programmatically via `this.$services`: - -```js -class LazyComponent extends Base { - static config = { - name: 'LazyComponent', - refs: ['btn'], - }; - - onBtnClick() { - // Toggle the scroll service on/off - this.$services.toggle('scrolled'); - } - - scrolled(props) { - // Only runs when the service is enabled - console.log('Scroll position:', props.y); - } -} -``` - -Available methods on `this.$services`: - -| Method | Description | -| ---------------------- | --------------------------------------------- | -| `enable(name)` | Start the service, returns a disable function | -| `disable(name)` | Stop the service | -| `toggle(name, force?)` | Toggle or force enable/disable | -| `has(name)` | Check if the service is currently active | -| `get(name)` | Get the current service props | - -## Standalone usage - -Services also work outside of components: - -```js -import { useScroll } from '@studiometa/js-toolkit'; - -const { add, remove, props } = useScroll(); - -add('my-key', (scrollProps) => { - console.log('Scroll Y:', scrollProps.y); -}); - -// Later -remove('my-key'); -``` - -## Custom services - -Create custom services by extending `AbstractService` and registering them with `$services.register()`. See [Custom Services](/guide/going-further/registering-new-services.html) for details. - -::: tip API Reference -See the [Services hooks](/api/methods-hooks-services.html) and individual service APIs in the [Services](/api/services/) section. -::: diff --git a/packages/docs/guide/going-further/autoloading.md b/packages/docs/guide/going-further/autoloading.md deleted file mode 100644 index 942f5b8fa..000000000 --- a/packages/docs/guide/going-further/autoloading.md +++ /dev/null @@ -1,173 +0,0 @@ -# Autoloading - -This page introduces autoloading: a way to discover the components already present in your markup and load each one on demand, from a manifest you describe once. - -For manually wiring dynamic children on a single parent, see the [Lazy imports](/guide/going-further/lazy-imports.html) guide. Autoloading solves a different problem — loading top-level components across the whole page without a hand-written `config.components` map. - -## What autoloading is - -Normally you mount an application by importing every component up front and passing it to [`createApp`](/api/helpers/createApp.html) or [`registerComponent`](/api/helpers/registerComponent.html). Every component ships in the initial bundle, whether or not the current page uses it. - -Autoloading inverts this. You describe your components once in a **manifest**, and the engine reads the DOM to decide what to load. A component's module is fetched only when an element that needs it exists on the page, and only when its load strategy says it is time. The engine knows nothing hard-coded about any component — it works purely from the manifest, so it autoloads your own [`Base`](/api/) components exactly the same way it would autoload packaged ones. - -## The mental model - -Autoloading is a small pipeline. Each stage has a clear job: - -1. **Discovery** — the loader scans the `root` (the document by default) for `[data-component]` elements and reads each token. -2. **Manifest lookup** — each token is matched against the manifest, which maps it to an entry describing how to load that component. -3. **Strategy-gated lazy `import()`** — the entry carries a load strategy. The loader waits for that strategy's signal (immediately, on visibility, on idle, or on interaction) before it runs the entry's dynamic `import()`. -4. **Registration** — once the module resolves, the loader validates that it exported a `Base` constructor and registers it with [`registerComponent`](/api/helpers/registerComponent.html), which mounts it on the matching elements. - -Nothing runs at import time. Importing the autoload API never touches the DOM; discovery starts only when you call `registerManifests()` or [`autoload()`](/api/autoload/#autoload). - -## Quick start - -Say your components live in `./components`, one file per component, each file named after the token you use in the markup. - -Describe them with [`defineManifest`](/api/autoload/defineManifest.html), then activate them with [`registerManifests`](/api/autoload/registerManifests.html): - -```js -// app.js -import { - defineManifest, - fromMetaGlob, - registerManifests, -} from '@studiometa/js-toolkit'; - -const manifest = defineManifest({ - packageName: '@my/app', - modules: fromMetaGlob(import.meta.glob('./components/*/*.js')), -}); - -registerManifests(manifest); -``` - -Now write the markup. Each `data-component` token is loaded and mounted on demand: - -```html -
    -
    - - -``` - -`Header` loads right away; `Gallery` loads only when it is about to scroll into view. You never imported either component by hand — the manifest and the markup did the wiring. - -The token comes from each file's name: `./components/Header/Header.js` and `./components/Header/index.js` both derive the token `Header`. See [Token derivation](/api/autoload/defineManifest.html#token-derivation) for the exact rules. - -## Load strategies - -Every component has a load strategy that decides _when_ its module is fetched. Set a default for the whole manifest with the `strategy` option, override it per component in `defineManifest`, or override it per element in the markup with the `data-load` attribute. - -| Strategy | Loads the component… | -| ------------- | --------------------------------------------------------------------------- | -| `eager` | Immediately (the default). | -| `visible` | Shortly before the element enters the viewport, via `IntersectionObserver`. | -| `idle` | When the main thread is idle, via `requestIdleCallback`. | -| `interaction` | On the first `pointerover`, `pointerdown` or `focusin` on the element. | - -A manifest-wide default with per-component and per-element overrides: - -```js -const manifest = defineManifest({ - // Every component is lazy by default… - strategy: 'visible', - modules: fromMetaGlob(import.meta.glob('./components/*/*.js')), - components: { - // …but the header is needed straight away. - Header: { strategy: 'eager' }, - // …and this heavy widget can wait for idle time. - Chat: { strategy: 'idle' }, - }, -}); -``` - -```html - -
    -``` - -When a strategy's browser API is unavailable the loader degrades gracefully — it loads eagerly or falls back to a timeout — and logs a warning under the `[@studiometa/js-toolkit/autoload]` prefix. - -### Forcing eager loads with `` - -Sometimes you need a component to load immediately regardless of the strategy baked into its manifest entry — for example a component that is critical only on certain pages. Declare those tokens in a `` tag and the shared runtime force-loads them: - -```html - -``` - -The list is comma-separated, trimmed and de-duplicated. This is handy when the manifest is shared across pages but a given page wants a couple of components up front. - -## Building the manifest - -[`defineManifest`](/api/autoload/defineManifest.html) turns a record of lazy importers into a manifest. It is pure: it never touches the DOM and never registers anything, so you can build and compose manifests freely before you start discovery. - -You rarely write the `modules` record by hand. Each bundler exposes a glob primitive, and an adapter normalizes its output into the shape `defineManifest` expects: - -- [`fromMetaGlob`](/api/autoload/defineManifest.html#frommetaglob) — for Vite's `import.meta.glob('./components/*/*.js')`. -- [`fromWebpackContext`](/api/autoload/defineManifest.html#fromwebpackcontext) — for webpack's `import.meta.webpackContext(...)`. - -```js -// Vite -import { defineManifest, fromMetaGlob } from '@studiometa/js-toolkit'; - -const manifest = defineManifest({ - modules: fromMetaGlob(import.meta.glob('./components/*/*.js')), -}); -``` - -```js -// webpack -import { defineManifest, fromWebpackContext } from '@studiometa/js-toolkit'; - -const manifest = defineManifest({ - modules: fromWebpackContext( - import.meta.webpackContext('./components', { - recursive: true, - regExp: /\.js$/, - mode: 'lazy', - }), - ), -}); -``` - -Use the `components` option for per-token tweaks: rename a token, point at a different named export, pull in child components, or change one component's strategy. Those overrides are documented in the [`defineManifest` reference](/api/autoload/defineManifest.html#parameters). - -## Registering manifests - -[`registerManifests`](/api/autoload/registerManifests.html) hands your manifests to a shared runtime and starts a single loader over the composed set. Call it once from your entry point: - -```js -import { registerManifests } from '@studiometa/js-toolkit'; - -registerManifests(manifest); -``` - -You can register several manifests at once. They compose later-wins, so the **last** argument overrides any token it shares with an earlier one — useful to layer your own components over a base set: - -```js -import { registerManifests } from '@studiometa/js-toolkit'; -import { manifest as baseManifest } from './base-manifest.js'; -import { manifest as appManifest } from './app-manifest.js'; - -// `appManifest` is last, so it wins on shared tokens. -registerManifests(baseManifest, appManifest); -``` - -Registrations coalesce: even across several calls or side-effect entry modules, exactly one loader scans the DOM. [`registerManifest`](/api/autoload/registerManifests.html#registermanifest) is the single-manifest form when you want to build your own side-effect entry with injectable options. - -## Handling errors - -When an import, validation or registration fails for a token, the failure is isolated to that token — the other components keep loading. The loader logs an error under the `[@studiometa/js-toolkit/autoload]` prefix and dispatches a bubbling `js-toolkit:error` event on the document element, so you can report it: - -```js -document.addEventListener('js-toolkit:error', (event) => { - const { token, stage, error } = event.detail; // stage: 'import' | 'registration' -}); -``` - -::: tip API Reference -This guide covers the mental model and the common path. For every option, type and edge case — the `autoload()` handle, `composeManifests`, `ComponentLoader`, per-token overrides and the runtime internals — see the [Autoload API Reference](/api/autoload/). -::: diff --git a/packages/docs/guide/going-further/lazy-imports.md b/packages/docs/guide/going-further/lazy-imports.md deleted file mode 100644 index 1e10cb185..000000000 --- a/packages/docs/guide/going-further/lazy-imports.md +++ /dev/null @@ -1,184 +0,0 @@ -# Lazy imports - -This page covers advanced patterns for managing child components, with a focus on lazy imports. - -For the basics of parent–child relationships, see the [Components](/guide/introduction/managing-components.html) guide. - -## Overview - -By default, all components are bundled together and loaded upfront. Lazy imports split your application into smaller chunks that load only when needed. This improves initial load time and reduces the JavaScript the browser parses. - -js-toolkit provides several helper functions to control exactly when a component's module is fetched: - -| Helper | Trigger | -| ------------------------- | ------------------------------------------------- | -| `importWhenVisible` | When the target element enters the viewport | -| `importWhenIdle` | During browser idle time | -| `importOnInteraction` | On a user interaction (e.g. `click`, `mouseover`) | -| `importOnMediaQuery` | When a media query matches | -| `importWhenPrefersMotion` | Only if the user hasn't disabled motion | - -## Available strategies - -### `importWhenVisible` - -Loads the component when the target element (or a custom selector) becomes visible in the viewport, using an `IntersectionObserver` under the hood. - -```js -import { Base, importWhenVisible } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - // Import when the component's own root element is visible - HeavyComponent: (app) => - importWhenVisible( - () => import('./components/HeavyComponent.js'), - 'HeavyComponent', - app, - ), - }, - }; -} -``` - -You can also trigger the import based on any element in the DOM: - -```js -components: { - HeavyComponent: () => - importWhenVisible( - () => import('./components/HeavyComponent.js'), - '#my-trigger', - ), -}, -``` - -### `importWhenIdle` - -Loads the component during browser idle time using `requestIdleCallback`, for non-critical components that should not compete with the main thread. - -```js -import { Base, importWhenIdle } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - // Import when the browser has spare cycles, with a 2 second deadline - Analytics: () => - importWhenIdle(() => import('./components/Analytics.js'), { - timeout: 2000, - }), - }, - }; -} -``` - -### `importOnInteraction` - -Loads the component when the user interacts with a specific element. Use for heavy widgets like modals, video players, or chat interfaces. - -```js -import { Base, importOnInteraction } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - // Import the modal only when the user clicks the trigger button - Modal: (app) => - importOnInteraction( - () => import('./components/Modal.js'), - '#open-modal-btn', - 'click', - app, - ), - }, - }; -} -``` - -Multiple events can be passed as an array: - -```js -importOnInteraction(() => import('./components/Tooltip.js'), '.has-tooltip', [ - 'mouseenter', - 'focus', -]); -``` - -### `importOnMediaQuery` - -Loads the component only when a specific media query matches. The component will not be imported (and thus not mounted) if the query doesn't match. - -```js -import { Base, importOnMediaQuery } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - // Only load the desktop sidebar on wide screens - Sidebar: () => - importOnMediaQuery( - () => import('./components/Sidebar.js'), - '(min-width: 1024px)', - ), - }, - }; -} -``` - -### `importWhenPrefersMotion` - -Loads the component only if the user hasn't enabled `prefers-reduced-motion`. Use this to avoid loading animation-heavy components for users who prefer minimal motion. - -```js -import { Base, importWhenPrefersMotion } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - ParallaxBackground: () => - importWhenPrefersMotion( - () => import('./components/ParallaxBackground.js'), - ), - }, - }; -} -``` - -## Usage with `config.components` - -All lazy import helpers return a `Promise` resolving to the component class. This matches the async arrow function pattern expected by `config.components`: - -```js -import { Base } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - // Simple dynamic import — no specific trigger - HeavyComponent: () => import('./components/HeavyComponent.js'), - - // With a lazy import helper - VisibleComponent: (app) => - importWhenVisible( - () => import('./components/VisibleComponent.js'), - 'VisibleComponent', - app, - ), - }, - }; -} -``` - -When a parent component is mounted, dynamic components are only imported if a matching element is found in the DOM. If no element is found, the import is never triggered — giving you automatic code-splitting with no extra configuration. - -:::tip API Reference -Find the full API details for each helper in the [Helpers](/api/helpers/) section of the API Reference. -::: diff --git a/packages/docs/guide/going-further/linting.md b/packages/docs/guide/going-further/linting.md deleted file mode 100644 index 4f7c6bdd9..000000000 --- a/packages/docs/guide/going-further/linting.md +++ /dev/null @@ -1,353 +0,0 @@ -# Linting - -The [`@studiometa/eslint-plugin-js-toolkit`](https://www.npmjs.com/package/@studiometa/eslint-plugin-js-toolkit) package provides an Oxlint/ESLint plugin that enforces best practices when writing components with js-toolkit. - -## Installation - -```bash -npm install --save-dev @studiometa/eslint-plugin-js-toolkit -``` - -## Configuration - -### Oxlint - -Add the plugin to your `.oxlintrc.json`: - -```json -{ - "jsPlugins": [ - { - "name": "js-toolkit", - "specifier": "@studiometa/eslint-plugin-js-toolkit" - } - ], - "rules": { - "js-toolkit/require-config": "error", - "js-toolkit/require-config-name-pascal-case": "error", - "js-toolkit/refs-camel-case": "error", - "js-toolkit/refs-plural-multiple": "error", - "js-toolkit/refs-no-bracket-access": "error", - "js-toolkit/require-refs-declared-in-config": "error", - "js-toolkit/options-camel-case": "error", - "js-toolkit/require-options-declared-in-config": "error", - "js-toolkit/async-lifecycle-methods": "error", - "js-toolkit/on-handler-naming": "error", - "js-toolkit/on-global-handler-prefix": "warn", - "js-toolkit/emits-kebab-case": "error", - "js-toolkit/emits-multi-word": "error", - "js-toolkit/require-emit-declared-in-config": "error", - "js-toolkit/components-pascal-case": "error", - "js-toolkit/require-children-declared-in-config": "error", - "js-toolkit/no-deprecated-properties": "warn", - "js-toolkit/no-dispatch-event": "warn", - "js-toolkit/no-shadow-dom": "error", - "js-toolkit/no-create-app": "warn", - "js-toolkit/no-event-listener-methods": "error", - "js-toolkit/no-deep-utils-import": "error", - "js-toolkit/no-redundant-with-mount-when-in-view": "warn", - "js-toolkit/no-manual-intersection-observer": "warn", - "js-toolkit/no-manual-mutation-observer": "warn", - "js-toolkit/prefer-ref-over-query-selector": "warn", - "js-toolkit/prefer-destructured-lookups": "warn", - "js-toolkit/no-dollar-prefix": "error", - "js-toolkit/require-destroyed-cleanup": "warn" - } -} -``` - -### ESLint - -Add the recommended config to your `eslint.config.js` (ESLint v9 flat config): - -```js -import { jsToolkit } from '@studiometa/eslint-plugin-js-toolkit'; - -export default [ - jsToolkit.configs.recommended, - // ...your other config -]; -``` - -To customise individual rule severities, add an override entry after the recommended config: - -```js -import { jsToolkit } from '@studiometa/eslint-plugin-js-toolkit'; - -export default [ - jsToolkit.configs.recommended, - { - rules: { - 'js-toolkit/no-create-app': 'error', - }, - }, -]; -``` - -## Rules - -### Class structure - -#### `js-toolkit/require-config` - -**Recommended:** error - -Requires a `static config` property with a `name` on every class extending `Base`. - -#### `js-toolkit/require-config-name-pascal-case` - -**Recommended:** error  ·  **Fixable** 🔧 - -Requires `config.name` to be PascalCase. - -### Refs - -#### `js-toolkit/refs-camel-case` - -**Recommended:** error  ·  **Fixable** 🔧 - -Requires ref names in `config.refs` to be camelCase. Supports the `[]` multiple-ref suffix. - -#### `js-toolkit/refs-plural-multiple` - -**Recommended:** error - -Requires refs using the `[]` multiple-ref suffix to be pluralized (e.g. `links[]` not `link[]`). - -#### `js-toolkit/refs-no-bracket-access` - -**Recommended:** error  ·  **Fixable** 🔧 - -Disallows bracket access with a `[]` suffix on `this.$refs` (e.g. `this.$refs['items[]']`). Rewrites to dot notation camelCase. - -#### `js-toolkit/require-refs-declared-in-config` - -**Recommended:** error - -Requires all `this.$refs.` accesses to be declared in `static config.refs`. - -#### `js-toolkit/prefer-ref-over-query-selector` - -**Recommended:** warn - -Warns when `this.$el.querySelector()` or `this.$el.querySelectorAll()` is used inside a `Base` subclass. Declare a ref in `static config` and use `this.$refs` instead. - -### Options - -#### `js-toolkit/options-camel-case` - -**Recommended:** error  ·  **Fixable** 🔧 - -Requires option keys in `config.options` to be camelCase. - -#### `js-toolkit/require-options-declared-in-config` - -**Recommended:** error - -Requires all `this.$options.` accesses to be declared in `static config.options`. - -### Emits - -#### `js-toolkit/emits-kebab-case` - -**Recommended:** error  ·  **Fixable** 🔧 - -Requires emit names in `config.emits` to be kebab-case (e.g. `content-change`). - -#### `js-toolkit/emits-multi-word` - -**Recommended:** error - -Requires emit names in `config.emits` to be multi-word to avoid collisions with native DOM events (e.g. `item-click` not `click`). - -#### `js-toolkit/require-emit-declared-in-config` - -**Recommended:** error - -Requires all `this.$emit('name')` calls to use event names declared in `static config.emits`. - -### Components - -#### `js-toolkit/components-pascal-case` - -**Recommended:** error  ·  **Fixable** 🔧 - -Requires component keys in `config.components` to be PascalCase. - -#### `js-toolkit/require-children-declared-in-config` - -**Recommended:** error - -Requires all `this.$children.` accesses to be declared in `static config.components`. - -### Lifecycle methods - -#### `js-toolkit/async-lifecycle-methods` - -**Recommended:** error  ·  **Fixable** 🔧 - -Requires lifecycle methods (`mounted`, `destroyed`, `updated`, `terminated`, `ticked`, `scrolled`, `resized`, `moved`, `loaded`, `keyed`) to be declared `async`. - -### Event handlers - -#### `js-toolkit/on-handler-naming` - -**Recommended:** error - -Requires event handler methods to follow the `onXxxYyy` camelCase convention. - -#### `js-toolkit/on-global-handler-prefix` - -**Recommended:** warn - -Requires handlers for window-only events (e.g. `resize`) to use the `onWindow` or `onDocument` prefix. - -### Forbidden patterns - -#### `js-toolkit/no-deprecated-properties` - -**Recommended:** warn - -Disallows deprecated properties (`$parent`, `$root`, `$children`). Use `$closest()` or `$query()` instead. - -#### `js-toolkit/no-dispatch-event` - -**Recommended:** warn - -Disallows `dispatchEvent()` inside `Base` subclasses. Use `this.$emit()` instead. - -#### `js-toolkit/no-shadow-dom` - -**Recommended:** error - -Disallows `attachShadow()` inside `Base` subclasses. js-toolkit uses Light DOM only. - -#### `js-toolkit/no-create-app` - -**Recommended:** warn - -Disallows `createApp()` (deprecated). Use `registerComponent()` instead. - -#### `js-toolkit/no-event-listener-methods` - -**Recommended:** error - -Disallows `addEventListener()` and `removeEventListener()` inside `Base` subclasses. Define `on*` methods instead — js-toolkit handles binding and cleanup automatically. - -#### `js-toolkit/no-deep-utils-import` - -**Recommended:** error - -Disallows imports reaching into the package layout under `@studiometa/js-toolkit/utils/`. Use the public per-symbol subpath `@studiometa/js-toolkit/utils/` for a single util, or the `@studiometa/js-toolkit/utils` barrel for several. - -```js -// ❌ Bad — reaches into the package layout. -import damp from '@studiometa/js-toolkit/utils/math/damp.js'; - -// ✅ Good -import { damp } from '@studiometa/js-toolkit/utils/damp'; -import { damp, lerp } from '@studiometa/js-toolkit/utils'; -``` - -The rule has no autofix: the subpath key is the exported symbol name, which does not always match the module path (`utils/history.js` exports `push`, published as `utils/historyPush`), so a mechanical rewrite could produce a subpath that does not exist. - -#### `js-toolkit/no-internal-barrel-import` - -**Recommended:** not enabled - -Disallows relative imports of an internal barrel (`./utils/index.js`, `../Base/index.js`). Import the module declaring the symbol instead, so a consumer served by a CDN only downloads what it uses. - -```js -// ❌ Bad -import { Base } from '../Base/index.js'; - -// ✅ Good -import { Base } from '../Base/Base.js'; -``` - -This rule targets libraries published as unbundled ES modules. It is not part of the recommended config — enable it explicitly when it fits your package. - -#### `js-toolkit/no-redundant-with-mount-when-in-view` - -**Recommended:** warn - -Disallows wrapping `withMountWhenInView` inside `withScrolledInView` — the latter already includes the former internally. - -#### `js-toolkit/no-manual-intersection-observer` - -**Recommended:** warn - -Disallows `new IntersectionObserver()` inside `Base` subclasses. Use `withIntersectionObserver` or `withMountWhenInView` decorators instead. - -#### `js-toolkit/no-manual-mutation-observer` - -**Recommended:** warn - -Disallows `new MutationObserver()` inside `Base` subclasses. Use the `withMutation` decorator instead. - -### Best practices - -#### `js-toolkit/prefer-destructured-lookups` - -**Recommended:** warn - -Warns when `this.$refs`, `this.$options` or `this.$children` members are accessed more than once in the same method body. Destructure them into local variables at the top of the method to avoid repeated lookups. - -```js -// ❌ Bad -async mounted() { - this.$refs.input.focus(); - this.$refs.input.value = ''; -} - -// ✅ Good -async mounted() { - const { input } = this.$refs; - input.focus(); - input.value = ''; -} -``` - -#### `js-toolkit/no-dollar-prefix` - -**Recommended:** error - -Disallows user-defined instance methods and properties prefixed with `$` in `Base` subclasses. The `$` prefix is reserved for members that js-toolkit provides (`$el`, `$refs`, `$emit`, `$options`, etc.). - -```js -// ❌ Bad -class Foo extends Base { - $helper() {} -} - -// ✅ Good -class Foo extends Base { - helper() {} -} -``` - -#### `js-toolkit/require-destroyed-cleanup` - -**Recommended:** warn - -Requires a `destroyed()` lifecycle method in `Base` subclasses that call `setTimeout`, `setInterval` or `requestAnimationFrame`. Failing to clean up timers when a component is destroyed can cause memory leaks and hard-to-debug bugs. - -```js -// ❌ Bad -class Foo extends Base { - async mounted() { - this._timer = setTimeout(() => {}, 1000); - } -} - -// ✅ Good -class Foo extends Base { - async mounted() { - this._timer = setTimeout(() => {}, 1000); - } - - async destroyed() { - clearTimeout(this._timer); - } -} -``` diff --git a/packages/docs/guide/going-further/registering-new-services.md b/packages/docs/guide/going-further/registering-new-services.md deleted file mode 100644 index 2995a16ec..000000000 --- a/packages/docs/guide/going-further/registering-new-services.md +++ /dev/null @@ -1,118 +0,0 @@ -# Registering new services - -The built-in services (`scrolled`, `resized`, `ticked`, `moved`, `keyed`) cover common cases. To react to other global events — geolocation changes, device orientation, WebSocket messages — create a custom service and register it on any component. It then works like a built-in service. - -## Creating a custom service - -A custom service extends `AbstractService` and implements its own event handling logic. Here's an example that reacts to device orientation changes: - -```js -import { AbstractService } from '@studiometa/js-toolkit/services'; - -class OrientationService extends AbstractService { - static config = [[() => window, [['deviceorientation']]]]; - - props = { - alpha: 0, - beta: 0, - gamma: 0, - }; - - handleEvent(event) { - this.props.alpha = event.alpha ?? 0; - this.props.beta = event.beta ?? 0; - this.props.gamma = event.gamma ?? 0; - this.trigger(this.props); - } -} - -export function useOrientation() { - return OrientationService.getInstance(); -} -``` - -The static `config` property defines which event listeners to attach. Each entry is a tuple of: - -1. A function returning the `EventTarget` (e.g. `window`, `document`, or any element) -2. An array of `[eventName, options?]` tuples - -The service is lazy: event listeners are added when the first callback is registered, and removed when the last callback is unregistered. - -## Registering on a component - -Use the `$services.register()` method to add your custom service to a component. Once registered, it works like any built-in service — define a method with the service name, and it will be called automatically. - -```js -import { Base } from '@studiometa/js-toolkit'; -import { useOrientation } from './services/useOrientation.js'; - -class Compass extends Base { - static config = { - name: 'Compass', - }; - - mounted() { - // Register the custom service - this.$services.register('orientation', useOrientation); - } - - destroyed() { - // Unregister when no longer needed - this.$services.unregister('orientation'); - } - - // This method is called automatically when orientation changes - orientation(props) { - console.log('Device orientation:', props.alpha, props.beta, props.gamma); - } -} -``` - -## Using standalone - -Like built-in services, custom services can be used outside of components: - -```js -import { useOrientation } from './services/useOrientation.js'; - -const orientation = useOrientation(); - -orientation.add('my-key', (props) => { - console.log('Orientation:', props); -}); - -// Later -orientation.remove('my-key'); -``` - -## Service lifecycle - -The `AbstractService` class manages the service lifecycle automatically: - -- **`init()`** — called when the first callback is added; attaches event listeners defined in `config` -- **`kill()`** — called when the last callback is removed; detaches event listeners -- **`trigger(props)`** — call this from your event handler to notify all registered callbacks - -Override `init()` and `kill()` if you need custom setup/teardown logic beyond event listeners: - -```js -class WebSocketService extends AbstractService { - ws = null; - - init() { - this.ws = new WebSocket('wss://example.com'); - this.ws.addEventListener('message', (event) => { - this.trigger({ data: JSON.parse(event.data) }); - }); - } - - kill() { - this.ws?.close(); - this.ws = null; - } -} -``` - -::: tip API Reference -See the [Services hooks](/api/methods-hooks-services.html) API for hook signatures, the [Services](/api/services/) section for built-in service APIs, and [`$services`](/api/instance-properties.html#services) for the service manager. -::: diff --git a/packages/docs/guide/going-further/typing-components.md b/packages/docs/guide/going-further/typing-components.md deleted file mode 100644 index 00648d246..000000000 --- a/packages/docs/guide/going-further/typing-components.md +++ /dev/null @@ -1,349 +0,0 @@ ---- -outline: deep ---- - -# Typing components - -To improve DX and autocompletion of a component's properties, type the `$el`, `$options`, `$refs`, and `$children` properties with JSDoc comments or directly in TypeScript. The `Base` class type accepts a [type parameter](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes-func.html#type-parameters) with the following format: - -```ts -interface BaseProps { - $el: HTMLElement; - $options: Record; - $refs: Record; - $children: Record>; -} - -declare class Base {} -``` - -See below for an example of how to define the type parameter in JSDoc or in TypeScript. - -::: warning Knowledge requirements -This guide assumes that you are familiar with [TypeScript types](https://www.typescriptlang.org/), make sure to read the basics before going any further. -::: - -::: tip Learn with examples -Both [`@studiometa/js-toolkit`](https://github.com/studiometa/js-toolkit) and [`@studiometa/ui`](https://github.com/studiometa/ui) packages are written in TypeScript, their source code can be a good reference to follow to type your first components. -::: - -## Basic types for a class - -### With JSDoc comments - -```js -import { Base } from '@studiometa/js-toolkit'; -import { Figure } from '@studiometa/ui'; - -/** -@typedef {{ - $el: HTMLAnchorElement; - $options: { - lazy: boolean; - }; - $refs: { - btn: HTMLButtonElement; - items: HTMLElement[]; - }; - $children: { - Figure: Figure[], - LazyComponent: Promise[]; - }, -}} ComponentProps -*/ - -/** - * @extends {Base} - */ -export default class Component extends Base { - /** - * @type {import('@studiometa/js-toolkit').BaseConfig} - */ - static config = { - name: 'Component', - refs: ['btn', 'items[]'], - options: { - name: String, - lazy: Boolean, - }, - components: { - Figure, - LazyComponent: () => import('./LazyComponent.js'), - }, - }; - - mounted() { - this.$el; // HTMLAnchorElement - this.$refs.btn; // HTMLButtonElement - this.$refs.items; // HTMLElement[] - this.$options.name; // string - this.$options.lazy; // boolean - this.$children.Figure; // Figure[] - this.$children.LazyComponent; // Promise[] - } - - /** - * @param {import('@studiometa/js-toolkit').ResizeServiceProps} props - * @returns {void} - */ - resized(props) { - this.$log(props.orientation); // 'square' | 'portrait' | 'landscape' - } -} -``` - -### With TypeScript - -```ts -import { Base } from '@studiometa/js-toolkit'; -import type { - BaseProps, - BaseConfig, - ResizeServiceProps, -} from '@studiometa/js-toolkit'; -import { Figure } from '@studiometa/ui'; -import type LazyComponent from './LazyComponent.js'; - -interface ComponentProps extends BaseProps { - $el: HTMLAnchorElement; - $options: { - name: string; - lazy: boolean; - }; - $refs: { - btn: HTMLButtonElement; - items: HTMLElement[]; - }; - $children: { - Figure: Figure; - LazyComponent: Promise; - }; -} - -export default class Component extends Base { - static config: BaseConfig = { - name: 'Component', - refs: ['btn', 'items[]'], - options: { - name: String, - lazy: Boolean, - }, - components: { - Figure, - LazyComponent: () => import('./LazyComponent.js'), - }, - }; - - mounted() { - this.$el; // HTMLAnchorElement - this.$refs.btn; // HTMLButtonElement - this.$refs.items; // HTMLElement[] - this.$options.name; // string - this.$options.lazy; // boolean - this.$children.Figure; // Figure[] - this.$children.LazyComponent; // Promise[] - } - - resized(props: ResizeServiceProps) { - this.$log(props.orientation); // 'square' | 'portrait' | 'landscape' - } -} -``` - -## Autocomplete for class method - -If you want to have autocompletion for a component's method, you can use the `BaseInterface` interface. - -::: warning JS vs TS -This feature works best with TypeScript, as it can enable autocompletion for whole method signatures. In JavaScript, only the method name will be autocompleted. -::: - -### With JavaScript - -```js -import { Base } from '@studiometa/js-toolkit'; - -/** - * @import { BaseInterface, ScrollServiceProps } from '@studiometa/js-toolkit' - * @implements {BaseInterface} - */ -export default class Component extends Base { - /** - * @inheritdoc - * @param {ScrollServiceProps} props - * @returns {void} - */ - scrolled(props) { - props.y; // number - props.changed; // { x: number, y: number } - } -} -``` - -### With TypeScript - -```ts -import { Base } from '@studiometa/js-toolkit'; -import type { - BaseInterface, - ScrollServiceProps, -} from '@studiometa/js-toolkit'; - -export default class Component extends Base implements BaseInterface { - scrolled(props: ScrollServiceProps) { - props.y; // number - props.changed; // { x: number, y: number } - } -} -``` - -## Typing decorators - -When using one of the decorators from the package, you will need to use some specific types to keep correct types in the class extending the decorator. - -### With JSDoc comments - -```js -import { Base, withIntersectionObserver } from '@studiometa/js-toolkit'; -import Component from './Component.js'; - -/** - * @typedef {import('@studiometa/js-toolkit').BaseProps} BaseProps - */ - -/** @type {ReturnType>} */ -const WithIntersectionObserver = withIntersectionObserver(Component); - -/** - * @template {BaseProps} [T=BaseProps] - * @extends {WithIntersectionObserver} - */ -export class ChildComponent extends WithIntersectionObserver { - mounted() { - this.$log(this.$observer); // IntersectionObserver - this.$log(this.$options.intersectionObserver); // IntersectionObserverInit - this.$log(this.$options.isChildComponent); // true - this.componentMethod(); // boolean - this.childComponentMethod(); // boolean - } - - childComponentMethod() { - return false; - } -} -``` - -### With TypeScript - -With TypeScript, you can directly use the type parameter on the returned value of the decorator function. - -```ts -import { Base, withIntersectionObserver } from '@studiometa/js-toolkit'; -import type { BaseProps } from '@studiometa/js-toolkit'; -import Component from './Component.js'; - -export interface ChildComponentProps extends BaseProps { - $options: { - isChildComponent: true; - }; -} - -export class ChildComponent< - T extends BaseProps = BaseProps, -> extends withIntersectionObserver(Component)< - T & ChildComponentProps -> { - mounted() { - this.$log(this.$observer); // IntersectionObserver - this.$log(this.$options.intersectionObserver); // IntersectionObserverInit - this.$log(this.$options.isChildComponent); // true - this.componentMethod(); // boolean - this.childComponentMethod(); // boolean - } - - childComponentMethod() { - return false; - } -} -``` - -## Typing for extensibility - -If you create a component that can be extended by other component, you will need to define a type parameter for it and specify that the static `config` property is of type `BaseConfig` (there might be some conflicts otherwise). - -### With JSDoc comments - -You will need to declare types in a separate comment from the class and import the `BaseProps` type from the `@studiometa/js-toolkit` package. - -```js {2,10,11} -/** - * @typedef {import('@studiometa/js-toolkit').BaseProps} BaseProps - * @typedef {import('@studiometa/js-toolkit').BaseConfig} BaseConfig - * @typedef {{ name: string, lazy: boolean }} ComponentOptions - * @typedef {{ btn: HTMLButtonElement, items: HTMLElement[] }} ComponentRefs - * @typedef {{ Figure: Figure, LazyComponent: Promise }} ComponentChildren - * @typedef {{ $el: HTMLAnchorElement, $options: ComponentOptions, $refs: ComponentRefs, $children: ComponentChildren }} ComponentProps - */ - -/** - * @template {BaseProps} [T=BaseProps] - * @extends {Base} - */ -export class Component extends Base { - /** - * @type {BaseConfig} - */ - static config = { - name: 'Component', - // ... - }; - - // ... -} -``` - -You will then be able to use the `Component` class like the `Base` class: - -```js -import Component from './Component.js'; - -/** - * @extends {Component<{ $el: HTMLButtonElement >}} - */ -export class ChildComponent extends Component { - // ... -} -``` - -### With TypeScript - -```ts -import { Base } from '@studiometa/js-toolkit'; -import type { BaseProps, BaseConfig } from '@studiometa/js-toolkit'; - -export interface ComponentProps extends BaseProps { - // ... -} - -export class Component extends Base< - T & ComponentProps -> { - static config: BaseConfig = { - name: 'Component', - }; - - // ... -} -``` - -```ts -import Component from './Component.js'; - -export class ChildComponent extends Component<{ $el: HTMLButtonElement }> { - // ... -} -``` - -::: tip API Reference -See the [Configuration](/api/configuration.html) API for the full `BaseConfig` type, and [Instance properties](/api/instance-properties.html) for typed `$refs`, `$options`, and `$children`. -::: diff --git a/packages/docs/guide/going-further/using-decorators.md b/packages/docs/guide/going-further/using-decorators.md deleted file mode 100644 index 0995e139b..000000000 --- a/packages/docs/guide/going-further/using-decorators.md +++ /dev/null @@ -1,86 +0,0 @@ -# Using decorators - -Decorators are higher-order functions that wrap a `Base` class (or any class extending it) and return a new class with extra behavior — lifecycle hooks, event listeners, or observers — without changing the original. For the design rationale, see [Concepts](/guide/concepts/philosophy.html). - -## How to use a decorator - -Pass your base class to the decorator function, then extend the result: - -```js -import { Base } from '@studiometa/js-toolkit'; -import { withScrolledInView } from '@studiometa/js-toolkit'; - -class MyComponent extends withScrolledInView(Base) { - static config = { - name: 'MyComponent', - }; - - scrolledInView({ progress }) { - console.log('Scroll progress:', progress.y); - } -} -``` - -## Combining decorators - -Decorators can be chained by nesting them. The innermost decorator is applied first: - -```js -import { Base } from '@studiometa/js-toolkit'; -import { - withScrolledInView, - withMountWhenInView, -} from '@studiometa/js-toolkit'; - -class MyComponent extends withScrolledInView(withMountWhenInView(Base)) { - static config = { - name: 'MyComponent', - }; - - scrolledInView({ progress }) { - console.log('Scroll progress:', progress.y); - } -} -``` - -You can also compose them step by step for readability: - -```js -import { Base } from '@studiometa/js-toolkit'; -import { - withScrolledInView, - withMountWhenInView, -} from '@studiometa/js-toolkit'; - -const BaseWithInView = withMountWhenInView(Base); -const BaseWithScroll = withScrolledInView(BaseWithInView); - -class MyComponent extends BaseWithScroll { - static config = { - name: 'MyComponent', - }; -} -``` - -## When to use which decorator - -| Need | Decorator | Description | -| ---------------------------------- | ---------------------------- | ------------------------------------------- | -| Respond to viewport size | `withBreakpointObserver` | React to active/inactive breakpoints | -| Manage breakpoint-dependent config | `withBreakpointManager` | Switch full configs per breakpoint | -| Responsive options | `withResponsiveOptions` | Options that change value per breakpoint | -| Scroll-linked animations | `withScrolledInView` | Progress-based scroll callbacks | -| Mount only when visible | `withMountWhenInView` | Lazy mount on intersection | -| Mount on media query | `withMountOnMediaQuery` | Mount/destroy based on a media query | -| Mount when motion is allowed | `withMountWhenPrefersMotion` | Respects `prefers-reduced-motion` | -| Drag interactions | `withDrag` | Drag handlers with inertia support | -| Relative pointer tracking | `withRelativePointer` | Pointer position relative to element bounds | -| Intersection observer | `withIntersectionObserver` | Raw `IntersectionObserver` access | -| DOM mutations | `withMutation` | `MutationObserver` integration | -| Group components | `withGroup` | Coordinate sibling component instances | -| Extra config | `withExtraConfig` | Override config on an existing class | -| Freeze options | `withFreezedOptions` | Prevent option changes after mount | - -:::tip API Reference -Find all natively available decorators and their full API details in the [Decorators](/api/decorators/) section of the API Reference. -::: diff --git a/packages/docs/guide/index.md b/packages/docs/guide/index.md deleted file mode 100644 index 8a8cf5c33..000000000 --- a/packages/docs/guide/index.md +++ /dev/null @@ -1,47 +0,0 @@ -# Getting Started - -This guide will walk you through installing js-toolkit and building your first component. - -`@studiometa/js-toolkit` is a data-attributes driven micro-framework for building JavaScript components. Write classes, add `data-*` attributes to your HTML, and let js-toolkit handle the rest. - -## Installation - -```bash -npm install @studiometa/js-toolkit -``` - -## Hello World - -Create a component by extending the `Base` class: - -```html - -
    - -
    - -``` - -```js -// main.js -import { Base, registerComponent } from '@studiometa/js-toolkit'; - -class Hello extends Base { - static config = { - name: 'Hello', - refs: ['btn'], - }; - - onBtnClick() { - alert('Hello, world!'); - } -} - -registerComponent(Hello); -``` - -That's it — `registerComponent` finds all `[data-component="Hello"]` elements and mounts them automatically, including any added to the DOM later. - -::: tip -Using Vite or Webpack? Set the `__DEV__` global for debug logs. See [Installation](/guide/introduction/installation.html) for build tool setup. -::: diff --git a/packages/docs/guide/introduction/installation.md b/packages/docs/guide/introduction/installation.md deleted file mode 100644 index 5a79693ec..000000000 --- a/packages/docs/guide/introduction/installation.md +++ /dev/null @@ -1,197 +0,0 @@ -# Installation - -::: tip New to js-toolkit? -Read the [introduction](/guide/) first to understand what js-toolkit is and how it works. -::: - -## Package installation - -Install the package from npm: - -```bash -npm install @studiometa/js-toolkit -``` - -## Import paths - -Every export is reachable from the root barrel and from its own top-level subpath: - -```js -// Barrel — one import for several symbols. -import { Base, registerComponent } from '@studiometa/js-toolkit'; - -// Subpath — one import per symbol. -import { Base } from '@studiometa/js-toolkit/Base'; -import { registerComponent } from '@studiometa/js-toolkit/registerComponent'; -``` - -Utils work the same way under the `utils` namespace: - -```js -import { debounce } from '@studiometa/js-toolkit/utils'; -import { debounce } from '@studiometa/js-toolkit/utils/debounce'; -``` - -Each subpath resolves as both the named and the default export, so `import Base from '@studiometa/js-toolkit/Base'` works too. - -The subpath key is the **exported symbol name**, not the file path — the history utils are published as `@studiometa/js-toolkit/utils/historyPush` and `@studiometa/js-toolkit/utils/historyReplace`. Paths reaching into the package layout (`utils/math/damp.js`) are not public API and are reported by the [`no-deep-utils-import`](/guide/going-further/linting.html) rule. - -::: tip Which one should I use? -With a bundler, both cost the same — the barrel is tree-shaken away. Without a build step, prefer the subpath: it resolves to the module declaring the symbol, so the browser downloads that module instead of the whole barrel and everything it re-exports. -::: - -### CDN - -Import js-toolkit directly from a CDN, without a build step. Use the per-symbol subpaths here: - -```html - -``` - -The root barrel also works, but it pulls in the module graph of every symbol it names: - -```html - -``` - -## Quick setup - -### Recommended: `registerComponent` - -Use `registerComponent` to mount your component automatically on any matching DOM element: - -```js -import { Base, registerComponent } from '@studiometa/js-toolkit'; - -class MyComponent extends Base { - static config = { - name: 'MyComponent', - }; - - mounted() { - console.log('MyComponent mounted!'); - } -} - -registerComponent(MyComponent); -``` - -```html -
    -``` - -### Global settings: `defineFeatures` - -Use `defineFeatures` to configure framework-wide settings such as breakpoints, attributes, prefix, and blocking. It works alongside `registerComponent`: - -```js -import { defineFeatures } from '@studiometa/js-toolkit'; - -defineFeatures({ - breakpoints: { - s: '40rem', - m: '80rem', - l: '100rem', - }, -}); -``` - -Available options: `breakpoints`, `blocking`, `prefix`, and `attributes`. See the [`defineFeatures` API](/api/helpers/defineFeatures.html) for details. - -### Advanced: `createApp` - -::: tip Prefer `registerComponent` -`createApp` is a legacy approach — the `js-toolkit/no-create-app` lint rule flags it. Prefer [`registerComponent`](/api/helpers/registerComponent.html) with [`defineFeatures`](/api/helpers/defineFeatures.html) for new projects. -::: - -For more control over initialization (e.g. custom root element, breakpoints, or accessing the app instance from other files), use `createApp`: - -```js -import { Base, createApp } from '@studiometa/js-toolkit'; -import MyComponent from './components/MyComponent.js'; - -class App extends Base { - static config = { - name: 'App', - components: { MyComponent }, - }; -} - -export default createApp(App, { - root: document.body, - breakpoints: { - s: '48rem', - m: '64rem', - l: '80rem', - }, -}); -``` - -`createApp` returns a function that resolves to the app instance, so you can use it in other files: - -```js -import useApp from './app.js'; - -const app = await useApp(); -console.log(app.$el); // document.body -``` - -See the [`createApp` API](/api/helpers/createApp.html) for all available options. - -## Build tool configuration - -js-toolkit uses a `__DEV__` global to conditionally enable debug logs. Set it in your build tool configuration: - -### Vite - -```js -// vite.config.js -import { defineConfig } from 'vite'; - -export default defineConfig({ - define: { - __DEV__: JSON.stringify(process.env.NODE_ENV !== 'production'), - }, -}); -``` - -### Webpack - -```js -import webpack from 'webpack'; - -export default { - plugins: [ - new webpack.DefinePlugin({ - __DEV__: JSON.stringify(process.env.NODE_ENV === 'development'), - }), - ], -}; -``` - -## TypeScript - -The package ships with TypeScript types and works without extra configuration — no separate `@types` package needed. - -```ts -import { Base, BaseConfig } from '@studiometa/js-toolkit'; - -class MyComponent extends Base { - static config: BaseConfig = { - name: 'MyComponent', - }; -} -``` - -## Next steps - -Follow the [Getting Started tutorial](/guide/) to build your first component step by step. diff --git a/packages/docs/guide/introduction/lifecycle-hooks.md b/packages/docs/guide/introduction/lifecycle-hooks.md deleted file mode 100644 index fb8e34090..000000000 --- a/packages/docs/guide/introduction/lifecycle-hooks.md +++ /dev/null @@ -1,72 +0,0 @@ -# Lifecycle - -Each component goes through a series of steps — being created, mounted into the DOM, updated, and destroyed. Lifecycle hooks let you run code at each of these stages. - -| Hook | Timing | -| ------------ | ------------------------------------------------------------------------------------------------------------------------ | -| `mounted` | Runs when a parent mounts the component or calls the [instance `$mount` method](/api/instance-methods.html#mount). | -| `destroyed` | Runs when a parent destroys the component or calls the [instance `$destroy` method](/api/instance-methods.html#destroy). | -| `updated` | Runs when a parent updates the component or calls the [instance `$update` method](/api/instance-methods.html#update). | -| `terminated` | Runs when code calls the [instance `$terminate` method](/api/instance-methods.html#terminate). | - -The [lifecycle hooks diagram](#lifecycle-hooks-diagram) below presents in greater detail how these hooks work together. - -## Using lifecycle hooks - -To use a lifecycle hook, declare it as a method of your class. js-toolkit calls it automatically at the right time. - -```js -import { Base } from '@studiometa/js-toolkit'; - -export default class Component extends Base { - static config = { - name: 'Component', - log: true, - }; - - mounted() { - this.$log('mounted'); - } - - updated() { - this.$log('updated'); - } - - destroyed() { - this.$log('destroyed'); - } - - terminated() { - this.$log('terminated'); - } -} -``` - -When extending an existing component, do not forget to call the parent component hook methods via the `super` keyword: - -```js {8-10} -import Parent from './Parent.js'; - -export default class Child extends Parent { - static config = { - name: 'Child', - }; - - mounted() { - super.mounted(); // call the parent method - } -} -``` - -## Lifecycle hooks diagram - -
    - - -
    - - - ---- - -See also: [Lifecycle hooks](/api/methods-hooks-lifecycle.html) diff --git a/packages/docs/guide/introduction/managing-components.md b/packages/docs/guide/introduction/managing-components.md deleted file mode 100644 index a53e040e8..000000000 --- a/packages/docs/guide/introduction/managing-components.md +++ /dev/null @@ -1,124 +0,0 @@ -# Components - -A component is a class extending the [`Base`](/api/) class. Every component must have a static `config` property with at least a `name`. - -## Defining a component - -```js -import { Base } from '@studiometa/js-toolkit'; - -class Counter extends Base { - static config = { - name: 'Counter', - }; - - count = 0; - - mounted() { - this.$el.textContent = `Count: ${this.count}`; - } -} -``` - -To connect a component to the DOM, add a matching `data-component` attribute: - -```html -
    -``` - -## Registering components - -Use [`registerComponent`](/api/helpers/registerComponent.html) to automatically find and mount all matching elements: - -```js -import { registerComponent } from '@studiometa/js-toolkit'; - -registerComponent(Counter); -``` - -This scans the DOM for `[data-component="Counter"]` elements and mounts an instance on each one. It also watches for newly added elements using a `MutationObserver`. - -## Parent–child components - -Components can declare child components via the [`components` config](/api/configuration.html#config-components). The parent will automatically discover and mount children found inside its root element. - -```js {3,8-10,16-18} -import { Base } from '@studiometa/js-toolkit'; - -class Child extends Base { - static config = { - name: 'Child', - }; - - mounted() { - console.log('Child mounted'); - } -} - -class Parent extends Base { - static config = { - name: 'Parent', - components: { - Child, - }, - }; - - mounted() { - console.log('Parent mounted'); - } -} -``` - -```html -
    -
    -
    -``` - -Children are resolved by matching `[data-component=""]` elements inside the parent's root element. Children mount before the parent — so `"Child mounted"` logs before `"Parent mounted"`. - -## Lazy imports - -Components can be imported lazily with dynamic imports to split your bundle: - -```js {6-8} -import { Base } from '@studiometa/js-toolkit'; - -class App extends Base { - static config = { - name: 'App', - components: { - HeavyWidget: () => import('./components/HeavyWidget.js'), - }, - }; -} -``` - -The import is only triggered if a matching element exists in the DOM. If no `[data-component="HeavyWidget"]` is found, the chunk is never fetched. - -::: tip Going further -See [Lazy imports](/guide/going-further/lazy-imports.html) for advanced lazy import strategies like `importWhenVisible`, `importOnInteraction`, and more. -::: - -## Updating the DOM - -When you dynamically add or remove HTML, call `this.$update()` so the component re-evaluates its children and refs: - -```js -class List extends Base { - static config = { - name: 'List', - refs: ['items[]'], - }; - - addItem() { - this.$el.insertAdjacentHTML( - 'beforeend', - '
    New
    ', - ); - this.$update(); - } -} -``` - -See also: [Configuration](/api/configuration.html), [`data-component`](/api/html/data-component.html), [Instance methods](/api/instance-methods.html), and [Instantiation](/api/instantiation.html). diff --git a/packages/docs/guide/introduction/managing-options.md b/packages/docs/guide/introduction/managing-options.md deleted file mode 100644 index a44c12ee1..000000000 --- a/packages/docs/guide/introduction/managing-options.md +++ /dev/null @@ -1,189 +0,0 @@ -# Options - -Options let you pass configuration from HTML into your component. Each instance can receive different values via `data-option-*` attributes. - -```js {12-13} -class Foo extends Base { - static config = { - name: 'Foo', - options: { - isActive: Boolean, - }, - }; - - isOpen = false; - - mounted() { - this.isOpen; // ← instance level but shared by all instances - this.$options.isActive; // ← instance level, can differ for each instance depending on the HTML - } -} -``` - -## Defining options - -The [`options` property](/api/configuration.html#config-options) of the static `config` object should be used to define what options will be available in the component. - -Define the type and default value of each option, so that if your component expects a `number` js-toolkit parses the value as a `number`. - -### Available types - -- `Boolean`: `data-option-bool` and `data-option-no-bool`, defaults to `false` -- `Number`: parsed as number, defaults to `0` -- `String`: parsed as a string, defaults to `''` -- `Array`: parsed as an array, defaults to `[]`, default value must be defined with a function -- `Object`: parsed as an object, defaults to `{}`, default value must be defined with a function - -### Defining options without a default value - -```js {6-9} -import { Base } from '@studiometa/js-toolkit'; - -class VideoPlayer extends Base { - static config = { - name: 'VideoPlayer', - options: { - videoId: String, - muted: Boolean, - }, - }; -} -``` - -### Add a default value - -```js {6-11} -import { Base } from '@studiometa/js-toolkit'; - -class VideoPlayer extends Base { - static config = { - name: 'VideoPlayer', - options: { - videoId: { - type: String, - default: 'dQw4w9WgXcQ', - }, - }, - }; -} -``` - -You can also use a callback function for the default value, it will be called with the current instance as only parameter: - -```js {9-18} -import { Base } from '@studiometa/js-toolkit'; - -class Player extends Base { - static config = { - name: 'Player', - options: { - type: { - type: String, - default(player) { - switch (player.$el.constructor) { - case HTMLVideoElement: - return 'video'; - case HTMLAudioElement: - return 'audio'; - default: - return 'unknown'; - } - }, - }, - }, - }; -} -``` - -### Merging options - -Merge the values from the `data-option-...` attribute with the default ones when the option type is `Array` or `Object`. Use the `merge` property to enable merge with [`deepmerge`](https://github.com/TehShrike/deepmerge): - -```js {10} -import { Base } from '@studiometa/js-toolkit'; - -class VideoPlayer extends Base { - static config = { - name: 'VideoPlayer', - options: { - styles: { - type: Object, - default: () => ({ display: 'none' }), - merge: { - isMergeableObject: (object) => object[display] === 'none', - }, - }, - array: { - type: Object, - default: () => [1, 2], - merge: true, - }, - }, - }; -} -``` - -The `merge` property can either be a `boolean` or an [option object for the `deepmerge`](https://github.com/TehShrike/deepmerge#options) function. - -::: warning -The `merge` property will only have effect on options whose type is `Array` or `Object`. -::: - -## Using options - -Once the option is defined in the component, add the corresponding attribute to pass the data. - -- The format of the attribute is as follow: `data-option-`. the `` should be in kebab-case. -- The variable name will automatically be converted in `camelCase` in the component. (`optionName`) - -```html {2} -
    ...
    -``` - -```js {15} -import { Base } from '@studiometa/js-toolkit'; - -class VideoPlayer extends Base { - static config = { - name: 'VideoPlayer', - options: { - videoId: { - type: String, - default: 'dQw4w9WgXcQ', - }, - }, - }; - - mounted() { - this.$options.videoId; // 'dQw4w9WgXcQ' - } -} -``` - -## Updating options - -You can update an option by reassigning `this.$options.name = value`, but treat options as initialization parameters — updating them at runtime is not recommended. - -```js {15} -import { Base } from '@studiometa/js-toolkit'; - -class VideoPlayer extends Base { - static config = { - name: 'VideoPlayer', - options: { - videoId: { - type: String, - default: 'dQw4w9WgXcQ', - }, - }, - }; - - mounted() { - this.$options.videoId = 'foo'; - } -} -``` - ---- - -See also: [`data-option-*`](/api/html/data-option.html) · [Configuration — options](/api/configuration.html#config-options) · [`$options`](/api/instance-properties.html#options) diff --git a/packages/docs/guide/introduction/managing-refs.md b/packages/docs/guide/introduction/managing-refs.md deleted file mode 100644 index ab9986a9d..000000000 --- a/packages/docs/guide/introduction/managing-refs.md +++ /dev/null @@ -1,225 +0,0 @@ ---- -outline: deep ---- - -# Refs - -Refs let you access DOM elements from your component without manual `querySelector` calls. You declare them in the component config and access them via `this.$refs`. - -## Defining refs - -Add ref names to the `config.refs` array. Each name corresponds to a `data-ref` attribute in your HTML. - -Refs come in two forms: - -- Single ref (example: `btn`) -- Multiple refs (example: `items[]`) - -```js {4-7} -class Component extends Base { - static config = { - name: 'Component', - refs: [ - 'btn', // single ref - 'items[]', // multiple ref with the `[]` suffix - ], - }; -} -``` - -### Single refs - -Add the ref name to the `refs` array: - -```js {6,10} -import { Base } from '@studiometa/js-toolkit'; - -class Component extends Base { - static config = { - name: 'Component', - refs: ['btn'], // Declare the ref - }; -} -``` - -Add a `data-ref` attribute with the same name. - -```html {2,5-7} -
    - -
    -``` - -### Multiple refs - -If you want to iterate on multiple refs, you can append `[]` to the ref name. For example here `data-ref="items[]"` will yield an array of HTML elements. - -> Appending `[]` to a ref name will force the ref to an array even if there is only one occurrence. - -```js {4} -class Component extends Base { - static config = { - name: 'Component', - refs: ['items[]'], - }; -} -``` - -Then in the HTML template: - -```html {3-5} -
    -
      -
    • #1
    • -
    • #2
    • -
    • #3
    • -
    -
    -``` - -### Naming convention - -- Ref names should be in `camelCase` -- Ref names should help identify their usage: prefer `openBtn` over `btn` -- Multiple refs names should be pluralized: prefer `items[]` over `item[]` - -## Using refs - -Once refs are declared and added in the HTML template it becomes accessible via the corresponding instance property `this.$refs.`. - -```html {2,5-7} -
    - - -
      -
    • #1
    • -
    • #2
    • -
    • #3
    • -
    -
    -``` - -```js {8-9} -class Component extends Base { - static config = { - name: 'Component', - refs: ['btn', 'items[]'], - }; - - mounted() { - this.$refs.btn; // - this.$refs.items; // [
  • #1
  • , ...] - } - - /** - * Attaching a `click` event listener to the `btn` ref. - */ - onBtnClick() { - console.log('The user clicked the button!'); - } -} -``` - -::: tip Attaching events to a ref -Visit the [Events](/guide/introduction/working-with-events.html) page to learn how to handle events on refs. -::: - -### Nested refs - -By default, refs are resolved within the component's scope determined by the `data-component` attribute. In the following example, the parent component will only have one element in its `this.$refs.items` property. - - -```html -
    <─────────┐ -
    direct
    ─┘ -
    -
    nested
    -
    -
    -``` - - -```js -import { Base } from '@studiometa/js-toolkit'; -import Child from './Child.js'; - -class Parent extends Base { - static config = { - name: 'Parent', - components: { Child }, - refs: ['items[]'], - }; - - mounted() { - console.log(this.$refs.items.length); - console.log(this.$refs.items[0]); - } -} -``` - -```js -// Logs -1 -
    direct
    -``` - -If you need to access to nested refs, you can prefix the refs name with the component's name as defined in the static `config` property of the class. - - -```html {4} -
    <─────────┐────────┐ -
    direct
    ─┘ │ -
    │ -
    nested
    ─┘ -
    -
    -``` - - -```js -import { Base } from '@studiometa/js-toolkit'; -import Child from './Child.js'; - -class Parent extends Base { - static config = { - name: 'Parent', - components: { Child }, - refs: ['items[]'], - }; - - mounted() { - console.log(this.$refs.items.length); - console.log(this.$refs.items[0]); - console.log(this.$refs.items[1]); - } -} -``` - -```js -// Logs -2 -
    direct
    -
    nested
    -``` - -:::warning Nested refs and nested components -The resolution scope of nested refs will be limited in case of nested components. - - -```html -
    <─────────┐ -
    direct
    ─┘ -
    -
    <────────────────┐ -
    nested
    ─┘ -
    -
    -
    -``` - - -::: - ---- - -See also: [`data-ref`](/api/html/data-ref.html) · [Configuration — refs](/api/configuration.html#config-refs) · [`$refs`](/api/instance-properties.html#refs) diff --git a/packages/docs/guide/introduction/using-services.md b/packages/docs/guide/introduction/using-services.md deleted file mode 100644 index 81c63af1a..000000000 --- a/packages/docs/guide/introduction/using-services.md +++ /dev/null @@ -1,162 +0,0 @@ -# Services - -Components often need to react to browser events like scroll, resize, pointer movement, or keyboard input. Services provide a shared, optimized way to handle these — a single listener per event type, shared across all components that need it. - -The following services are exported by the `@studiometa/js-toolkit` package: - -- [`useDrag`](/api/services/useDrag.html) to implement drag behaviour with inertia -- [`useScroll`](/api/services/useScroll.html) to implement behaviour on scroll (throttled) -- [`useResize`](/api/services/useResize.html) to implement behaviour on window resize (debounced) -- [`useRaf`](/api/services/useRaf.html) to implement loop behaviour with `requestAnimationFrame` -- [`usePointer`](/api/services/usePointer.html) to implement behaviour reacting to the user pointer (mouse or touch) -- [`useKey`](/api/services/useKey.html) to implement behaviour reacting on keyboard interaction -- [`useLoad`](/api/services/useLoad.html) to implement behaviour on page load - -## Usage - -### As class methods - -Services can be used via predefined class methods (called [services hooks](/api/methods-hooks-services.html)) when extending the `Base` class. They will be automatically enabled when the component is mounted if the method is defined or if a listener has been added to its corresponding event. - -The following service hooks and events are available: - -- `scrolled` for the `useScroll` service -- `resized` for the `useResize` service -- `ticked` for the `useRaf` service -- `moved` for the `usePointer` service -- `keyed` for the `useKey` service - -The [services hooks diagram](#services-hooks-diagram) below presents in greater detail what action triggers a service method. - -**Using a service via its reserved method name** - -```js{8-12} -import { Base } from '@studiometa/js-toolkit'; - -class Component extends Base { - static config = { - name: 'Component', - }; - - scrolled(props) { - if (props.changed.y) { - console.log('User is scrolling vertically.'); - } - } -} -``` - -**Using a service via its corresponding event** - -```js{9-13} -import { Base } from '@studiometa/js-toolkit'; - -class Component extends Base { - static config = { - name: 'Component', - }; - - mounted() { - this.$on('scrolled', (props) => { - if (props.changed.y) { - console.log('User is scrolling vertically.'); - } - }); - } -} -``` - -:::tip Best practice -Services **should always be used via the method API**. The event API targets library authors. -::: - -### Standalone - -Services can be used outside of a `Base` class by importing the `use` functions from the package. Each `use` function will return an object containing the following: - -- an `add(key, callback)` function to add a new callback to the service -- a `has(key)` function to test if the given key matches an added callback -- a `remove(key)` function to remove a callback by its key -- a `props()` function returning the properties of the service - -For example, to do something when the user scrolls, you can use the "scrolled" service and its `useScroll()` function: - -```js -import { useScroll } from '@studiometa/js-toolkit'; - -const scroll = useScroll(); -const key = 'some-uniq-key'; - -// Add a callback for the service -scroll.add(key, (props) => { - // The `props` parameter is the same object - // returned by the `service.props()` method - console.log(props.y === scroll.props().y); - - if (props.changed.y) { - console.log('User is scrolling vertically.'); - } -}); - -// Test if the callback already exists or not -console.log(scroll.has(key)); // true - -// Remove the callback -scroll.remove(key); -``` - -The service properties can also be destructured for simplicity: - -```js -const { add, remove, props, has } = useScroll(); -``` - -## Enabling/disabling a service - -By default, if a service is used either via a class method or via an event, it will be enabled when the instance is mounted and will not be disabled until the instance is destroyed. This can sometimes be counterproductive for many reasons: performances, one-time behaviours, etc. - -Services in a `Base` instance are managed by a `ServicesManager` available with the [`$services` property](/api/instance-properties.html#services). This manager can help you manage which service is running or not. - -For example, to toggle the scroll service only when a button has been clicked: - -```js{10,13-15} -import { Base } from '@studiometa/js-toolkit'; - -class Component extends Base { - static config = { - name: 'Component', - refs: ['btn'], - }; - - onBtnClick() { - this.$services.toggle('scrolled'); - } - - scrolled() { - console.log('The scrolled service is enabled!'); - } -} -``` - -## Services hooks diagram - -
    - Services hooks diagram - -
    - ---- - -See also: [Service hooks](/api/methods-hooks-services.html) · [Services API](/api/services/) · [`$services`](/api/instance-properties.html#services) - ---- - -## What's next - -You now know the fundamentals. Here are some paths to explore: - -- [Lazy imports](/guide/going-further/lazy-imports.html) — lazy loading and code splitting -- [Decorators](/guide/going-further/using-decorators.html) — extend components with higher-order patterns -- [TypeScript](/guide/going-further/typing-components.html) — type-safe components and refs -- [Examples](/examples/) — real-world UI patterns -- [Concepts](/guide/concepts/philosophy.html) — design philosophy and architecture diff --git a/packages/docs/guide/introduction/working-with-events.md b/packages/docs/guide/introduction/working-with-events.md deleted file mode 100644 index e87004c1d..000000000 --- a/packages/docs/guide/introduction/working-with-events.md +++ /dev/null @@ -1,80 +0,0 @@ -# Events - -js-toolkit automatically binds class methods that start with `on` as event handlers. The method name determines what event is listened to and on which target: - -- the component itself with `on` -- the root element of the component with `on` -- the global `window` object with `onWindow` -- the global `document` object with `onDocument` -- any refs defined with `on` -- any child component with `on` - -The following methods can be used: - -```js -import { Base } from '@studiometa/js-toolkit'; -import Child from './Child.js'; - -class App extends Base { - static config = { - name: 'App', - emits: ['custom-event'], - refs: ['btn'], - components: { - Child, - }, - }; - - // Runs when the user clicks `this.$el` - onClick({ event, index, target, args }) {} - - // Runs when the instance emits the `custom-event` - onCustomEvent({ event, index, target, args }) {} - - // Runs when the user clicks the `window` - onWindowClick({ event, index, target, args }) {} - - // Runs when the user clicks the `document` - onDocumentClick({ event, index, target, args }) {} - - // Runs when the user clicks the `btn` ref - onBtnClick({ event, index, target, args }) {} - - // Runs when the user clicks any `Child` component - onChildClick({ event, index, target, args }) {} -} -``` - -All methods receive a single `context` parameter: - -
    -Event callback parameter type - -```ts -type EventHooksCallbackParams = { - /** - * The event emitted - */ - event: Event; - /** - * If the event is emitted on a component, given arguments - * can be accessed with the `args` property. - */ - args: Array; - /** - * If the event is emitted on multiple refs or children, the `index` - * property will be the index of the current target. - */ - index: number; - /** - * The target that emitted the event. - */ - target: Element | Base | Promise | typeof window | typeof document; -}; -``` - -
    - ---- - -See also: [Event hooks](/api/methods-hooks-events.html) · [Instance events](/api/instance-events.html) diff --git a/packages/docs/guide/migration/v1-to-v2.md b/packages/docs/guide/migration/v1-to-v2.md deleted file mode 100644 index 3846d6217..000000000 --- a/packages/docs/guide/migration/v1-to-v2.md +++ /dev/null @@ -1,350 +0,0 @@ -# Migrating from v1 to v2 - -Apply the following steps to your project to ensure a smooth upgrade from v1 to v2. - -[[toc]] - -## Update imports - -Replace deep imports with the two entry points `@studiometa/js-toolkit` and `@studiometa/js-toolkit/utils`. (v2 simplified the exports.) Nested imports still work but may be removed in a later version, so avoid them. - -Rewrite all deep nested imports to named exports from one of these two entry points. Import the `Base` class, the decorators, the services and the helpers from the root entry: - -```js -import Base from '@studiometa/js-toolkit'; // [!code --] -import { withMountWhenInView } from '@studiometa/js-toolkit/decorators'; // [!code --] -import { useScroll } from '@studiometa/js-toolkit/services'; // [!code --] -import { importWhenVisible } from '@studiometa/js-toolkit/helpers'; // [!code --] -import { - // [!code ++] - Base, // [!code ++] - withMountWhenInView, // [!code ++] - useScroll, // [!code ++] - importWhenVisible, // [!code ++] -} from '@studiometa/js-toolkit'; // [!code ++] -``` - -Import all utilities from the `@studiometa/js-toolkit/utils` entry: - -```js -import debounce from '@studiometa/js-toolkit/utils/debounce'; // [!code --] -import throttle from '@studiometa/js-toolkit/utils/throttle'; // [!code --] -import { debounce, throttle } from '@studiometa/js-toolkit/utils'; // [!code ++] -``` - -**math utilities** - -```js -import damp from '@studiometa/js-toolkit/utils/math/damp'; // [!code --] -import clamp01 from '@studiometa/js-toolkit/utils/math/clamp01'; // [!code --] -import { damp, clamp01 } from '@studiometa/js-toolkit/utils'; // [!code ++] -``` - -**css utilities** - -```js -import matrix from '@studiometa/js-toolkit/utils/css/matrix'; // [!code --] -import transition from '@studiometa/js-toolkit/utils/css/transition'; // [!code --] -import { matrix, transition } from '@studiometa/js-toolkit/utils'; // [!code ++] -``` - -:::warning Deleted exports -The `styles` and `classes` exports of the `/utils/css/` namespace have been deleted as they are internal utils. -::: - -**object utilities** - -:::warning Deleted exports -The `autoBind`, `getAllProperties` and `isObject` exports of the `/utils/object` namespace have been deleted as they are internal utils. -::: - -**history API utilities** - -```js -import { - push, - replace, - objectToURLSearchParams, -} from '@studiometa/js-toolkit/utils/history'; // [!code --] -import { - // [!code ++] - historyPush, // [!code ++] - historyReplace, // [!code ++] - objectToURLSearchParams, // [!code ++] -} from '@studiometa/js-toolkit/utils'; // [!code ++] -``` - -## Define all refs - -In the v1, all elements with a `data-ref="refName"` inside the scope of a `data-component` were registered as refs with the `config.refs` definition used to display warnings when a ref was found but not defined. - -The v2 is stricter: it looks up only refs defined in [the `config.refs` property](/api/configuration.html#config-refs) and does not warn about extra refs in the component scope. - -**HTML** - -```html -
    -
    -
    -
    -``` - -**v1** - -```js {4,8} -class Foo extends Base { - static config = { - name: 'Foo', - refs: ['one'], - }; - - mounted() { - console.log(this.$refs); // Before: { one: HTMLElement, two: HTMLElement } - } -} -``` - -**v2** - -```js {4,8} -class Foo extends Base { - static config = { - name: 'Foo', - refs: ['one'], - }; - - mounted() { - console.log(this.$refs); // Before: { one: HTMLElement } - } -} -``` - -Define every ref used by the component: - -```js -class Foo extends Base { - static config = { - name: 'Foo', - refs: ['one'], // [!code --] - refs: ['one', 'two'], // [!code ++] - }; -``` - -## Update `$on` callbacks - -The `$on` instance method listens to events emitted by a component. The v2 uses the `EventTarget` API with `addEventListener` and `removeEventListener` to manage these events. - -Read custom data attached to an emitted event from the `event.detail` property: - -```js -this.$on('event', (one, two) => { // [!code --] -this.$on('event', (event) => { // [!code ++] - const [one, two] = event.detail; // [!code ++] - console.log({ one, two }) -}); - -this.$emit('event', 1, 2); -``` - -:::tip Tip -When using the [Events Hooks API](/api/methods-hooks-events.html), the value of `event.detail` is used as parameters for each method. The changes are only for the [`$on(event, callback)` instance method](/api/instance-methods.html#on-event-callback-options). -::: - -## Replace `$once` - -Replace `$once` with the `once` option of `addEventListener`. (The `$once` instance method has been removed because the `EventTarget` API covers it.) - -```js -this.$once( - 'event', - () => { - // [!code --] - this.$on('event', () => { - // [!code ++] - // do something once. - }); // [!code --] - }, - { once: true }, -); // [!code ++] -``` - -## Use `$children` instead of `$refs` to access child component instances - -Before the v2, `$refs` properties could be instances or array of instances of children components when setting the `data-ref="refName"` attribute on a child component root element. This is no longer the case as [`$refs` properties](/api/instance-properties.html#refs) are now either a single DOM element or an array of DOM elements. - -**HTML** - -```html -
    -
    -
    -``` - -**v1** - -```js {4,11-12} -class Parent extends Base { - static config = { - name: 'Parent', - refs: ['child'], - components: { - Child, - }, - }; - - mounted() { - console.log(this.$refs); // { child: Child } - console.log(this.$refs.child instanceof Child); // true - } -} -``` - -**v2** - -```js {4,11-12} -class Parent extends Base { - static config = { - name: 'Parent', - refs: ['child'], - components: { - Child, - }, - }; - - mounted() { - console.log(this.$refs); // { child: HTMLDivElement } - console.log(this.$refs.child instanceof Child); // false - } -} -``` - -## Bind `this` to some methods - -The v1 had a feature that automatically bound a class method to its instance to make sure that `this` was always the class instance. This feature came with a negative performance impact when working with large number of instances. - -This should only have an impact on callback function use in the `$on(event, callback)` method if a method was directly used as the callback: - -```js -this.$on('custom-event', this.handleCustomEvent); -``` - -Bind the method to `this` before using it: - -```js -this.handleCustomEvent = this.handleCustomEvent.bind(this); // [!code ++] -this.$on('custom-event', this.handleCustomEvent); -``` - -Or use the [`EventListener.handleEvent()` method](https://developer.mozilla.org/en-US/docs/Web/API/EventListener/handleEvent) and pass `this` as the callback: - -```js {7-8,12-13,16-20,22} -class Component extends Base { - static config = { - name: 'Component', - }; - - mounted() { - // The method `handleEvent` of `this` will be called - this.$on('custom-event', this); - } - - destroyed() { - // Always make sure to unbind what has been binded - this.$off('custom-event', this); - } - - handleEvent(event) { - if (event.type === 'custom-event') { - this.handleCustomEvent(event); - } - } - - handleCustomEvent(event) {} -} -``` - -:::tip Going further -Make sure to read "[DOM handleEvent: a cross-platform standard since year 2000](https://webreflection.medium.com/dom-handleevent-a-cross-platform-standard-since-year-2000-5bf17287fd38)" to learn more on how to best leverage the [`EventListener.handleEvent()` API](https://developer.mozilla.org/en-US/docs/Web/API/EventListener/handleEvent). -::: - -## Replace legacy config from getter to static - -Replace the `config` getter with a static property. (The v1 marked the getter as legacy; the v2 no longer supports it.) - -```js -class Component extends Base { - get config() { - // [!code --] - return { - // [!code --] - name: 'Component', // [!code --] - }; // [!code --] - } // [!code --] - static config = { - // [!code ++] - name: 'Component', // [!code ++] - }; // [!code ++] -} -``` - -## Replace legacy `data-options` attribute - -Define custom option values with `data-option-​="value"` attributes. (The single `data-options="{}"` attribute was legacy in the v1 and is no longer supported in the v2.) - -```html -
    - - data-option-one="1" - - data-option-two="2"> - -
    -``` - -## Replace `get:...` event handlers - -Replace the internal `get:options`, `get:refs`, `get:children` and `get:services` events with getters in child classes. (These events have been removed.) - -**Before** - -```js -class Foo extends Base { - mounted() { - this.$on('get:refs', (refs) => { - refs.body = document.body; - }); - } -``` - -**After** - -```js -class Foo extends Base { - get $refs() { - const $refs = super.$refs; - $refs.body = document.body; - return $refs; - } -} -``` - -## Define emitted events - -Define every event emitted from a component in the static `config` property. - -```js -class Component extends Base { - static config = { - name: 'Component', // [!code ++] - emits: ['open', 'close'], // [!code ++] - }; - - open() { - this.$emit('open'); - } - - close() { - this.$emit('close'); - } -} -``` diff --git a/packages/docs/guide/migration/v2-to-v3.md b/packages/docs/guide/migration/v2-to-v3.md deleted file mode 100644 index 3d9be0816..000000000 --- a/packages/docs/guide/migration/v2-to-v3.md +++ /dev/null @@ -1,241 +0,0 @@ -# Migrating from v2 to v3 - -Make sure to read through the following steps to ensure a smooth upgrade from v2 to v3 of this package. - -[[toc]] - -## Package - -### The package is ESM only - -Introduced in [#394](https://github.com/studiometa/js-toolkit/pull/394), the package is now ESM only and does not include CJS files anymore. - -This should have no impact on most projects as files are handled by bundlers most of the time. - -### The `withVue2` decorator has been removed - -The `withVue2` decorator has been removed, along with the package's dependency to the `vue@2` package. - -If your project is using this decorator, you can copy the [latest version](https://github.com/studiometa/js-toolkit/blob/support/2.x/packages/js-toolkit/decorators/withVue2.ts) from the package in your project and keep using it. - -See pull-request [#395](https://github.com/studiometa/js-toolkit/pull/395) for more details. - -## Base framework - -### Breakpoints are no longer read from the DOM - -In the previous versions, breakpoints values for the [resize service](/api/services/useResize.html) were read from the DOM by looking for a `[data-breakpoint]` element. In v3, this is no longer supported, breakpoints should be defined when creating your app with [the `createApp()` function](/api/helpers/createApp.html). - -```html -
    - -``` - -```js -export default createApp(App, document.body); // [!code --] -export default createApp(App, { // [!code ++] - root: document.body, // [!code ++] - breakpoints: { // [!code ++] - s: '30rem', // [!code ++] - m: '60rem', // [!code ++] - l: '90rem', // [!code ++] - }, // [!code ++] -}); // [!code ++] -``` - -### The `on...` method arguments have been refactored - -The number of arguments passed to the `on...` methods and their order were different for each type of target: a child component, a ref, the current instance, etc. In v3, all `on...` methods receive a single `context` argument of the following type: - -```ts -type EventHooksCallbackParams = { - event: Event; - args: Array; - index: number; - target: Element | Base | Promise | typeof window | typeof document; -}; -``` - -To migrate from v2 to v3, update the arguments of all your `on...` methods: - -```js -class Component extends Base { - onClick(event) { // [!code --] - onClick({ event }) { // [!code ++] - event.preventDefault(); - } - - onCustomEvent(event, arg1, arg2) { // [!code --] - onCustomEvent({ args: [arg1, arg2] }) { // [!code ++] - console.log(arg1, arg2); - } - - onRefClick(event, index) { // [!code --] - onRefClick({ target }) { // [!code ++] - const target = this.$refs.Ref[index]; // [!code --] - target.classList.toggle('is-active'); - } - - onChildCustomEvent(event, arg1, index) { // [!code --] - onChildCustomEvent({ target }) { // [!code ++] - const target = this.$children.Child[index]; // [!code --] - target.doSomething() - } -} -``` - -### The `loaded` hook has been removed - -In the previous versions, a `loaded` hook was present on any component extending the `Base` class. It was triggered by the `load` event on the `window`. Due to its ease of implementation and its low usage, it has been removed. - -```js -import { Base } from '@studiometa/js-toolkit'; - -class Component extends Base { - static config = { - name: 'Component', - }; - - loaded() { // [!code --] - console.log('page is loaded') // [!code --] - mounted() { // [!code ++] - window.addEventListener('load', () => { // [!code ++] - console.log('page is loaded'); // [!code ++] - }); // [!code ++] - } -} -``` - -Use the [`useLoad` service](/api/services/useLoad.html) as a replacement; it handles the case where the `load` event has already fired. - -### Lifecycle methods are now async - -The `$mount`, `$update`, `$destroy` and `$terminate` methods are now async and can be awaited. This should not have a big impact on existing projects, but if you access a newly mounted child component after calling `$update()`, await its result to be sure the component is mounted. - -```js -this.$update(); // [!code --] -await this.$update(); // [!code ++] -this.$children.Component[0].toggle(); -``` - -### Unconfigured events are not listenable anymore - -In v2, custom events that were not configured via the [static `config` property](/api/configuration.html) were still taken in consideration when adding event listeners with the [`$on` method](/api/instance-methods.html#on-event-callback-options) or the [`on...` event hooks](/api/methods-hooks-events.html). This behavior has been removed in v3, meaning that each component must define the events it will emit. - -Add the events the component emits to the static `config` object with the `emits` property. - -```js -class MyComponent extends Base { - static config = { - name: 'MyComponent', - emits: ['custom-event'], // [!code ++] - }; - - mounted() { - this.$emit('custom-event'); - } - - onCustomEvent() { - // ... - } -} -``` - -### Custom events are now emitted on the root element - -In v2, events defined on an instance were dispatched on the instance itself. With v3, the custom events defined in the [`config.emits` configuration](/api/configuration.html#config-emits) are now dispatched on the instance root element. - -This is considered a breaking change for the following reason: - -- The `Base` class no longer extends the `EventTarget` class -- Custom event emitted might conflict with native events - -## Utils - -### The `focusTrap` export has been refactored - -In v2 you had to import the `focusTrap` function and then execute it to get the `trap` and `untrap` functions. - -The `trap` and `untrap` functions are now exported directly as `trapFocus` and `untrapFocus`. - -```js -import { trapFocus } from '@studiometa/js-toolkit/utils'; // [!code --] -import { trapFocus, untrapFocus } from '@studiometa/js-toolkit/utils'; // [!code ++] - -const { trap, untrap } = trapFocus(); // [!code --] -trap(element, event); // [!code --] -untrap(); // [!code --] -trapFocus(element, event); // [!code ++] -untrapFocus(); // [!code ++] -``` - -### The return value of the `scrollTo` function has changed - -Previously, the `scrollTo` function could only be used to scroll vertically. It can now scroll horizontally as well. With this new feature, we had to change the return type of the function from `Promise` to `Promise<{ top: number, left: number }>`. - -```js -import { scrollTo } from '@studiometa/js-toolkit/utils'; - -const scrollY = await scrollTo('#target'); // [!code --] -const { left: scrollY } = await scrollTo('#target'); // [!code ++] -``` - -## Advanced - -### The `useService` export has been deleted - -The services implementation have been refactored as classes instead of the previous functional style. The `useService` function that could be used to create additional services has been removed in favor of the `AbstractService` class. - -::: code-group - -```js [v2] -import { useService } from '@studiometa/js-tookit'; - -export function useCustomService() { - const { add, remove, has, get } = useService({ - props: {}, - init() {}, - kill() {}, - }); - - return { - add, - remove, - has, - get, - props: () => props, - }; -} -``` - -```js [v3] -import { AbstractService } from '@studiometa/js-tookit'; - -class CustomService extends AbstractService { - props = {}; - - init() {} - - kill() {} -} - -export function useCustomService() { - return CustomService.getInstance(); -} -``` - -::: - -### Managers instances are no longer public - -The `$refs`, `$options` and `$children` properties were previously returning the instance of their respective manager: `RefsManager`, `OptionsManager` and `ChildrenManager`. These instances are no longer exposed and the getters now only returns objects. - -No replacement is available, direct access to an instance's managers is now private. - -```js -class Component extends Base { - mounted() { - this.$children.registerAll(); // [!code --] - } -} -``` diff --git a/packages/docs/guide/migration/v3-to-v4.md b/packages/docs/guide/migration/v3-to-v4.md deleted file mode 100644 index 54ed6d3a6..000000000 --- a/packages/docs/guide/migration/v3-to-v4.md +++ /dev/null @@ -1,75 +0,0 @@ -# Migrating from v3 to v4 - -Read through the following steps before upgrading from v3 to v4 of this package. The tree-traversal properties deprecated in 3.5.0 are removed in v4. - -[[toc]] - -## Base framework - -### `$children` has been removed — use `$query(name)` - -The `$children` getter has been removed. Use [`$query(name)`](/api/instance-methods.html#query-query) instead. - -```js -this.$children.SliderItem; // [!code --] -this.$query('SliderItem'); // [!code ++] -``` - -`$query` does not return a keyed object like `$children` did — it returns a flat `Base[]` of **all** matching descendants, at any depth. It takes a query string in the format `ComponentName(.selector):state`, so update any code that indexed into `$children` by component name: - -```js -for (const item of this.$children.SliderItem) { // [!code --] -for (const item of this.$query('SliderItem')) { // [!code ++] - item.setActive(); -} -``` - -See [Component Tree — Data flow between components](/guide/concepts/component-tree.html#data-flow-between-components) for the sanctioned parent → child pattern. - -### `$parent` has been removed — use `$closest(name)` - -The `$parent` getter has been removed. Use [`$closest(name)`](/api/instance-methods.html#closest-query) instead, naming the ancestor component you need. - -```js -this.$parent.goTo(index); // [!code --] -this.$closest('Parent')?.goTo(index); // [!code ++] -``` - -::: warning `$closest` is resolved dynamically — always guard it -Like `$parent` since 3.5.0, `$closest` is resolved dynamically on every access and returns `Base | undefined`. Always guard the result (`this.$closest('Parent')?.method()`) and **never dereference it unguarded in `mounted()`**. - -`$closest` walks the DOM ancestors and returns `undefined` only when **no matching ancestor instance has been constructed**. Unlike `$parent`, it ignores `config.components` and still returns an ancestor that is not yet, or no longer, mounted (e.g. breakpoint-inactive) — add the `:mounted` state (`$closest('Parent:mounted')`) when you need a mounted one. Whether an ancestor is resolvable from a child's own `mounted()` depends on the mount path: it is resolvable when the child is mounted by its parent, but a child auto-mounted independently (global registry, lazy import) can run before its ancestor exists. `$closest`'s element-correct behavior shipped in 3.6.0 ([#724](https://github.com/studiometa/js-toolkit/pull/724)); the DOM-based `$parent`/`$query` resolution landed in [#730](https://github.com/studiometa/js-toolkit/pull/730). See [Component Tree — Data flow between components](/guide/concepts/component-tree.html#data-flow-between-components). -::: - -### `$root` has been removed — use `$closest(name)` - -The `$root` getter has been removed. Use [`$closest(name)`](/api/instance-methods.html#closest-query) with the name of your actual root component instead. - -```js -this.$root.doSomething(); // [!code --] -this.$closest('App')?.doSomething(); // [!code ++] -``` - -The old self-reference fallback — `$root` pointing at the current instance when it was stand-alone — is gone. Guard the result: `$closest` returns `undefined` when no matching ancestor has been constructed. - -## Patterns - -### Replacing parent⇄child coupling - -The removed properties encouraged instances to reach across the tree and assume the other side exists. Restructure that coupling through the sanctioned channels, in order of preference: - -- **parent → child** — the parent reads or commands children with [`$query(name)`](/api/instance-methods.html#query-query) (the parent is reliably mounted when it queries). -- **child → parent** — children never dereference the parent; they `$emit` and the parent listens via the `on` convention. -- **dynamic ancestor lookup** — resolve the ancestor lazily with a guarded `$closest(name)?.…`, never unguarded in `mounted()`. -- **shared state** — lift state both sides read and write into a per-instance store built with `createStorage` / `createMemoryStorageProvider` (both require `@studiometa/js-toolkit >= 3.6.0`). Give each parent its own provider instance — the shared `memoryStorageProvider` singleton would sync state across every instance on the page. - -| Anti-pattern (v3) | Pattern (v4) | -| --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `this.$children.Item` (keyed object) | `this.$query('Item')` (flat `Base[]`) | -| `this.$parent.method()` | `this.$closest('Parent')?.method()` | -| `this.$root.method()` | `this.$closest('App')?.method()` | -| Child dereferences `$parent` in `mounted()` | Child `$emit`s; parent listens via `on` | -| Child subscribes via `$closest` in `mounted()` (silently skipped when the ancestor isn't constructed yet) | Two-sided handshake: parent subscribes children in its own `mounted()` | -| State duplicated on parent and children | Per-instance `createStorage` store both sides use | - -A child that only subscribes through a guarded `$closest('Parent')?.subscribe(...)` in `mounted()` is **silently never subscribed** when the ancestor is unresolved (see the guard note above) — no error is thrown. See [Component Tree — Data flow between components](/guide/concepts/component-tree.html#data-flow-between-components) for the full store example, including the two-sided handshake that avoids this pitfall. diff --git a/packages/docs/index.md b/packages/docs/index.md deleted file mode 100644 index 0c7b3ca55..000000000 --- a/packages/docs/index.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -layout: home -sidebar: false -title: A data-attributes driven micro-framework -description: The JS Toolkit by Studio Meta is a JavaScript data-attributes driven micro-framework shipped with a set of useful utility functions for your project. -hero: - name: '@studiometa/js-toolkit' - text: A data-attributes driven micro-framework - tagline: Write JavaScript components as classes and bind them to the DOM with data-attributes - image: - src: /hero.webp - alt: Hero illustration for the JS Toolkit documentation - actions: - - theme: brand - text: Get Started - link: /guide/ - - theme: alt - text: Examples - link: /examples/ - - theme: alt - text: API Reference - link: /api/ -features: - - title: A micro-framework - icon: 🔧 - details: An abstract class to help you write small and efficient JavaScript classes as well as orchestrate them. - - title: Useful services - icon: ⚡ - details: Services will help you implement common tasks by abstracting their tedious parts. - - title: Plenty of utilities - icon: 📦 - details: Functions to help you manipulate the DOM, use math calculations, use the history API and more. - - title: Tree-shakeable - icon: 🌲 - details: Import only what you need. Every utility and service is individually exported so your bundle stays lean. ---- diff --git a/packages/docs/package.json b/packages/docs/package.json deleted file mode 100644 index 5e424d030..000000000 --- a/packages/docs/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "@studiometa/js-toolkit-docs", - "version": "3.9.0", - "type": "module", - "private": true, - "scripts": { - "dev": "vitepress dev .", - "build": "vitepress build .", - "preview": "vitepress preview ." - }, - "devDependencies": { - "@shikijs/vitepress-twoslash": "4.0.2", - "@studiometa/tailwind-config": "3.0.0", - "@tailwindcss/vite": "4.2.2", - "tailwindcss": "4.2.2", - "vitepress": "2.0.0-alpha.19", - "vitepress-plugin-llms": "1.12.0" - }, - "overrides": { - "vite": "npm:vite@8" - } -} diff --git a/packages/docs/public/hero.webp b/packages/docs/public/hero.webp deleted file mode 100644 index d74195974..000000000 Binary files a/packages/docs/public/hero.webp and /dev/null differ diff --git a/packages/docs/utils/Queue.md b/packages/docs/utils/Queue.md deleted file mode 100644 index dcf39fb04..000000000 --- a/packages/docs/utils/Queue.md +++ /dev/null @@ -1,19 +0,0 @@ -# Queue - -Create a class instance to dispatch functions in a queue. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"7ee6697feb4c0ea0496c3bd203d8b83edc2a35b9b6085d9f2af1027489031cc4","data":"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="} -import { Queue } from '@studiometa/js-toolkit/utils'; - -const queue = new Queue(); -queue.add(() => console.log('1')); -queue.add(() => console.log('2')); -``` - -### Parameters - -- `concurrency` (`Number`): the number of tasks to execute at the same time, defaults to `10` -- `waiter` (`(cb: (...args:unknown[]) => unknown) => unknown`): a scheduler function for the next batch execution, defaults to an immediately invoked function `(cb) => cb()` diff --git a/packages/docs/utils/SmartQueue.md b/packages/docs/utils/SmartQueue.md deleted file mode 100644 index db37346d4..000000000 --- a/packages/docs/utils/SmartQueue.md +++ /dev/null @@ -1,18 +0,0 @@ -# SmartQueue - -Manage tasks in a smart queue. Tasks will be automatically batch-called inside a single event loop lasting no more than 50ms (duration of what is considered a long task). - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"bfb53a34b2648558d47d12a2c44f93b82f80685b4d7c066ca8430cd53be95d98","data":"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="} -import { SmartQueue } from '@studiometa/js-toolkit/utils'; - -const queue = new SmartQueue(); -queue.add(() => console.log('1')); -queue.add(() => console.log('2')); -``` - -### Parameters - -This class does not accept any parameter. diff --git a/packages/docs/utils/cache.md b/packages/docs/utils/cache.md deleted file mode 100644 index 0ae7113d1..000000000 --- a/packages/docs/utils/cache.md +++ /dev/null @@ -1,40 +0,0 @@ -# cache - -Cache the result of a function with a single key or a list of keys in nested maps. - -::: warning -The `cache` function is global, meaning that keys are share across all `cache` calls in different files for the same runtime. Make sure to use a local context variable as the first key to avoid sharing cache between unrelated contexts. -::: - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"c3feff7146df2132ea1844578ed8942cc27dc275a5a32b22262987f73311a963","data":"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"} -import { cache } from '@studiometa/js-toolkit/utils'; - -const keys = [document.body, Symbol('key')]; -const callback = () => performance.now(); - -console.log(cache(keys, callback)); // 100 -console.log(cache(keys, callback) === cache(keys, callback)); // true - -setTimeout(() => { - console.log(cache(keys, callback)); // 100 -}, 100); - -console.log(cache('key', callback)); // 200 -console.log(cache('key', callback) === cache('key', callback)); // true - -setTimeout(() => { - console.log(cache('key', callback)); // 200 -}, 100); -``` - -### Parameters - -- `keys` (`any | Array`): a list of keys to be used to cache the result of the callback -- `callback` (`() => any`): the callback executed to retrieve the value to cache - -### Return value - -The value returned by the `callback` function given as parameter. diff --git a/packages/docs/utils/collision/boundingRectToCircle.md b/packages/docs/utils/collision/boundingRectToCircle.md deleted file mode 100644 index 5ef7ba3d1..000000000 --- a/packages/docs/utils/collision/boundingRectToCircle.md +++ /dev/null @@ -1,29 +0,0 @@ -# boundingRectToCircle - -Convert an object describing a rectangle to an object describing a circle. - -::: tip -To enable it for non-square elements, use the second parameter to force the calculation. -::: - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"9ec31a12fb2548827b43444417b7bf9c56c52481bd0de6516b6f68a58457ee67","data":"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="} -import { boundingRectToCircle } from '@studiometa/js-toolkit/utils'; - -const clientRect1 = { x: 0, y: 0, width: 100, height: 100 }; -boundingRectToCircle(clientRect1); // { x: 50, y: 50, radius: 50 } - -const clientRect2 = element.getBoundingClientRect(); -boundingRectToCircle(clientRect2); -``` - -### Parameters - -- `rect` (`{ x: number, y: number, width: number, height: number }`): the dimension of the rectangle to transform -- `force` (`boolean`) : force the function to work with non-square input, defaults to `false` - -### Return value - -- `{ x: number, y: number, radius: number }`: an object describing a circle diff --git a/packages/docs/utils/collision/collideCircleCircle.md b/packages/docs/utils/collision/collideCircleCircle.md deleted file mode 100644 index 965bd831d..000000000 --- a/packages/docs/utils/collision/collideCircleCircle.md +++ /dev/null @@ -1,33 +0,0 @@ -# collideCircleCircle - -Test if two circles collide with one another. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"4dfcdb565ba21d89329a6f23d80a1e4506c0c5bc52ae6335ee0aeb0b0df6e9bd","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvERFYdYAYXakRrGEpVrGI5apgBGRL2ZgMFabrUAmIyYzcjAIwiyYJgDph2AWywRSaNKy8uqWoZq4VFAQIgiIIAAq8IHs/MYWEUFy7LBwvADu7Gj4xpDFZAB0ngCSYHBYyjBQvI4YvPhoaFiIAPQ9+QMVAFYw/PykMBjFEL5wkhX+AOY9MtlwEmAAtLA0YhsrYZs6ERVY+FiU1MyLccjIIFjMpMzel8d6+rwaerz6IAC6FHuj2eryo72sXzCvCsAKBIAmaEEpDAlwAghNeOVeOtcrwIGlJDAMj80BBBCJ8OwwIssfhiRByqReAB+OH3DhgADWlw6XTgvR6QzgmzJsi5RQqcCRUAk3hgaGYFVgRB6gnErDgK2C7HWkm12UUYW+agqHW8rABgJA0qeDEQAE4qGoacUkPonVdSIsFXhViETeE9JdObhEAAGcH4J7MMRkJAOgC+FHQ2DDBGI8aoNHofsk0pJakMvGAnl45d4tCMYEE3kcZAA3GWKxhq7X66Qm1IK89ZYIBbwa3XG55E5dbQEkAB2ACszpgrvw0+zTx99pAEIMIepYasUZjcfIiAAbMnUzg8IQSORs3R14wsKQIDgAvZK23hzebYrJ4gAByei6ixuog+grt6vrxLQ25gGGADM+7PIeSBWGe1BppemZfjm96Ps+ZCYHwraDu2WbfnaCZ/vOi7uuBa54BgMFhgALIhsY0EeqEpuhF7xFeZE4UweEvoRvC9uw/Yfh244/va+jhlO1HAUuJ50ZBCLMH2CDOjuSBzhu0ZIRxKFoZgvEZtelyCfEMh1IEm42CWzbllWJGfl2Fa8MRQ4dh5PaaRJA4+SOYBjlQE5yVYgELspy5evRNlhLCOmwUgVEGQexknqZGF8VhVl3kJT4iW+rnBV+EXusxCEgEBIFgfF6nQSlYaepSmXxogXHnum/HYYV8QPsVBFvt5pEVbJ7ozjVdUqQ1P4JSAjEte6kYZUZnXdTxvX5beuaDcJI18OJkludJ4WTaBx4zTFIHHmp64ndptW6aBDXtRtnE5eZfUFftIAsBwXB8P6ORBmogbaGExZ2OYDm2KYDgtC4ageF4vj+PZOpGhEgaXNEsR4EkBapOkm5ZCEeSFMUpSMvSpBVGAtT1I0zStO0nTdH0Az5MMozjJM0yzPMSwGhwepbDsMB7Pqm5HGEpznFZ1y3MCMZghu0NQpkfyAmroJvEl2s/LCesIgqyKolQGLEtiuLwPihKwYWtvkpS1K0tidNkKy7IvdyvKcwKfTCqKKMSmgUoynKCpKiqaoalqoMS2LYOBoGZpoBaVoXRRoFTtFNGgZ6C3qaDON6HjK2gax63sZ14bfTtll7eutkFpuxalt2LlSSFnlje5zliQFp3lV2YXkb+HqF7FiCKY1bfQ0xVVschXWN9xZnNwJA0bvm9lJUY3eeWV41+eWg++cPT1952o4yXnVjhuls1xaXS8RMl/thvotcffXTiSZrQyFgHgHwfgAglgpmnY00JEwCCfN4XgAByAAAtKQQsoZixyFCKMUrAI4J3YJqFBXZPDt0PhET4ABeJy3ZXLMUjM2YiTCKDNlvrwNho5yGiAPi7KwvA6En3fL8cMzDuzEXkhI8snDjwSMTLw8u4MVFQ2oXDJK3AGy8D6FiUgghIggHlIqJAoA7wLglngYUIBEyJiAA==="} -import { collideCircleCircle } from '@studiometa/js-toolkit/utils'; - -const circle1 = { - x: 40, - y: 40, - radius: 40, -}; - -const circle2 = { - x: 100, - y: 100, - radius: 60, -}; - -collideCircleCircle(circle1, circle2); // true -``` - -### Parameters - -- `circle1` (`{ x: number, y: number, radius: number }`): the first circle dimensions and position -- `circle2` (`{ x: number, y: number, radius: number }`): the second circle dimensions and position - -### Return value - -- `boolean`: whether the circles are colliding or not diff --git a/packages/docs/utils/collision/collideCircleRect.md b/packages/docs/utils/collision/collideCircleRect.md deleted file mode 100644 index 9262c6d04..000000000 --- a/packages/docs/utils/collision/collideCircleRect.md +++ /dev/null @@ -1,34 +0,0 @@ -# collideCircleRect - -Test if a circle collides with a rectangle. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"970f918253964c29b598c07f7f8e71626a372c9f1ffb227a92ebd86b33ab3513","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvERFYdYAYXakRrGACUYYxiOWqYiXszAYKvUlrSHjGboYBGEWTGMAdMOwC2WCKTTTZeRglFTVNMUoQKAgRBEQQABV4f3Z+I2k9NQC5dlg4XgB3djR8dIsxYwBzNQA6dwBJMDgsZRgoXnsMXnw0NCxEAHoBgpGagCsYfn4LDBKIbzhJGt9KgZkcuAkwAFpYGjEttcyYbfK0Gqx8LEi0Zkq45GQQLGZSZk9I3VCYXhD9EAAuhQni83h8qGdeOFbmBqrggU8LGhBKQwJEAIIWXglH6bPK8CBpHEZb7YiCCET4diw7H4H5nKpZAD8gOBIA4YAA1pEen04IMBmM4Ns0E5WJzijU4MioBJPDBbjVYEQBoJxKw4GtAuxNpItTlFMdoTUep5WICgSBpa8GIgAJxUNSwkpIACMAHYqLdSJUFXh1kE/mFLJEObhEAAGKiU17MMRkJB2gC+FHQ2HDBGICa9dFtIBkTX8X30hmA7l4Fd4tEMYEEnnsZAA3OXKxga3WG6Rm1JK29ZYJ+bxa/Wm+4k5FrX4kO6AMyOmDO/BIABsXtevrzxbUoep4YATNH8LH4+REMuU2mcHhCCRyDn6EwsKQIDg/LYq+2R3erd7bQAOVd2QXSoXUQV01x9P14loHcwHDOd8yPN4TyQPcL2odNryzb8aAfeJGCfF8yEwPg2yHDtsx/G1EwAVnnRc3Qgjc8AwWDwwAFkPY8aFPNDUwwq94hvSjcLzAjn1fEjzGYftB2HTsJ1/N0I04oCGLPJioJAPt2AHNikDoxDuITRA+MvDNhJw3N/UkaVzEsUsWwratyK/btK14Mj5NHHsKyKKASk/Tt3MrOl2EqHogp88cqEnW1XT3QCnRApdEFU71mPiM59MQP8uOQniV3QzBBMzW8bms/DCMk98XO8784rdGdPTUlLGOodctJgx1d0TfK40K0ziswoTsIqvCQHEoi31IqKGqUsD2KS4DQPAjrILzVierg5T+pQob+JKiyxvvMTquI99/MC1yFNihbXRowzktAwyMq0q6l228NXTWmMCpMsyBOO8rTsfCSLr4MKIqsG7KMasDlzy1rQMAt68yhnocoSvbBsBo6sJB6hKsmthOB4bJAyNSwdGOawTDMM46dsBwxRcMB3C8Hw/Ap3JgipiIqGiWI8CSOzUnSLcfgDXn8iKEoyksRkYDqMBGmaVp2k6bpen6IYRgKcZJmmGBZkIBYlhWfUOF1HY9ksQ5JdOSwLiuG47geEFY3BfNjl+Y5WU9sFIkhaElYD7SFRRNEqExH5iTxeACSJOkSX0MkKSpGliQZWFmXDjluSoXksH5IYhRFMUJXOaVBFleYFWYJUYBVNV2A1K2dQd7VDW+Y1TXNAFLXh10/1U57Uo9TTN27vne5DL63UMv6BpMiNhtKyzxunwtU7URzfI/WGuyczy5pCisdIHM+x0U6jTIjA9kdS1HOs3f2F7ApekJX08R/X4GRLEwLHZRmvAywHzqhRY+B8vJQPPoUXI116rwIxjDZBN87p3z3K6KMT8kDpVfngbKH8Ho4wBueS0MhYB4E5r4fwwAeY930NCXgSYBDPk8LwAA5AAARrnXeUtxBTClFLIKuqp1RwC4d2dwwCiy+wALxgJbC5diUYWxkTURQFsl9BxaLHDI0Qtl/CQiUeA5yhh9E9k0eonsH1DDLlsRWVBDjbFJkMdLJhwZtCSwZpYbgjZeBDGxKQQQuAqCCOYEgUAuYFw2zwEKEASYkxAA=="} -import { collideCircleRect } from '@studiometa/js-toolkit/utils'; - -const circle = { - x: 40, - y: 40, - radius: 40, -}; - -const rect = { - x: 40, - y: 40, - width: 60, - height: 60, -}; - -collideCircleRect(circle, rect); // true -``` - -### Parameters - -- `circle` (`{ x: number, y: number, radius: number }`): the circle dimensions and position -- `rect` (`{ x: number, y: number, width: number, height: number }`): the rectangle dimensions and position - -### Return value - -- `boolean`: whether the circle and rectangle are colliding diff --git a/packages/docs/utils/collision/collidePointCircle.md b/packages/docs/utils/collision/collidePointCircle.md deleted file mode 100644 index a54b0d271..000000000 --- a/packages/docs/utils/collision/collidePointCircle.md +++ /dev/null @@ -1,32 +0,0 @@ -# collidePointCircle - -Test if a point is inside a circle. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"0fdf037a1a3124ee029cb6a58a9e04a4d06ea37362f1ff166896359a6a030091","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvERFYdYABQjswaAMLtSI1jEZZlqxL2ZgMFaZu0wjJjNyMAjCLJgmAOmHYBbfaTTTZeRglFXVLHUoQKAgRBEQQABV4f3Z+Y159UN52OGywOHZYdJFwmAA6DwBJfKxNGCheBwxefDQ0LEQAek6Adz6ygCsYfn5SGAw0Qh84STKIUgBzTpk5HIkwAFpYGjF1zszVDZKtHTKsfCxItGYFuORkECxmUmYvSIP/ENUQAF0KB6eLzeVGOVl4GhOuD+DzGaEEpDAkUquUmMAyBhS+UKaNRFkhAHJck5hFBcgB+X7/EAcMAAa0irXacC6nQGcA2aGcrFp7DQZTgcKgEi8MGuZVgRE6gnErDgy0Ca0k8tWigxEKsZVaXlYvz+IAFzwYiAAnFQdGAFpMkABGAAcVGui1FeBWQS+YUhkRpuEQAAYQfhnswxGQkMaAL4UdDYH0EYihh10I0gGT5fwfIzADy8HO8WhGMCCLwOMgAbmzuYwBaLJdI5bA4ciBr8SAA7AAWM0wC1WxAAVgdzwWzviHy9Kh9ACYA0GQ+REAA2SPRnB4QgkciJ+hMLCkCA4Px2PPV4sJ/WOo22hddnv4G2Dp3J2jjsA+gDMM5ec6Qk+X1Bja7xpu1BJjue4HpgfBVrwhansBzZGsaA7Ut2lp3og1oPsOyYYC+PqdimgZfjQ86/lG/6rvE65njQ27xKmAp4lYmYVjm+YwTWZasbw0GwbW9a5rwLxCoIzIcXB9aNlQCE2ta04obeSDXtQQ4jimpR4W2n7BiRSl/pglFxhuVygfEejgWQkHHuJtZNheNqTsh5pofeKmPngz5mhOSD2oRs66YgZErrG1HAbRybmfullHrxnHwfZGFvgRzm9phbnYXguFea+Ybad+gX6QBVFASZdEgJFEFHsJ7CiSetnSQl1rth+CkuYuWFqdVomaRh/p+cRoYFeRBkhSVW4RWwnA8AEKrBGqpR6BiNimOYoI6MtdiOFyrhgB43i+P4rrYu66oRFQ0SxHgSSMak6QfNkuQqAURTMExpxVDUdQNE0LRtB03R9D0gzDKM4yTBA0yzPMSxHQUkhbKKMC7EqHxHKUZwXFcNx3ACQbAo8GK8O6lK40CkRrWip1QlSsLwoiVDIrwuL3U92JM/gaIU4SjQQCS5Ik9SKj0lQjJYMy3RshyXI8nyAqCEKEOisw4owJK0rsLKyocHDYBa8d82QpqaDarqDWGjafamq1qW+Y6GX0QqqqhFTPXWi1IhETpg2+oVhmhaVyYMemS28FmUi5uxfFceHOaxRJHhSee5sYa2vkpehyF22pY7ZT6bt5QF1oRsNRVGTRpkppIjEUyxMfWVHdbcXH/HcV1YkN5JdnJ3aTmob2ylZ4HGm5za7ue/lk5LnqMiwHg+3zP4wAzW6BtguGAh7l4vD4gAAnLCsitcrLspysgy1KMpwPi9YeEH6JZAAvKHFbsY5FAVtBb8JzfohV4dpS8CfmHNiRh2z+g/qA8B4c26QPfg2H+R0naqCpotUIq1SjcFLLwboTNSCCFwFQQ+zAkCgCTN2HWeA2QgHDOGIAA="} -import { collidePointCircle } from '@studiometa/js-toolkit/utils'; - -const point = { - x: 25, - y: 25, -}; - -const circle = { - x: 40, - y: 40, - radius: 40, -}; - -collidePointCircle(point, circle); // true -``` - -### Parameters - -- `point` (`{ x: number, y: number }`): the point position -- `circle` (`{ x: number, y: number, radius: number }`): the circle dimensions and position - -### Return value - -- `boolean`: whether the point and circle are colliding or not diff --git a/packages/docs/utils/collision/collidePointRect.md b/packages/docs/utils/collision/collidePointRect.md deleted file mode 100644 index fd35a2fc0..000000000 --- a/packages/docs/utils/collision/collidePointRect.md +++ /dev/null @@ -1,33 +0,0 @@ -# collidePointRect - -Test if a point collides with a rectangle. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"531b608f19b105bd70809b086cdc11a8af9e90af46705dc13fcb38538b958447","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvERFYdYABQjswaAEowxjLMtWJezMBgq9SmtPsMZu+gEYRZMQwB0w7ALY7SaabPkwlFXVzShAoCBEERBAAFXgfdn4DXh0g3zl2WDheAHd2NHxkszFDAHNWGAA6VwBJMDgsdjMoXlsMXnw0NCxEAHpenMHKgCsYfn4zDAKITzhJSohSUt6ZDLgJMABaWBoxDd7U1U3itEqsfCxQtGZSqORkECxmUmZ3UMOfQNUQAF0KB6eLzeVBOvA0JTA5VwfweZjQglIYFCNWyBRgKV0CXqmXRaNM5jKFQA5Nl7MIoNkAPy/f4gDhgADWoU63TgfV6wzgmzQDlYDPylTg8KgEncMGulVgRF6gnErDgKz87HWkkVGUUmPBp067lYvz+ICFzwYiAAnFQKpCCkgAIwANio1yW4rwq38X2CYlC9NwiAADFQRPhnswxGQkKaAL4UdDYX0EYjhx10E0gGT1HwffTAVy8PO8Wj6MCCdy2MgAblz+YwRZLZdIlbAkdCRu8SAA7AAmC0wK34JAAVkdz1KLuiH29Kl93bTwZeYfIiDt0djODwhBI5GT9CYWFIEBw3msBdrpaThqdJoAHAAWHt923D52p2iTsC+gDMgbnoZoi87K7UHG66Jlu1Apru+6HpgfA1rwxZnmBrYmqaM6WqU1qIDaT6jqmGBvr6d6ziGC5IABMZAWu0QbueNA7tE6ZCviYjZlWeaFvBdYVmxvBwQh9aNvmuSZAUp4CTx+AwOwpSdGJ3FNi2l62n6V73hh/aIERTq4XgJwER234kX+SDLhRmBUQmm5XBB0TaFBZAwSenGIYpxq2ja5p0r26mPtQI5jiAr4WlOSCqcR87GYg5GrvGNFgXRqZ2QeDnHnxXFIUpWGdu2amYdhfnPng+HBe+EaGRF4ZRYB5mxaB1n0SASXQceeRQKJzn1q5bZYR+Q5eQ+iB9dpAWtdaJW+jaAbhb+lXRZRtVWduiV7slR58JJ0myR157IbaN5hehmEOgVOnUVJMkMON7nlTN/7VcB1F1UtTBsJwPDpO6mrmNomKWEYJgnH91h2LyThgK4HheD4bo4h6WqhOEkR4HETGJMkHwfTi2R5AURQEpCFTVGAdQNE0MAtG0HRdD0/SDDkIxjBMMBTIQszzIsywwyqWw7OY+wfMc5hnBcVw3HcAIhsCjyYrwHo0hLQKhKCWqEtCtJwgiSJUCivB4hjKjrLAuuScx1wEzAJKtBA5JUvLdIqEyVAslgbL9Jy3K8vypxCoIIozOKzCSjA0qyuw8pqhw3MR7DX1iJUOp6j8Bq7VhdpEYdGn2jhAUwxqQTw1dWFEUGRmVX690WXF9Wpoxma/bwOZSPmHH8fJQlpYhjbNlQKc2le+UZ4O2ephOhc2sXP6kVh7YVwttE2WmkhMYDDc8S36WCdWckNjxo34Nvm95htF0H643cXm5WFXgd3mYVp/mpnpY8T6X/43pGBoyLAeCQ4sPjAJjPOqgtS8EjAIfc7heBEgAAI+z9mKa4HIuQ8lkF7GUco4BEkbK4WuGI0gAF5V5Nw4gGKscFSFNmwaIJePhQSEMbuxfQFC8zkIoFWPe+hOzMI6OdLaXC2GUNcDgpUQDPRoB+kEAG5huDll4P0XWpBBC4CoAg5gSBQApl7NzPAnIQCRkjEAA"} -import { collidePointRect } from '@studiometa/js-toolkit/utils'; - -const point = { - x: 0, - y: 0, -}; - -const rect = { - x: 0, - y: 0, - width: 20, - height: 20, -}; - -collidePointRect(point, rect); // true -``` - -### Parameters - -- `point` (`{ x: number, y: number }`): the point's position -- `rect` (`{ x: number, y: number, width: number, height: number }`): the rectangle's dimensions and position - -### Return value - -- `boolean`: whether the point and rectangle are colliding or not diff --git a/packages/docs/utils/collision/collideRectRect.md b/packages/docs/utils/collision/collideRectRect.md deleted file mode 100644 index d9cdd8e20..000000000 --- a/packages/docs/utils/collision/collideRectRect.md +++ /dev/null @@ -1,35 +0,0 @@ -# collideRectRect - -Test if a rectangle collides with another rectangle. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"04714dd5482fb9fcdb6bd719724d97f5d4b2825d35f948a791480238ba7237d4","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvERFYdYAJRhilYxqWVoAjIl7MwGCrw1iATLv0ZuugEYRZMfQB0w7ALZYIpNNNnyYqmiBlCBQECIIiCAAKvA+7Px6xpr6AOasML5y7LBwvADu7Gj4epDFZMliaRkAdC4AkmBwWOwaULw2GLz4aGhYiAD0A/kjNQBWMPz8GhjFEB5wkjVeqQMy2XASYAC0sDRiWwMmaNvHNVj4WCFozKmRyMggWMykzG4hx1q8gdWZWiAAXQoj2er3eVGOpm+KTA6UypkBwJAGjQglIYBCAEENLxyrxNrleBBEpJMsdfriIIIRPh2LDcfhMhByqReAB+RGPDhgADWIR6fTggwGYzg2zQ9lYPKKNTgqKgEjcMBuNVgRAGgnErDgaz87E2kl12UUmkCNR6blYgKBIDlLwYiAAnFQMrDikgtABWKg3UipZV4db+QLBF103CIAAMVBpL2YYjISEdAF8KOhsBGCMREz66A6QDImj5PrpgC5eBXeLRdGBBG4bGQANzlysYGt1hukZtSSuFKDFdv1pstiuM9ipHqDzvd5MhO3eJAAdi0LpgbvwSG91Be/vznxC3Ijphj+DjCfIiAAbKn0zg8IQSORc/QmFhSBAcN4rFWpznbb6HQADgAZlXdcPR9HcAyiWgD3DJBQILU9XnPJBTBvagM3vbMn2oPNX3fT9MD4NteFrIdcPnB1HRXEBXVSd1EFo31dzwDA4LACMABYTzPGgL3QtNMLvKIHz/GgXyiRg3w/MhiIKHIBzIjs/yopNnTotcGI3RAtxY6CQD7d0w04zdeJQ/i0IwzARKzR9rnwqSZKI78xwnNBf0ogCPS0Y9NPAq9IL9Ay3J6DiI0vcz40sxBBNvTMxNwiT80LOVKjQcxeDLHsK2rZSKO7SteFI8jpxHBT+3wTzCsrUKPPysqwFnKg1KY4CeP87SzO3YK900BETIjDTYwsxMr2srDRJwhzJJAaTCLk788tK1TvKYrjIs6xjmKg/NYMGj1oyQvixri4SEum5983m2SvxIzy5zWr0Ovo7agtYqJ2IOpjaJG6LTom2zEpm67nMWvgjKqhrVvtD1Lz816dL03a8Eh8KPT8v7UNiwGLvsq6CNu+S6oelqnsXLdEaQTb9PzOr0baqLsbOmy8fExy5rYTgeCyYNTU0dRNB0UpDHSzLLGsDpJUcMAXHcTxvF5nIAn5sQQjCCI8FiNKEiSclYQyJXCUKYpSmZRlWX1uE6jARpmlaGB2k6bpen6IYRnycZJmmGBZkIBYlhWI0OANHY9k0Q5jlOTRzkua5bnuEE43BZEhehKoDb+TknmTj5+vTm5M94BEgUeFE0QxKhsUyPECXgIkSU49KKQlalaXpPFzYqDlS7ouk+SoAUsCFIZRXFSVpTQWV5UVZVmFVGB1U1dhtWD/VDiDZWQxji0rQBG1Wq0GiwK6pjkd6wM9RNFRNAZrRNqxmLI1x7D8bw2bUuLIXS3K5aVK7cqJV/41QrJDaq5USbQwAU1R6sNYqRkXCfRi58PqpzEP8b698mYxXvi/Kab9kqXyLGLH+OUfxQJAcVcBZCwEUIgTAcck46EwLJnA0wWgXpaWQe9AykI74P2Qv9ASwFkw2hkLAPA8svA+GAEbFWN8xC8GTAId8bheAAHIAACcpBAKnmHPEUYoJSyEnhqLUcB1HdhcJ/dKXwAC8WUWx5WjC2UiLiey0NMO40cDD3K6C8RQFwyYrGiEkGlSEvAHHZVyrobxVDeBxM8XEyBASgkhM3tfIIAtPhGEhNwRsvAhi4lIIIXAVAlQ3CQKAPMa5Q54FFCAZMyYgA="} -import { collideRectRect } from '@studiometa/js-toolkit/utils'; - -const rect1 = { - x: 0, - y: 0, - width: 20, - height: 20, -}; - -const rect2 = { - x: 0, - y: 0, - width: 20, - height: 20, -}; - -collideRectRect(rect1, rect2); // true -``` - -### Parameters - -- `rect1` (`{ x: number, y: number, width: number, height: number }`): the first rectangle's dimensions and position -- `rect2` (`{ x: number, y: number, width: number, height: number }`): the second rectangle's dimensions and position - -### Return value - -- `boolean`: whether the rectangles are colliding or not diff --git a/packages/docs/utils/collision/index.md b/packages/docs/utils/collision/index.md deleted file mode 100644 index de5743633..000000000 --- a/packages/docs/utils/collision/index.md +++ /dev/null @@ -1,12 +0,0 @@ -# Collision - -Collision utils can be used to test if two DOM elements are overlapping. - -- [boundingRectToCircle](./boundingRectToCircle.html) -- [collideCircleCircle](./collideCircleCircle.html) -- [collideCircleRect](./collideCircleRect.html) -- [collidePointCircle](./collidePointCircle.html) -- [collidePointRect](./collidePointRect.html) -- [collideRectRect](./collideRectRect.html) - -Inspired by http://www.jeffreythompson.org/collision-detection/. diff --git a/packages/docs/utils/createElement.md b/packages/docs/utils/createElement.md deleted file mode 100644 index e565a4d2d..000000000 --- a/packages/docs/utils/createElement.md +++ /dev/null @@ -1,31 +0,0 @@ -# createElement - -A function for creating HTML elements. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"1f40f653882613a829fc385d6f9aa7949dafc6fb4fd3b1d102e0dbb4db4d4725","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvEaRjMaAUVYwAtjDBoAPABVedGmChxeAaxgYI/XgEEwGABLaAsgBklq9Wm3MA5gDlmNSdmLF4AXl4AHRAodiJogD5GNF8AfkRebQppfHZWKFkwdN4AYVl5GHc1DRLc/MLuDNsHZzdlaq9fAKCQ5G0AXV5GAGoARl5iMlYIZihuSLB2FSwIUjRpcsV2z0oYiBEERBAAMWExCTA2XgARAHknXirPDblxSQA6BYWASStJVgwvAATLxmKQfIIOsYwTBeD44upQYZeGh8LC4DARJIoLx2NCpGDSMwMNlmLw4GhSOwwD4JqRQbw/NAYBQFqjEex1gB3PKsXgAI1hggxOK4OTyBXU712KR8h2QyBAdECWGUuwABpqAFZwBYyV6VbYaRjcADcvAA9BbeJpYkQEpoLXaEnrNoaPMaAOTMT1my3WzTMB0WoOug1PL0+7LAXj4WT8DKegDEnt4AF8/VabWS4zB+GFoknEo7Q6I3RG0IxvZ7o7H44mU2nssh9RUK1W4FhmGBff1MwGc/GCyAiyAHZ3u8GJ2Bg6XW1sPZXq9lPRwwCZfeas4GEmuTCWXWBNeqQP0KIqu0SVDLfJk0Sjb5c1BMrOy9Eb1mgIC8KtKzxewUCXZ5Epdh+UEGhjG0e8QKpcDIJRb8MXWSQUXvecYBxGAPz/c8QEvICqBEOpJSkaDYWIiVCkQ0EsBwZEvzQii3SwnDTzwvddnwNA0CwOBECtHUAFovwgVgTE5d4KUEWIIDUFJ3lgIgLQgvI4AtDCK3ebiVFYU8zxACkwQYRAAE4qGUGlUSQUYAGYqBScEYBMkBNI/XY11wRAAAYiPwQCxDIJBTKbdBsC8ghJnIBz9DwLEwApXg7QyRxXGuOIK12Iy1iQAA2cyQEsnxrMQezqDBHxnLwO0POpLygT8gKaHIRBctC6hwrwQgSGi6hYqOFgOC4Pg3MXTRojtRJkjSDIJriaJeAAH14YRYH4OqoGySj6nUYoynDD9aio9RGl4VKXHSogKyGMYJh66ZZnmRZllWdZRo6XYoH2Q4TjON5Lj5O4Hmu+cLk+MAfj+MAAWBUFwUhTxoVkOEEQJBj7wxeKcTxJE4aJEkGQpKkaTpBkmVgVkNDRKROV4HlWD5QUVpFUFjG20jpQc3x5UVZVljVKhjx1MM2w/E0twDZ1HWdEWFw6KsfX7bNZ0Pd7PAVmteBjXME14ZNUwzCXszrPNh1HFXZfdeXly1k3df1pteBbcsxc9adeyVwM7bN4tpynLsZwPS32xt1dqQ3T2gz3IOj01diAKvG9aXIh9aSfWFLCY99FxojDcITwiQFgsCIPgO9YWL+Cy8Y5CJikN8MNYxd8/wwDrz846yPQkjqMYkJ6JxRiG5Y7OOhbziqG43j+MEuARIgMSJLQKS0BkiR5OYRSYGU1TWHUtWNG0tBdP0qhspMgB2ABWCz1GK/AbLKxzKpcg+GAsuqkAa1z/KJQKWtGECdqmAcBdSijKfqrlJCJRUMwakKVWiZTPo5EyoxRgAA5b5WQfogAALFzJyLlYHUlqmALyZViJNSCq1YBnUjjdSCjFegTA2CcB4D+OWnhxogGIRDMc00fDFGiLwhay1Vp5g2qSHicFS5wD2i7Rc1hpEl0gltHuu0Mj7VFouI6O0wCnXOtdEY4wooPTmAsJYKw1gcKtjsKgX0Dh4FOKIf6VwgaPA/BwsGXwwC/DrjDEEFUEYaCRrCeEJA0aDwxpibEuJ8R42JKSckoESarDJsySm7Iabcl5AKIULMxTs0KJzcqcokAKiVLQFUAsQBC11GWA6i5xb+htFLJ0cRVYKOtorI2O4Y5vw1rWHWDYDaR29oWYsIZOmNO6ZrbW9Y9aNmbAMt2AcPa9MHKbCZY5NB+0dHsqZwdXZRj1nuTcLSdzR0ObHE8/5W6Jy5sne8speDpxfFnbCOdGJ53jvcwuldZHl1BMoquxga7OTrlnRuo9PAtwIu3H+ncgVFMRH3Oi6hB7fmHgaJuY9fkTwIDxPiAkLTCVEuJSS0lZIby3jvcQe8NJdNhTpPS/QDLnxskCG+hU74lTsgQl+cUmUaFIeQxqf9mqP1oaA+h4CmEuUYFgUgEAcBrAwHwdgUBihE2pLSMRhgJFkKgFlFBNlcEFSKiVb+z8qpHE1aKpAFDf7MH/o6i+0qIoMN6jQZhRx4qJWSmdVol0kGGVNYgUYuUyqWpwU/CqtqYhxAdaVcVLrJWICvqMD1YCeoQN9eAQI8AuwiAotAsSMAFhEDBNIMtyhNG1twPY76eAU7qn9eW9UvAVDQEEMoXgSriCarLmSOAli+2wHAj4eEJN219tRPIOJ5Ilh5GrUPNECwABSzAq0AGUZDsCwG9BtXbMT+UWHAFQ/blVECHTifkgIuQwH5AKZVXIMSkDgODBYKdu1QF7bCOgVi0Bgq5EhHAIh2DrREDWl6ZCQmIB8QAKhsLwdUJQG2dpEKwLgxgeSohPaiaAxg4CCGIqzVDs6YDvGmD4E06pshtobe8MgyrSB0aRDiRjCVy3vC5GCMA7H51vW7Hk5mmEaJcipDQGi3ZATkyozqZJ5QVDg2Q9YOE0x+RXC43ADtuIEopFEKWsA60ISyExXTKTsJGLIHVAOktcBP0Ui+hBdU/RGBT2JVaSAsAdTvFWD4J030LTYcgmgISRAgRAneLQEMWB2AWns/AT9LKkxJcc85iAEE+DdigAsWz6WnNoFgKQUgbmPNEpnhaHzMA/MBaCwcELFQKQRaizFuLCXCtH10ml5VDnHPFZY9wd4QKfCae05RzDImmbCnE3hwgEFcQvTWLqrO6oauIEm12ntygv1gAAPqIcQwAdX47qo7+2MgpzGxALTfJKMTH5FqTEaA3YEcIEYOGsIyGcjRPSf1eIDBoABAsOAGBRBxkkFl4wHAzBZ35K+99NgAAK3wwVokBLIDEKh+TKGyJAekMImKAgBxSTwIPLhg4h8qyAwpeCw4rgzCY7J6TyfeIpomcgVCft4DumA1n7y2cgNJ1ChXeDfAtLccrnmqs1bq+CBr6lQvwHC5F6LsWQidb68l7rrAkzMCEsLmAQlJBCUK0JCQfB+CrAWN25G1JrekFgf9PbCgqn83yatt8N27sUYwwhiGNzhaiCYzRqsaIGbflA6QfIm4FhZmR8TYDGQI/TDpqsfI2Qa7Fay2gPUoeIC0c9Kn78ABSOAmtPTR9j2aeP1pE/UmT7GbCafq+bRopliC+fuO7ZY6sRgZCuSPFK/3z0x3CAqrgNkXT8lcgky0zify6KjW+lr2ABPSfjB9/pGoRzvgK7IiMiIEwKI/7WaQoN0rAesy8GH6xjI4+F58Wn3JZyc/aQL9jP3dQmE6+3//wusgNvGwP0BmhGlfH/v/sCrzvuoeu8KQMIN8GANBHiOhhoPoEMBtkQCoBGrZECBGugk9DfgAesLcE9i9vAYgcgbkHAGgT6usAPsyIgNgaVN5KZKVIQZASQa8kwY3mQADIltro5haHQJiKpJIIgBfBfBGqZFwbfoAcAawP0EJJJt/qQK1IgFFnIdAYoXulSIepgbwegaQAIYViIbQGIf9JIblK1N5EQdaFAQuhtnwSYWwBaLwiIVWqwPtjqjSJobZKVD4v6usG8hEGPrkgAEq3bUi6Y9imjd66a7Z8YmGMDqjXDdiVT0gAAkwA6caYAAhDcBkWQPkeqGvhvo3vxEUTSGQLwMdpEdEdxmAIUekTUaQPkVnhfiVqQAsMeD4m7tUp7iTG+GhhhtINho5gHr0dqPUsERMIthEC/DupSFzjuq/oQFyOLAkesCxuEHCM5MscpmsWoBsVsSHgZl2hgGgYkbCBEIPjWj3lRtceWowLntkENvEYHioFcQXkXiXunjHlAHHuvvXpvini3lHhnu3oxLnrbj8Y8dRoXuHhCbwOXpXm3sCRUfBs3pHgCZnjRLCWAN8c8b3iPmxvcQoGSVWI/pPi/rPqtp/kvvRJhKvp8ViU3sgJSffnURPs/uSK/qiAybMF/svphGeDRCxkEdAiEYWnseEUzlEfyDEZIJ6J8cSUxskQJmkcUdkbkYWgUdUZkaUeUaCZURkK0ZkXUQ0UqU0S0TqR0RKaVtMSeI8jzIZPzrsMgLpoIKQCWu5jLiSvCKiIIPyO8FiCoNVsyDqJGbABaLjrdhaGru1hwPyBpExjqNwKfGGsZDZBfL5DytgkgBfAKgmpRsmtypQhKtQt5NmrKrmvKkwLPtAHwCSVRmHrvnAPvsULJtkO8H2Sqq4qwMjm3FUbJsgH2BkEQBAJqjdCYvdDMHMJ9M2kcA3iEjROqJ3mgJ2vNq8jAFyJ5CNk4L2uIKqBXPDFCNINNrCF2I5phNkDueyAsOtB+usLNqKOjteVSLAqQICB2fvhxqCEzrMLEIOWJu+eSCGRSJyOIYHl4YIGXKOioCuvSDZnZknvwIwLZNwNLkSiSrAmABfP5grmuIILFvhWbvvupPhbZIIY3vwO8LZLrk9MkDBOeYjF9oBXyDeSzKhbvO8I7s7nRv6ZViSnLp+vVg4krs1qrm1hrvFipPSrrkmLvAJfIKpeFhVDwMNj4nUtsTWsIOsBEFfJ8ZRoiUXliAZRkKXkCVtFlhoCabwKuU3hZRoBkDfB3jnl3ucTcWZVWC5WgIgJrP5Q5U5VUf5W5Z0cki5nnjcj4nzrCLZnxepUJRVtPKJVGeJQrpJU1mFq1urh1gpXkEpSpasM7upUJJpVbmknbrCA7qVfIGDEnG6aOkZrsEQN5O8KMJ1d5N5FmRyhGhfJggWffI6iWS5DRuWamq6ogOgrWZFPWX1PmnMbwggq4KGv1Rgt/DGkgPguVIQngLwpNT/FQgAkAhQGFDKvNYwotQqgOqqpgHwFpLnmQOdBkL4T4EuY4kcCnEduqM9aQOdOqEdsCqBFXO8m+NdC4fwC6mEs5MYGkshB+UGq4KTAABoo3fkmCCChCZxvifIdAAWcjGCwBwAlqGDdjAbZByScjiAkyybkj+RfRD7KoQDAb6YCis34CXkYifo+LIBODXB+C8ARF5hkDqB+mpVeZOjbzYQqpkDvDdoABevIm8ElwWx2T6Fo1gqOFoFYFo/150mZyCOZBBxZw1JUBUNqLkBtrQR1lZaa1Cow7q51HUl1XqeaCqrCw0NiFY3Ck0/CsoQiia8QIAS0K0Bq60RqUioNsi8iMyngSiMdqi4oeicd2iHQuipEBiwaGUnixid0UwC5T0lir0Pt7kTaX1v0LiFwbi9wHiOcoMHwPifi/wgIgSbFa5RO4SiIuWWcmMsSOMImhIiShMKStIaSZI8mmS1MuIOSTOM2BSbM6iYAJSsobpfMp5GoMxRyTSnsbSMsDS6d6s1YkcFsh9nCkYcydsIy6YYyOsPsOy1yKyJy8yeYIyjszs8dXo7s3AfYGy4yI4vsAc/sk4/SwqS4JyYc645y24Uc4cMcx4vy8KScQKLybyuN94+Nzw3ybocKbcwEIKgKKcAKCE4KKE9c6EI8WDh8SD+DHceiyKy9Mmy+Fm2KFQuKsK+K4cXEIls888i8lKq81Kzkm8SkhVDKb8uufV4atk3ku121uBY1QqX978hUn8M1U16aNZLtICnqcqN1TAd1ZAD1SU8gzAtwh6Fwb1Y9JqJteBZtCjow+ZVt1UZjFj/0yaQ19t01QItkc17tDZA0Xt7Cb8ft80AdM0UQwdoi4da0kiKdpEadF9aAmdDQq1F0udOc+dpiRdFiy2b04Dn1P0zi5wkgtdwMnijdK9zdUMAScMEIF5XdqMAFb4/dyIg9BIpWI9I6Y9pMk9GSbIM9tM9MjM+S4mhSy9q93M5SvM7um9gs2959tixoe9HS0sHSO9syp9YDKjgytswyiyoy/9992yZ9z9V9BzDsyy4DHYayv9d9Q4pzuywD+yLzT9NzocZyp9VypYiDdyyDjyqDj4spGDAGniODBoeDDyRchDCExDsL1cSEEKqEbDNAHDND/zdDiKDDKcKK9c343+DEWKlDOKMKGLHE3Dk8vDpKc85KS8K8a8Apoj284j+84DUjbKxtOUeC+UWCI1ije1gqfqhTH8ZCNkowmj1ZaYBkWIsAeAJd1iMYb86YAgyql6noAAAlSuvCIzS/wxSmgKy6qVKRcXaHsSsnaJXv8RiWvstXAlIBECsrwlfZqomM6+mNkHaGvgkTxu2fa/5qXADa0J7LwriFAMOCIjss6Na1Ces/aI6LwoeH/iIIWqwCUFwBXAi6YOYKEg8T1GizRFAFwPgEJCmxiJs8fZa7WEWykO41Y3rNbhAEcxcmazWwbgORcMOI25MgfX/pBn3TEsiPCs5LUYPUprqkkvJn050/jNkLTDjCsew+RnixW16FW6cqsKoLiHxJCDA5LB0tMLIJegeiRioHGwkLsBvEgKAPoOoKOpIHgDqCAGmGmEAA="} -import { createElement } from '@studiometa/js-toolkit/utils'; - -const div = createElement('div', 'hello world'); -const main = createElement('main', { id: 'main' }, div); - -console.log(main.outerHTML); //
    hello world
    - -// camelCase attribute keys are converted to dash-case -createElement('div', { dataOption: 'foo' }); //
    - -// if the second parameter is a string, a Node or an array, it is treated as children -createElement('div', 'lorem ipsum'); //
    lorem ipsum
    -``` - -### Parameters - -- `tag` (`string`): the name of the element to create, defaults to `div` -- `attributes` (`Record`): attributes for the created element, camelCase keys are transformed to dash-case -- `children` (`string | Node | Array`): child or children to append to the element - -### Return value - -An element with the given attributes and children. diff --git a/packages/docs/utils/css/addClass.md b/packages/docs/utils/css/addClass.md deleted file mode 100644 index 382821b37..000000000 --- a/packages/docs/utils/css/addClass.md +++ /dev/null @@ -1,24 +0,0 @@ -# addClass - -Adds one or more classes to an HTML element. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"df8c15c78b7c81446dab04c58b9604fe29e30dafc559ed359b0f56d0b3047b23","data":"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"} -import { addClass } from '@studiometa/js-toolkit/utils'; - -addClass(document.body, 'is-locked'); -addClass([document.body, document.documentElement], 'is-locked'); -addClass(document.querySelectorAll('.should-be-locked'), 'is-locked'); -addClass(document.body, ['is-locked', 'has-pointer']); -``` - -### Parameters - -- `element` (`Element | Element[] | NodeListOf`): the target HTML element -- `classes` (`string | string[]`): CSS classes to add - -### Return value - -This function does not return anything. diff --git a/packages/docs/utils/css/addStyle.md b/packages/docs/utils/css/addStyle.md deleted file mode 100644 index 72676c953..000000000 --- a/packages/docs/utils/css/addStyle.md +++ /dev/null @@ -1,23 +0,0 @@ -# addStyle - -Adds styles to an HTML element. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"1ddf5969054480b5e94bc779c0362e0b42ecab0dfe0a26bc788ad17571572fed","data":"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"} -import { addStyle } from '@studiometa/js-toolkit/utils'; - -addStyle(document.body, { display: 'block' }); -addStyle([document.body, document.documentElement], { display: 'block' }); -addStyle(document.querySelectorAll('div'), { display: 'block' }); -``` - -### Parameters - -- `element` (`HTMLElement | HTMLElement[] | NodeListOf`): the target HTML element -- `styles` (`Partial`): CSS styles to add - -### Return value - -This function does not return anything. diff --git a/packages/docs/utils/css/animate.md b/packages/docs/utils/css/animate.md deleted file mode 100644 index 490f81cc3..000000000 --- a/packages/docs/utils/css/animate.md +++ /dev/null @@ -1,109 +0,0 @@ -# animate - -Use this function to animate the `transform` and `opacity` properties of an element. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"c6b19447cc7cf93469042ebbc780f85c619014480171df9cc5c08abeb7ea153a","data":"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"} -import { animate, easeInOutExpo } from '@studiometa/js-toolkit/utils'; - -const animation = animate( - document.body, - [ - { x: 0, '--red': 0 }, // from - { x: 100, scale: 0.5, opacity: 0.5, '--red': 255, easing: [0, 1, 0, 1] }, - { x: 0, '--red': 0 }, // to - ], - { - duration: 10, - easing: easeInOutExpo, - }, -); - -animation.start(); -``` - -### Parameters - -- `element` (`HTMLElement | HTMLElement[] | NodeListOf`): the target HTML element -- `keyframes` (`KeyFrame[]`): array of objects describing the key frames of the animation -- `options` (`Options`): options for the animation, see [types](#types) below for more details - -### Return value - -The `animate` function returns an object with methods to control the animation: - -#### `start()` - -Use this method to start the animation which does not start automatically. - -#### `pause()` - -Use this method to pause an animation and commit its styles to the element. - -#### `play()` - -Use this method to unpause a paused animation. - -#### `finish()` - -Use this method to go to the end of the animation. This is an alias for `animation.progress(1)`. - -#### `progress(value)` - -Use this method to get or set the progress (`0–1` range) of the animation. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"c2aff4c4d26f3a222ca0c5799a42fb0409c6ef472bad2376e9b071817dd17237","data":"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"} -import { animate } from '@studiometa/js-toolkit/utils'; - -const animation = animate(document.body, [{ opacity: 1 }, { opacity: 0 }]); - -console.log(animation.progress()); // 0 -animation.progress(1); -console.log(animation.progress()); // 1 -console.log(document.body.style.opacity); // '0' -``` - -### Types - -```ts -import { TransformProps } from '@studiometa/js-toolkit/utils'; - -type EasingFunction = (value:number) => number; -type BezierCurve = [number, number, number, number]; -type CSSCustomPropertyName = `--${string}`; - -interface KeyFrame extends TransformProps { - opacity?: number; - transformOrigin?: string; - easing?: EasingFunction|BezierCurve; - offset?: number; - [key:CSSCustomPropertyName]: number; -} - -interface Options { - duration?: number | (element: HTMLElement, index: number) => number; - stagger?: number | (element: HTMLElement, index: number) => number; - smooth?: true | number; - easing?: EasingFunction | BezierCurve; - onStart?: (progress: number) => void; - onProgress?: (progress: number) => void; - onFinish?: (progress: number) => void; -} - -interface Animate : { - start: () => void; - pause: () => void; - play: () => void; - finish: () => void; - progress: (value?: number) => number; -} - -function animate( - element:HTMLElement, - keyframes: KeyFrame[], - options?: Options -): Animate; -``` diff --git a/packages/docs/utils/css/getOffsetSizes.md b/packages/docs/utils/css/getOffsetSizes.md deleted file mode 100644 index 2680a4c49..000000000 --- a/packages/docs/utils/css/getOffsetSizes.md +++ /dev/null @@ -1,33 +0,0 @@ -# getOffsetSizes - -This function will return a `DOMRect` like object representing the position of the given element without its CSS transforms. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"9a0a440ea0caebdab87b04ffdb6f536c2e21bad491a7d35a67a13bfdccee9faa","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAOYw0AeX784cgMrsAXvEYxWMALYwwaRLwASAFQCyAGQCiew8e6ngAHSm8vtU2EH6AIzIAbg8vLwxffyDSUM8vAHd2KDR8KMCQsPD8GHZpfBNePwzYrK80CCx0mLjw3lI8gurM+N4AiDQK/WbS1r1+QuKajwBfD3Z9LAhSNBk5RWU1TXhKECgIEQREEABxOV5mXgADABF5KwAlGDEj3g4Aaxhj+QCAK2u0W/5pg6ldAyMaAovCSqQgglm7DQcF4aFIzDAcG+pH0cAAdKs0MxpFtkMgQBwwPdVgU0Fg4IgAPSU15wAC0FQgrHuULRcDQgigEkMWLRsCIlIh7FYcEpm1FsgUShUaHUWnRBX0rBAAF0VVR2cwZkgAJxUPRgaSpJAARgALFQsaRJXhJQsZXKVvr2GBcIgAAxUET4LXMMRkXUjCjobBugjEAOWugMbYiSTs3hwZYU3juVo+IrRFp1SKZkq1cJJFJpPPDVo5RqDLO9OoVKql7PhBr5Kv5sptDpdHoFrz9VtlkarTXaxAAdk9BKMRvwSAArJatTbtkn5atCW6AExen3w/3kRAANiDIZweEIJHIUfoTDYnB4cyli1lyZ0jkBpkstgcAOcrnbGaGRsIm7dsi1SEDy1yFsINrSoYKbSt4K8dpOggboGxrcI+wgsYwAmKYZgfe0llXKh1k2PA9lmQ5TnOK4bjudhHmeN4Pi+H4EV4f4nCBEEoUICFeChGE4QRJFplRDEFxxJA8QJF1iSoUlySpGl6UZZlWXZTluTkZg+RgAUhRFMU4AleZpRI+A0UVZU1Q1K0Y1HAAOfUp2NRBzQXa05FtCyn0dBBnVdJAtxAb1fT3U0zWPahQzPCNL2oaM8CILVeHI/x314E4Niy4xVnIrYQAAKhKo4kjAdYEj5PKeKOMr6jkQRSERA4mv4MgjBEJ4KlhHIMrqwFeDjYxmBdGAoCEqRUieSrqrRDwPGQKwTgAOV4K5OtIbqYBVRhlIpal+V0SoyDRfQIA0YVWH06ZpEpIrKQAdRgAJKQAQQABQASRel1qseobnCHRzdQAZjcw0PNc6hF187ZMp4tcJtC7dIpofcNx1WLMFPbZz0jZLr22RgsFIM6ZgwPhcpEfK0DRdooFzT97DfAqyI2YqLAGsrTmBhmmYwBqSt4cnKcwJryfgQERIGgAeIWAD5eB+eX+HhQwZRVyBYFV/h+qeOnSB24xBrpnjgR+PxWFYISDcgRNBG9Lj2dmOh2HZdElrAFb1s2mBtt2/bDtUk7WEpi6rpuu7rSBzYXrez7fspWn6cpIXuFBrUYxNd0woNackAtOGfJjEAhZRkLEDCiLd0xpBweckZ1XC6Aw3w6ZZmAIjLOfeVeBGAQKf0XgAHIAAFtK5NC9LUhkICZFk0EFcQRTHuIPFGhMV3gXgAF5e4Cl8kcBRnoGp4JVh5ZgkFAaMjCTSQ8FpEARhGIA"} -import { getOffsetSizes } from '@studiometa/js-toolkit/utils'; - -const sizes = getOffsetSizes(document.body); -``` - -### Parameters - -- `element` (`HTMLElement`): the scale on the x axis - -### Return value - -An object with the same properties as a `DOMRect`: - -```ts -{ - x: number; - y: number; - width: number; - height: number; - top: number; - right number; - bottom: number; - left: number; -} -``` diff --git a/packages/docs/utils/css/matrix.md b/packages/docs/utils/css/matrix.md deleted file mode 100644 index 59bc097a9..000000000 --- a/packages/docs/utils/css/matrix.md +++ /dev/null @@ -1,26 +0,0 @@ -# matrix - -Formats a matrix CSS transform function. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"fa37d4e6be50e0dcfec3efc1e726a8631f948a57892b8fa6280ee21a4681fc23","data":"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"} -import { matrix } from '@studiometa/js-toolkit/utils'; - -document.body.style.transform = matrix({ scaleX: 0.5, scaleY: 0.5 }); -// matrix(0.5, 0, 0, 0.5, 0, 0) -``` - -### Parameters - -- `options.scaleX?` (`number`): the scale on the x axis -- `options.scaleY?` (`number`): the scale on the y axis -- `options.skewX?` (`number`): the skew on the x axis -- `options.skewY?` (`number`): the skew on the y axis -- `options.translateX?` (`number`): the translate on the x axis -- `options.translateY?` (`number`): the translate on the y axis - -### Return value - -- `String`: a formatted CSS matrix transform diff --git a/packages/docs/utils/css/removeClass.md b/packages/docs/utils/css/removeClass.md deleted file mode 100644 index f99a474d5..000000000 --- a/packages/docs/utils/css/removeClass.md +++ /dev/null @@ -1,24 +0,0 @@ -# removeClass - -Removes one or more classes from an HTML element. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"b4d5127435c7f2ebb67df01c411eb5425566ee427e8334a220d49644f56a3b7f","data":"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="} -import { removeClass } from '@studiometa/js-toolkit/utils'; - -removeClass(document.body, 'is-locked'); -addClass([document.body, document.documentElement], 'is-locked'); -removeClass(document.querySelectorAll('.is-locked'), 'is-locked'); -removeClass(document.body, ['is-locked', 'has-pointer']); -``` - -### Parameters - -- `element` (`Element | Element | NodeListOf`): the target HTML element -- `classes` (`string | string[]`): CSS classes to remove - -### Return value - -This function does not return anything. diff --git a/packages/docs/utils/css/removeStyle.md b/packages/docs/utils/css/removeStyle.md deleted file mode 100644 index 2db1dd3d0..000000000 --- a/packages/docs/utils/css/removeStyle.md +++ /dev/null @@ -1,23 +0,0 @@ -# removeStyle - -Removes styles from an HTML element. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"3f02846d6ff0b09968328feb8ddd0f729022841333d8d76ab1ff60d4960f89a4","data":"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"} -import { removeStyle } from '@studiometa/js-toolkit/utils'; - -removeStyle(document.body, { display: 'block' }); -addStyle([document.body, document.documentElement], { display: 'block' }); -addStyle(document.querySelectorAll('div'), { display: 'block' }); -``` - -### Parameters - -- `element` (`HTMLElement | HTMLElement[] | NodeListOf`): the target HTML element -- `styles` (`Partial`): CSS styles to remove - -### Return value - -This function does not return anything. diff --git a/packages/docs/utils/css/toggleClass.md b/packages/docs/utils/css/toggleClass.md deleted file mode 100644 index 2f9f8acae..000000000 --- a/packages/docs/utils/css/toggleClass.md +++ /dev/null @@ -1,31 +0,0 @@ -# toggleClass - -Toggles one or more classes on an HTML element. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"a442898e26533b8a6a2dfa887133c8f92fa443f60ac347fa83db8ffb093220fa","data":"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"} -import { toggleClass } from '@studiometa/js-toolkit/utils'; - -toggleClass(document.body, 'is-locked'); -toggleClass(document.body, 'is-locked', true); -toggleClass([document.body, document.documentElement], 'is-locked', true); -toggleClass( - document.querySelectorAll('.should-be-locked'), - 'is-locked', - true, -); -toggleClass(document.body, ['is-locked', 'has-pointer']); -toggleClass(document.body, ['is-locked', 'has-pointer'], true); -``` - -### Parameters - -- `element` (`Element | Element | NodeListOf`): the target HTML element -- `classes` (`string | string[]`): CSS classes to remove -- `force` (`boolean`): turns the toggle into a one way-only operation, remove the classes when `false`, add the classes when `true` - -### Return value - -This function does not return anything. diff --git a/packages/docs/utils/css/transform.md b/packages/docs/utils/css/transform.md deleted file mode 100644 index 530aac272..000000000 --- a/packages/docs/utils/css/transform.md +++ /dev/null @@ -1,55 +0,0 @@ -# transform - -Use this function to apply transforms to an element. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"66b7b28aa2856522b02b5f65ef0b5c40c74edb8184434c16aa72cadf31877390","data":"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"} -import { transform } from '@studiometa/js-toolkit/utils'; - -transform(document.body, { - x: 100, - scale: 0.5, -}); - -transform([document.body, document.documentElement], { - x: 100, - scale: 0.5, -}); - -transform(document.querySelectorAll('div'), { - x: 100, - scale: 0.5, -}); -``` - -### Parameters - -- `element` (`HTMLElement | HTMLElement[] | NodeListOf`): the target HTML element -- `props` ([`TransformProps`](#types)): an object describing the transformations to apply - -### Return value - -A `string` representing the transform property value. - -### Types - -```ts -interface TransformProps { - x?: number; - y?: number; - z?: number; - rotate?: number; - rotateX?: number; - rotateY?: number; - rotateZ?: number; - scale?: number; - scaleX?: number; - scaleY?: number; - scaleZ?: number; - skew?: number; - skewX?: number; - skewY?: number; -} -``` diff --git a/packages/docs/utils/css/transition.md b/packages/docs/utils/css/transition.md deleted file mode 100644 index 54fd360c6..000000000 --- a/packages/docs/utils/css/transition.md +++ /dev/null @@ -1,72 +0,0 @@ -# transition - -Implements the same logic as the [`` component](https://vuejs.org/v2/api/#transition) from Vue to apply CSS based transition to a DOM element. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"4e22dff35cbde6934f9cd1c606aadefa7de1d0d40c541335bf3d82f412f623c8","data":"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"} -import { transition } from '@studiometa/js-toolkit/utils'; - -// Will apply and remove the following classes sequentially: -// - fade-from -// - fade-active -// - fade-to -transition(document.body, 'fade'); - -// Will apply and remove the following styles sequentially: -// - opacity: 0; -// - transition: opacity 1s ease-out -transition(document.body, { - from: { opacity: 0 }, - active: { transition: 'opacity 1s ease-out' }, -}); - -// Will apply and remove the following classes sequentially: -// - opacity-0 -// - transition duration-500 -// - opacity-50 -transition(document.body, { - from: 'opacity-0', - active: 'transition duration-500', - to: 'opacity-50', -}); - -// Will apply and remove the following classes sequentially: -// - opacity-0 -// - transition duration-500 -// And keep the latest class at the end: -// - opacity-50 -transition( - document.body, - { - from: 'opacity-0', - active: 'transition duration-500', - to: 'opacity-50', - }, - 'keep', -); - -// Will apply a transition on multiple elements. -// With an array of elements: -transition( - [ - document.querySelector('#one'), - document.querySelector('#two'), - document.querySelector('#three'), - ], - 'fade', -); -// With a NodeList: -transition(document.querySelectorAll('.should-fade'), 'fade'); -``` - -### Parameters - -- `element` (`HTMLElement | HTMLElement[] | NodeListOf`): the target DOM element -- `name` (`String|Object`): the name of the transition or an object of classes or styles to apply -- `endMode = 'remove'` (`String`): whether or not the transition keeps its final state or not, can be `remove` or `keep`, defaults to `remove`. - -### Return value - -- `Promise`: a `Promise` resolving when the transition has ended diff --git a/packages/docs/utils/debounce.md b/packages/docs/utils/debounce.md deleted file mode 100644 index 622460beb..000000000 --- a/packages/docs/utils/debounce.md +++ /dev/null @@ -1,29 +0,0 @@ -# debounce - -Execute a function until it stops being called. - -::: tip -You can read [Debounce vs throttle](https://redd.one/blog/debounce-vs-throttle) if the difference between the `debounce` and `throttle` methods is not clear for you. -::: - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"6a8f213d07afbff165d90db7876aa67d217f22c441f20cc42cb396adcad28170","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvWACMIwkTEb8wiXowB0W5qQDmcNcIDWkAO5hkAXT4BeAHy8iEdlArSYrZhgD8asIIBbGTJuNU1tPQNeYzMLa157R2coAB0wdgCsCFI0dzkFXCooCBEERBAAJRg0QVIwOF5mAQVxSTc0fGY0Ny5eVkldRob2XJFJcX94XjQIXmDedjAnIxhXNNN2VlZeSFz5tFJ2XV0yVY1eABV8GGbRVqkNrbmbkTZWVcb+GlIF3LgZrBwNLBRaDV5bD78bK8AByvACmw4cBgYzAUDgGko1GY+iQyGQICwOmYASxKku11uYgkUhmvHBrExlgoBKJpBJWNgngwFJuXK8CykAQadNMzBGzyhpBeb1B00pQjuNKZLJA0pqdSxVz5MHyokhLWVIGZBI4YCMWPwaDQgMQAHo7QArOAAWhmEFYRhGGn+gigEgC1WYGlgRDtgnErDgdtk8n1GitAVYxuZIH+OgYiAAnFR3mBdB0kAAOKhoHQnTMgWMFLFm3CIAAMVBEnXZYjISCzAF8KOhsPWCMQO6W6JXUf88nHFFAAGKqdRaDTlqIxCDmKy2BxOFxY9M5JAANgALLmYPnC4gAIyX0vl6p4av62dgWuLesAJmbreY7fIiAPPZ9jgeCECQ5AjvQTBsJwPCTgUyjzuES6RIY5qxBuCRbskbj8j4fiBMEpChAuET6KhJhrnEm5JC4aQZFkORwfqnIlGUlTVLU9SNFS9ztJ03RDH0AyCRKqITIIUx0vMizLKsFDrIiOwQHsNwHEcJzSlA5zajxNK8I82zzAyHzMF8ZC/Lw/wQICwIwHKxlQAI0JwgiWzsMiqLopit64igrLEqSVDkjpirUpI0yzAyKr+eygVVh4Ao6bhgrwiKsxihKwRSjKbn5vKNyhfc0VqhxmpUElupTgaSqSMVZoWlQVo2gYDrOm6EAel6aA+jU/oQIGZYhjAYYRps0aPooCZoEmKZUHumYAOwliAeYFvgxa3no97lBNhQrW+SCfiALbEr+h0NoB1D9iBQ7gdQo54GAJLwESij0pIcAejAaREDo731F9agAMIfV9LGlHgOkAAbjl9UPwtAgjvLwWCkMQLhTE0cD0cjsiCMc9mg8jHRdAsDTY65f10h031gAAUswv0AMoiIcWCjETNyBid6RwAEKNo0QGOOTIPKmLqcxo6YyKkBiaRpDpASI8jdAMWgIqmLMcA4CI7D8OwIjvZkkhnuriDy2AABUvAAIK8FDIMA+88MiJ4cANBsHTwtUhDopZggtoJMOcxo/S6Iw3BQ24wdOzAGhkGjpAR/DzBovbsPvBoYp1Mn8qk68UjzIIyKOaKhw0BFjRgDyMLQHHzqWQcMAkhoaTW3buj9DIbDp5z8OLOm+r/frui1B8ZcjKpszIFDqMlPAGL/MUEZQ5YjBNbaDqQLAzoaNkugxqxdqeDQ/wukQ77vhotB2swWDsHac+KO7U1JgAxE/C9L/IaB8KnqQWFnmjZ+i80CwFIKQVe69rSbztNvGAu996H1KMfLo8A0Dn0vtfW+99H7AIXq/VgH98HuyXgnbg2lKSdwgN3bYMdPrO3pKnZ40QS76RGIQCMCxjY5DlDTe28DEAZxgPDJWUAkZxwtgAfUtpbAA6jodI+ZZFSLUDpahtD/oMJuDQx0KI0AAHIGgDV9g0HQNwwB2Rpj8cc7kaBgDQKwDAaQ4AYFEPgNGkBi59HYCsfKks1wy1tgABQAJIimuDyaUyIgjvDcJAH45j8o8lsf8U2Ti0hcDcS2Tx8gGgcD8W8Xgylrg/FrrADQDd/jShJBiXgTMYCqUpDPXYOipCf3drwUJdoADyUCN4tTgXXRBehkHRhPugzBV8b53wfh0jEiYiHMBdK0l0kgXTzJdBIPgUo0hK2lIKKUAQujKgtgAUVoCSLAyNi58KoV3Hu9C4bmzAGkKG7znRpGEaHCA4cDHXC2OlbIrAoAGO4AAbjSA6XgwTDgOKiAC/o+lgWuErt/CMXyQ5h0YP8jwSKACkcADFuAMZrUgIKwWQrANC2Fiwza8ERUC8lqK6TorQJi2O8cIHZEYJY0wvAzncqTgYuRhBrJwDcJ9Excpu6OU6FgHAljQXcAhVCu0MK4Xq14AnaEgZ3Y4huP/RuP4jDTDbFPRu4DSAvOhbwAVQq1Cio6oCSV/UfYyuYHKu+irVhqrtf60myBhpsEsIgAArFeMNfr/WNFyCzNm3VSDCFCWAK47lHY0HoOoQRRAAhXgAMzvivEWbg0aA25B6TIPRYgNBJrACmtNcAM2jmzXXRAubED5obFmTtJay12tJoIulZAnqsDwfPd2do6AolGpIRAC0FpXizP22NvAg2/VYJYF0ph2QKrIP+RAl8V2k2DaweN7B2attgIgYddQ2DjpAVO2gM77jzoPP+BspbqXqpjYOttt7R12mOYsKdG6pHVNBIe/NnaLbjlyE9QMCReAisUhUGhA9JAGKpd87OYBGBQwACKpw0rwAAJMABDMAuwAEJeBEfzGQajUNVXfo1XSqI9GSNyNQ+hgGYBaOccY+0LWYCE5vPeecy5mQbnYzyvwh2fd6RuwMBbd5UNPmiA+rkH+SGKxMybiSJmbrCCmAjthrT2qIG6eqPpmpAQjOBhM2ZjlE4AgYEdtopDfKtFfQ0B5r6jAf5uHIVSvZ7msW/JxYy5FzLKV+tpfCtQ0WyUguE8UjFYA3P+czti3FgLeCEuJchlLyqqU0s1QivFTLUuVx/mF7LccdVJ284KxOOKnXitddKvKsqGXerPKsMFLHyvsbUMgVr2RHVipdZZN1HQPVer3Uq5klcxOvM0/UeDz0kMoaeGhmQGGwBYfqyHXD+HBM/HI5RmjdHiOMeY2V9VCX6UXd4NxvbvHPr8duwx0g1G0trbU1iMsvl8RpkaViZAn1aiKDXgM+0dpdAcMEDIDQYwAhDJ3tGeBdoZBdztBfaZx92AyDtN8503BZppjLPubMC1TznnWvOzaFY8DCNfJYpA+avynW+IdS6mBgLlFAsOe6kFyiMBMdAPgDWfnhz1XAA1vgq4YDcIuay9w2DBIClEVOGANxqG3I5RgABqS8xSwL9E9ZToorE8DPbSvbNl8NPb4B2DAUwdZzgAFkkbiGuYavQgRTYNALiwok7s5LsK9jTNI+tZa5GLiZCJNxUYZB0DyBXBqq6OSKZ6/0mvthJ9z+TFH/wRizvWxuiS5MMibCptPIBdL+CMHzZHOHMCEfHLAAtPeoyzSCBvt3jZBrozd/zXg5vGh82EK/Ywfh5Zg/wsaAcopEe2F0hnqNRkRyujJw781BH8CRkH2KCgiZZ9CfYNmeGSMhC37b932gJ/LplwqtbuttTGm4PvWELkGwvAYa5mnKuWYwf+ag+KoKbgYBDiw2T2FWagMBaAagYaaWbKLmvmoBcYyBRWSBcBbGiWv+DiKBaBYCdWYAamFsDSNwW+d+T+++0Ch+W8wyGISCZ+4yaCl+WCMyuC2+9+j+2Qxyz+ghXQr+kQOyuq2QNwiwT+RoPkZQYOsmigWIRADYGgl46hDYDYVO80SAl4DYqBK0Z4a0XOLO20K0vyHO9Y3Ox034Z0V4F0vYV0Qug4YEwOD05QP+u0z4YQi4y45E6E8QiQRuu4NOmYl4haDOJhV4N42IW0lY3hc4Vhh4PObYfOjYXYqYYwsAeA9E2QuQwATEb0XYAgaM/MBiAAAr6H1ANMwE6K6O6J6CMLfmNMdutl4ZVAUM+EhrtIwBHJhLwMAGkHat8rlgABJVa8CAC8G4ANI7cWYAPYgBWhLGaQiReGEKvA0KEx+WsxWItRSAoAo4Z42MkgeAzoIAXYXYQAA==="} -import { debounce } from '@studiometa/js-toolkit/utils'; - -const debouncedFn = debounce(() => { - console.log('Hello 👋'); -}, 500); - -debouncedFn(); // Hello 👋 -``` - -### Parameters - -- `fn` (`Function`): the function to execute -- `delay` (`Number`): the delay in milliseconds - -### Return value - -A new function which will execute the given function only when it is not called in the given delay. diff --git a/packages/docs/utils/domScheduler.md b/packages/docs/utils/domScheduler.md deleted file mode 100644 index be35ef8d4..000000000 --- a/packages/docs/utils/domScheduler.md +++ /dev/null @@ -1,24 +0,0 @@ -# domScheduler - -A scheduler created with the [`useScheduler` function](./useScheduler.md) and made to schedule reads and writes from the DOM to avoid layout thrashing. Find out more by reading this [web.dev article](https://web.dev/avoid-large-complex-layouts-and-layout-thrashing). - -This scheduler has 3 stages: `read`, `write` and `afterWrite`. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"98c3991127b675115260ce91e5975461a1194ee7b40276e18665159e5ac1249e","data":"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="} -import { domScheduler } from '@studiometa/js-toolkit/utils'; - -domScheduler.read(() => { - const size = document.body.offsetWidth; - - domScheduler.write(() => { - document.body.style.transform = `translateX(${size * 0.1}px)`; - }); - - domScheduler.afterWrite(() => { - console.log('transform has been applied!'); - }); -}); -``` diff --git a/packages/docs/utils/history/historyPush.md b/packages/docs/utils/history/historyPush.md deleted file mode 100644 index 542296f43..000000000 --- a/packages/docs/utils/history/historyPush.md +++ /dev/null @@ -1,65 +0,0 @@ -# historyPush - -Push a new history state. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"09c6c7ee2e0714ad09038f5a15b29acc31e518560414c56fec046a7facdd79b8","data":"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"} -import { historyPush } from '@studiometa/js-toolkit/utils'; - -// Push a new state -historyPush({ - path: '/foo', - search: { query: 'hello world' }, - hash: 'results', -}); -// Old URL: / -// New URL: /foo?query=hello world#results - -// Replace the current state -historyPush({ - path: '/foo', - search: { query: 'hello world' }, - hash: 'results', -}); -// Old URL: / -// New URL: /foo?query=hello world#results - -// Replace only the hash -historyPush({ hash: 'hello-world' }); -// Old URL: / -// New URL: /#hello-world - -// For the search and hash options, falsy values can be used to delete things -historyPush({ hash: '' }); -// Old URL: /#hello-world -// New URL: / -historyPush({ search: { query: false } }); -// Old URL: /?query=foo&page=10#hello-world -// New URL: /?page=10#hello-world - -// Complex values for the search are converted into URL params according to the way PHP parses theme into the `$_GET` variable. -historyPush({ - search: { - array: [1, 2], - object: { - foo: 'foo', - bar: { baz: 'bar' }, - }, - }, -}); -// Replaced value: ?array[0]=1&array[1]=2&object[foo]=foo&object[bar][baz]=bar -``` - -### Parameters - -- `options.path` (`String`): the new path, defaults to `location.pathname` -- `options.search` (`Object`): the new search, defaults to the current URL params -- `options.hash` (`String`): the new hash, defaults to the current hash -- `data` (`Object`): The data attached to the new history state -- `title` (`String`): The title attached to the new history state - -### Return value - -- `void`: this function does not return any value diff --git a/packages/docs/utils/history/historyReplace.md b/packages/docs/utils/history/historyReplace.md deleted file mode 100644 index 25080612a..000000000 --- a/packages/docs/utils/history/historyReplace.md +++ /dev/null @@ -1,65 +0,0 @@ -# historyReplace - -Replace the current history state. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"0ec4f56fdb4e541bc4e1488db203253d02b9ceb5347f6fe33ac964e84d15be02","data":"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"} -import { historyReplace } from '@studiometa/js-toolkit/utils'; - -// Push a new state -historyReplace({ - path: '/foo', - search: { query: 'hello world' }, - hash: 'results', -}); -// Old URL: / -// New URL: /foo?query=hello world#results - -// Replace the current state -historyReplace({ - path: '/foo', - search: { query: 'hello world' }, - hash: 'results', -}); -// Old URL: / -// New URL: /foo?query=hello world#results - -// Replace only the hash -historyReplace({ hash: 'hello-world' }); -// Old URL: / -// New URL: /#hello-world - -// For the search and hash options, falsy values can be used to delete things -historyReplace({ hash: '' }); -// Old URL: /#hello-world -// New URL: / -historyReplace({ search: { query: false } }); -// Old URL: /?query=foo&page=10#hello-world -// New URL: /?page=10#hello-world - -// Complex values for the search are converted into URL params according to the way PHP parses theme into the `$_GET` variable. -historyReplace({ - search: { - array: [1, 2], - object: { - foo: 'foo', - bar: { baz: 'bar' }, - }, - }, -}); -// Replaced value: ?array[0]=1&array[1]=2&object[foo]=foo&object[bar][baz]=bar -``` - -### Parameters - -- `options.path` (`String`): the new path, defaults to `location.pathname` -- `options.search` (`Object`): the new search, defaults to the current URL params -- `options.hash` (`String`): the new hash, defaults to the current hash -- `data` (`Object`): The data attached to the new history state -- `title` (`String`): The title attached to the new history state - -### Return value - -- `void`: this function does not return any value diff --git a/packages/docs/utils/history/index.md b/packages/docs/utils/history/index.md deleted file mode 100644 index eec324479..000000000 --- a/packages/docs/utils/history/index.md +++ /dev/null @@ -1,7 +0,0 @@ -# History - -Helpers to interact with the [History API](http://developer.mozilla.org/en-US/docs/Web/API/History_API). The two `historyPush` and `historyReplace` functions allow you to replace parts of the current URL with the History API by merging the given options with the current URL, avoiding the need for complex merging strategies. - -- [historyPush](./historyPush.html) -- [historyReplace](./historyReplace.html) -- [objectToURLSearchParams](./objectToURLSearchParams.html) diff --git a/packages/docs/utils/history/objectToURLSearchParams.md b/packages/docs/utils/history/objectToURLSearchParams.md deleted file mode 100644 index 2a2aa3c72..000000000 --- a/packages/docs/utils/history/objectToURLSearchParams.md +++ /dev/null @@ -1,36 +0,0 @@ -# objectToURLSearchParams - -Transform an object into an URLSearchParams instance to match with PHP implementation of the `$_GET` variable. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"c6d0114bbdc7c5f157512cfc917450bbf5c2947619f81f6330974c76819de654","data":"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"} -import { objectToURLSearchParams } from '@studiometa/js-toolkit/utils'; - -const params = { - str: 'str', - num: 1, - bool1: true, - bool2: false, - null: null, - undefined: undefined, - arr: [1, 2], - obj: { - one: 1, - two: 2, - }, -}; - -objectToURLSearchParams(params).toString(); -// str=str&num=1&bool1=true&bool2=false&arr[0]=1&arr[1]=2&obj[one]=1&obj[two]=2 -``` - -### Parameters - -- `obj` (`Record`): the object to convert -- `initialSearch` (`URLSearchParams`): the initial `URLSearchParams` instance to use, defaults to `window.location.search` - -### Return value - -- `URLSearchParams`: an instanc of URLSearchParams with the object's values as entries diff --git a/packages/docs/utils/index.md b/packages/docs/utils/index.md deleted file mode 100644 index 5fdda7f72..000000000 --- a/packages/docs/utils/index.md +++ /dev/null @@ -1,38 +0,0 @@ -# Utils - -A collection of tree-shakeable utility functions to help you build interactive components. Only the functions you import are included in your bundle. - -## Most commonly used - -| Function | Description | -| ------------------------------------------------------------------------------------- | --------------------------------------- | -| [`animate`](/utils/css/animate.html) | Animate CSS properties with easing | -| [`transition`](/utils/css/transition.html) | CSS transition helper (enter/leave) | -| [`tween`](/utils/tween.html) | Tween numeric values over time | -| [`scrollTo`](/utils/scrollTo.html) | Smooth scroll to an element or position | -| [`debounce`](/utils/debounce.html) / [`throttle`](/utils/throttle.html) | Rate-limit function calls | -| [`lerp`](/utils/math/lerp.html) / [`damp`](/utils/math/damp.html) | Linear interpolation and damping | -| [`addClass`](/utils/css/addClass.html) / [`removeClass`](/utils/css/removeClass.html) | Class manipulation helpers | -| [`createStorage`](/utils/storage/createStorage.html) | Browser storage with unified API | -| [`nextFrame`](/utils/nextFrame.html) / [`nextTick`](/utils/nextTick.html) | Scheduling helpers | - -## All utilities by category - - - - diff --git a/packages/docs/utils/is/index.md b/packages/docs/utils/is/index.md deleted file mode 100644 index 9addcb32f..000000000 --- a/packages/docs/utils/is/index.md +++ /dev/null @@ -1,12 +0,0 @@ -# Value utils - -Quickly test values. - -- [isDev](./isDev.html) -- [isFunction](./isFunction.html) -- [isDefined](./isDefined.html) -- [isString](./isString.html) -- [isObject](./isObject.html) -- [isNumber](./isNumber.html) -- [isBoolean](./isBoolean.html) -- [isArray](./isArray.html) diff --git a/packages/docs/utils/is/isArray.md b/packages/docs/utils/is/isArray.md deleted file mode 100644 index 2df47437e..000000000 --- a/packages/docs/utils/is/isArray.md +++ /dev/null @@ -1,21 +0,0 @@ -# isArray - -Test if a value is an array. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"99326867253e044a2b00c505bd02d52c722f4f7ee1b0adc55da4928edbb2de75","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpe7OAEFSpZhkS8WpAObzmYDHwC8APl7NlYuHvXIAugB0w7ALZYIpUeKkyMlEFAj8EiEABV4jgBmerxK7CRgvERsAK4whsZ60rIAdG5ozEreyMggHGAA1m74aGhYcIgA9JUAVnAAtGgQEKwF7GgpIjFQ7BDWMBkpsESVMWjsrHCV4tOSyRgpJdasIKamVCL6DIgAnFSsMGBKaPhIAOxUGcoDeE7zbvm4iAAMVPz4+sz8NOS7AL4UdDYJ4EYhkdJ0bYgFgcLh8O4uRQqYwaVQGcQosyWGx2ByGZyyNweLx4fwiMTBZihcKHKKxeIYtRJFxpS6ZbK5fJFKglMoVap1RrNVrtTpobq9fqDYajcaTWazAkLJYrNYbK7bACsFzyh2Op0QOquShuPgRhP27DATwATG8PjJvuCXgCgTg8IQSORLpCmGxODx8fMkap1Nw0UoEmoMFirLZ7I45i4iZ5vH4AhSQmEInTWHEo5F9Cz0uykDk8lbuQRSuUqrUGk0Wm0Ol0en0BswhjARmMJlMZublWhlqt1iBNg5zgAOfZ6k7nNnXKGDh5Wp4AZntnydv2efzHglgt3jeOAQZcvD+vECpD6vAA5AABVuSjv1oVN9qyvv3gDclmxJNZEYMxuF/Xhql4NBSDiQClUYABGMCIMqa82DgXAqClZgkFASFDjgXowDwOoQD+P4gA="} -import { isArray } from '@studiometa/js-toolkit/utils'; - -isArray([]); // true -isArray(1); // false -``` - -### Parameters - -- `value` (`any`): the value to test - -### Return value - -Returns `true` if the given value is an array, `false` otherwise. diff --git a/packages/docs/utils/is/isBoolean.md b/packages/docs/utils/is/isBoolean.md deleted file mode 100644 index 17d004b0a..000000000 --- a/packages/docs/utils/is/isBoolean.md +++ /dev/null @@ -1,21 +0,0 @@ -# isBoolean - -Test if a value is a boolean. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"07a03adb67a48991513b57d75ac86d7a4e384f7b6a261e04fc9de5c7ee296c55","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpe7OACEIEVjGZhEvRkTYBXGItVgA1pADuYPgF4AfLxWt1YuLwBG02fIA6YdgFssEUqPFSZcsEoQKAh+BEQQABV4HwAzXmZeAHN2EjBzNRhrBLsHAIA6ILRmJPDkZBAOHSD8NDQsOEQAeiaAKzgAWjQHbXY0fJFVKHYINxhi/NgiJtU0dlY4JvElyTz5fNq3VhAAXR2qEWZvJABOKlkwJLR8U6pi0iTxvF81wPP2MFxEAAYqfnwjsx+DRyIgTgBfCjobBfAjEMhFOgMCIsDhcPgvfzyZSZTQ6fSGRQWKziXJYsAudyebzWPyON7BULhKIxMTxRIpNIZSxZUmJezkwp3EplCpVbQ1OoNZptTrdGS9fqDYajcbMSYwaazeaLZaY+kbNBbXb7ECHY6IACsZ0qMEu11u1COj2RIH1ASCVS+ACY/gDSECQUhvpDoTg8IQSOQ7kimGxODxaa8cTy8boIAZuETMtkBfTKR4vD5VuSgiEwnhoiI2TlOXbuSSbPzXkKnaUkOVKh8JVRavVGi12l0en0BmghiMxhMpjM5gsVis6QVNts9gd7siABwAFnOdquNzBwoeTwi7vkno+XwAzH7AcCET9wabBLBnoWacAk+TeODeLFSFGXgAHIAAFlUnNVZWHBU+lnHVgIAbhcSkS3pRg0FIdRuEQ3gWl4TD1FQpdsWA2JpGAnC8Kaf82DgXAqCnZgkFAJE7TgEZAgidoQHBcEgA==="} -import { isBoolean } from '@studiometa/js-toolkit/utils'; - -isBoolean(true); // true -isBoolean('foo'); // false -``` - -### Parameters - -- `value` (`any`): the value to test - -### Return value - -Returns `true` if the given value is a boolean, `false` otherwise. diff --git a/packages/docs/utils/is/isDefined.md b/packages/docs/utils/is/isDefined.md deleted file mode 100644 index 8d260bad7..000000000 --- a/packages/docs/utils/is/isDefined.md +++ /dev/null @@ -1,23 +0,0 @@ -# isDefined - -Test if a value is defined. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"f76dec7a967bbdc63dba962f3e6ef290cb09b5e3c36d2e5c094148572e4122d5","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpe7OABEYAM3ZgYURL0ZE2AVxhK1YANaQA7mD4BeAHy8ARhAisYzMAB0w7ALZYIpUeKmz5USiBQEPwIiCAAKvBe0rzMvKqsGmJwvLC+CrwevJBoAHQBaMwA5qHIyCAcugH4aGhYcIgA9I0AVnAAtGjWrDrseSJqUOwQLjCFubBEjWpo7KxwjeKLkjJyCrk1LqwgALo7VCLMnkgAnFS2YEVo+KdUhaRFY3jeq34BlbiIAAxU/PhHzH4NHIiBOAF8KOhsJ8CMQyAU6AwwiwOFw+C90lAVOpNLxtHoIIZuEorDY7I5nG4PF4VpiAkEQnhIiIxDE4gkkuJUq8Mlkcvk7sVSuVKjpqrV6k1Wh0ujZev00INhqNxpNprN5stlj41lANmgtrt9iBDsdEABWM4VGCXa63ahHR5IkAY3XvNZIABMv3+pEBwKQXwhUJweEIJHId0RTDYnB4yR1fmxiVx+IMRhJ3XJTlc7k8CZ5/ioDNCESirNi8RxyW5mMypGyEDyBSFSDKFTkYqoNTqDWabU63XluQGQxGY2YExgUxmcwWS1dfn1hr2B3uSIAHObzjarjdQYKHk8wouFO75EgAMw+gFA+HfYPUaFhuGR6jR5GxtEFzHJjRaXR02JSws3sHMqXzU8i0CYJS2ZaJKw5GAazSXV60bZtBRKNsRU7cVeylAdZR6PoR0VMcVUnNVZ01BdaV1ZdtlXE11yQABGL4rQuPd7XuJ1nnot5zg9RAABYbz9O8QSDSEn1DMJw3hKN6BjVF4ygv9U0AwkMxAskwMpPMaUTM9i1gply3YNkqxTFDC3Q/kW2wlBcKqbsJT7aVBzlUjR2VCcpxnDV5xCky9U2JjjVNJE2MvcTrVtfcrT448XUE0yOwvC0JP9e8g2NQRYGeCDRGAH80LBXhpFIEZeAAcgAAT88dCi84j5XVOc6oAbicHN0qxOrpGsOruG63hml4NBSA0fqwsYNjPUvMaJsaKaZpgObC0YMA1FYVgVsm6bZucAbGEOtbpDYOBcCoSikFAREbTgYYwDwNoQDBMEgA=="} -import { isDefined } from '@studiometa/js-toolkit/utils'; - -isDefined('foo'); // true -isDefined(123); // true -isDefined(null); // true -isDefined(); // false -``` - -### Parameters - -- `value` (`any`): the value to test - -### Return value - -Returns `true` if the given value is not `undefined`, `false` otherwise. diff --git a/packages/docs/utils/is/isDev.md b/packages/docs/utils/is/isDev.md deleted file mode 100644 index fb242a5a2..000000000 --- a/packages/docs/utils/is/isDev.md +++ /dev/null @@ -1,14 +0,0 @@ -# isDev - -A constant which is `true` in dev mode (if a global `__DEV__` variable is set and truthy). - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"c5691f99a455a1d7bcc87c64c5abb906a62e1bdb96f07d68eea7389cd5deb74e","data":"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"} -import { isDev } from '@studiometa/js-toolkit/utils'; - -if (isDev) { - console.log('We are in a development environment.'); -} -``` diff --git a/packages/docs/utils/is/isEmpty.md b/packages/docs/utils/is/isEmpty.md deleted file mode 100644 index 6d74ed34b..000000000 --- a/packages/docs/utils/is/isEmpty.md +++ /dev/null @@ -1,32 +0,0 @@ -# isEmpty - -Test if a value is empty. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"a8cb59b272b6e6b676683150ac8ddb9c121f9f4728c68d86700b842d9e05c7b1","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpe7OAFEAtlkyJejImwCuMAPzzmYDHwC8APl4AjCBFYwtAHTDsZEUqPHTZGSiCgR+CRCAAq8RwAzXjR8GF4Ac3YSMF4lVlUxOF4YGUwAOjc0ZgjvZGQQDjAAazd8NDQsOEQAehqAKzgAWjRTVmL2NHSRZSh2CCkYbPTYIhrlNHZWOBrxWck0jHTyqVYQAF11qhFmByQATipzMAjQpAB2KmzSCKG8J0W3ItxEAAYqfnxd5n4ackR9gBfCjobAvAjEMhZOgMHwsDhcPgPFyKFTqTTabjyExmCxgay2LD2RwLFxuDxePD+ERiYKhcJRGJxNFJFKLTJXHJ5ApFUpUcqVap1RotNodLo9PoDIbMEYwMYTKYzObIjIrNabbbXWEAVkuhRgJzOiH111usJAqtcR3YYBeACYPl9SD8/khXsDQTg8IQSOQrjCmGxODwks5MKiEujeFodNi2niCXYHGHHlQKd4/AFaSEwpFoobmVHWakXBzqFykPlCra+QQKlVag1mq0zOLumhev1BsNRuNJtN5vNw0t1RstiAdnsTQA2I6G074C6cm53HxWp62l4AZid31+ULenuoYJ9kP91EDcODiNTKPiqg0Mcx8dxVhsyZJI/Jnkz1KCuYMgWsQPuE4hsmWWSVigPK1mUDZCs2optp0HZdtKvbyv2SpDlayxoKs45arssL7IcBpGkuJorua9ykpgm52kgAAse4uge/weiCJ7ej4vpQgG9BBgioZWpGj4YnGxgJu+hLEneDHpr+VLZuwdJ5oyhagSW7JQbkVawSU8GCk2Iqtu0qGSt2MpygqA7Kg5I74YRmqTtqSAAIz2u8FGLsuFarhaG42kxiA6mxrqHlxXrgvxF40EJ14iUi9EYOJ0axli0lvviH5EimwXuMpPj/jm9L5ky2ngaWGR6dyNZGfyCGmS2YqWZ2Uo9rKfaKoOKqpc5GoTlOsIecxHnzpR/lmmulqpYxLxziAnz7m6R7cZgvEQn60KJSA8IhilI7pU+mWvuYsmfgp1pFZSJWqepQGVSy1W6Zy+kwQ1dYCo2wqtShEoddZmF2Th/VOWOrkjZ5M67r5xqmrstHrvNIUvAAHBFHHusem2xeeu0Wgdt5iaBp0vtlF25XJBWo7df4PYBFVaS9yQ1UsdUGV9xm/Uh5ntlZGHdVhvUOcO7KQ8N7mIB56OsfDVGI4FdHfmjBxY2t0U8fjO2CUTN6ialJ2SVlOJU0m+Vfmm9MqTSalM5pIGsxBtXvfVvI84hZltYD6FdbZ2F9Y5EsEUNxHTt54UK9NSOzYVzyeT5K3sZruOnnxBN68Jh3Xcbz5SWbiZ5fJhUZrbAHlY7RaJK9kFu1zHtNSZf3IRZvudTZPX2bhA2S+HsL2tuE3R9RAXI3NqsNS8HnD8nkWcWnW1xYTTBYKQEA4A4Oi8IEpjyCIpC2hEbjQ4g9rjZNfmIHDM0WrvEALZ5s/OvPieLzrAmXnt/CsFwyQAGKmBPtLe05xHQjxvrHC0gCH5qxlnDOe2NEAznfmeXWX99bJVzmTE250i40ytmSJSd0sx20eszJ2xZa6uwrB9asjd6zNz5j7NCHcQaBzFnhPubkSJIFAeRY4V8lbj3jluTy8tEGpw2unban8EoWkEMINApBlC/HsLwGBjAsowOAbws++xh6CONJA5WPgdFwLGhrQ8XlAQTkELAe4V1gDXV4ICHe68pC8AAOQAAFBZdWYQDDhXiADc1gCRG24CE3gdQQgqJgBE46YBlCsFYFEmJNQ4mqESYsRgXivHpNico7JNgjbIHWIUzJxSEmlOOsAQElSsk1JySiV4jTAhsDgDUsSHl2mdO6WUiavB7QVOibEjp0wBl1J3nvbx98vGuL6ZM8JYAf5/w0aYXg9SWkRjtAAdw2RALRSyuluC6kgUAMJDRwH6GAPAjQQCAkBEAA==="} -import { isEmpty } from '@studiometa/js-toolkit/utils'; - -isEmpty(); // true -isEmpty(null); // true -isEmpty(''); // true -isEmpty([]); // true -isEmpty({}); // true - -isEmpty(0); // false -isEmpty(1); // false -isEmpty([1, 2]); // false -isEmpty({ foo: 'foo' }); // false - -class Foo {} -isEmpty(new Foo()); // false -``` - -### Parameters - -- `value` (`any`): the value to test - -### Return value - -Returns `true` if the given value is considered empty, `false` otherwise. diff --git a/packages/docs/utils/is/isEmptyString.md b/packages/docs/utils/is/isEmptyString.md deleted file mode 100644 index 6752bf6c2..000000000 --- a/packages/docs/utils/is/isEmptyString.md +++ /dev/null @@ -1,23 +0,0 @@ -# isEmptyString - -Test if a value is an empty string. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"7c80e212bedb926934886d0d593a612182611e2f10853a016b50d5ddffd5c92d","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpe7OAFEAtlkwBlNKXZgA5ol6MibAK4wA/Ou1gA1pADuYPgF4AfLwBGECKxjMwAHTDsZEUqPHSshgKSqqUIFAQ/AiIIAAq8P4AZrzMvCrsJGC8Wqy6YnCp2TAymLwioSoAdOFozCoxyMggHCbh+GhoWHCIAPS9AFZwALRoTqzG7GhVItpQ7BBSMHVVsES92mjsrHC94nuSpcGKytUdUqwgALpXVCLMfkgAnFQuqmj4SACMAMxUdaQVMs8AEjiFTuFWrhEAAGKj8fAPZj8GjkRBPAC+FHQ2GhBGIZFqdAYsRYHC4fFBQXBqk0On0hhM5ks6kczlcHi8Pj8BUC8hOYSokWieASIjEKTSGSyOXpBSKvBKQXKAuqtXqjWarWM7U63T6gxGY2ck2ms3mi2WzFWMHWm22u32VP5lSq50uNzuAJJADY/i0YO9Pohfv8HkCSSBncdKpDlNCAEzwxGkZGopAwrE4nB4Qgkcj/YlMNicHi8sGqul5Bm8IymCAWbis8YczzeLC+fyHamq8LCmLxRIS1LpTKB2XV+VuRVHFWu9UNJBNFrKHVUDpdHr9IajcammZoOYLJYrNYbLY7A4HPkx05utAXa63ED3R7ouEBoPff0AiMg7suhCrzxkg/oIkiKKErCWbULiuYEgW1BFqSJYUuWPaVFWugGLWTINiyDgtm4bbcl2N40iofZRAOYrJCO0rjrk+TiAqSplBUd4LpqK5tOuepboau4mlMB5Hpap62ueDpXtGFH3o+novt63wJl8ryBioHzfmGgLArEsm9sBYDQgALMmEHptB2KwTmsR5oShb0MW5JlgZmFMTWdbMk2hHssRXIdjyblARE1GikO7CSqOMoeVOxSzhxqg1GGi4oFqq66puBo7saEwieax5WjadoXo6ZXkaq8kes+r4kl8JkAOzqV+IY/uGelRgBt6Cjx0IAKzmamkFopmz6CLAIKkbwwDoYBqi8BivBJKQiy8AA5AAAgV4nMIJuWmlJOxrQA3J4bZdRRjBrWt3DHbw/S8IoujnRVmFrUkTg3XdD1JGwcAwC9FaYbd929Etf0A14F2VsgVwgz9EPhCezBIKAxKBnACxgHgQwgBiGJAA"} -import { isEmptyString } from '@studiometa/js-toolkit/utils'; - -isEmptyString(''); // true -isEmptyString('foo'); // false -isEmptyString(); // false -isEmptyString([]); // false -``` - -### Parameters - -- `value` (`any`): the value to test - -### Return value - -Returns `true` if the given value is an empty string, `false` otherwise. diff --git a/packages/docs/utils/is/isFunction.md b/packages/docs/utils/is/isFunction.md deleted file mode 100644 index 003107e06..000000000 --- a/packages/docs/utils/is/isFunction.md +++ /dev/null @@ -1,21 +0,0 @@ -# isFunction - -Test if a value is a function. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"2b220ed2c9750a16ba155094da2d73d0a8bbd87a8b427a42a71bb8bd65b446fc","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpe7OADEArmH5p2QxL0ZE2UmEpkBrSAHcwfALwA+XqtbqxcXtNnyhAHTDsAtlgilR423IVhKIFAQ/AiIIAAq8F4AZrxo+DC8AObsJGBmaonivMy80TK+QgB0AWjMSaHIyCAcYFoB+GhoWHCIAPRtAFZwALRoEBCsWuxoRSJSUAouMGVFsERtUvKscG3ia5IF9mBFjS6sIAC6h1QizJ5IAJxUrDBgSfFIAIwADFRlpEkzeN5bfgG1XCIN4gfj4c7MORkK4AXwo6GwQIIxGh7zoDDCLA4XD4vzsfhUmU0dT0BiU5ks2R82ycrncnis1P+VCCITwkREYli8USKTSGQsWWsuXy+OKpXKlWqtXqVEazVaHW6fQGQxGYzQEymM2YcxgCyW7BWGw2TOKewOx1OHwxADYQbd7o9EK93ucvhiQHjCv4buwwECAExUMEQqHkYFwhE4PCEEjkNH0JhsTg8Rl/ISEwXEnQQfTccmZKw2DNgWluDxeTZi32BYKhCJRLlxBLJVJ3AWU4V5UslN0VJBVGr+2UEJotdpdXr9QbDUbjSYQaazeaLZardbe7a7ND7I4nEBnC6IS4AZhudwe+GeII+Hp+1Z9AP9QPPoPBpEhNAjLxhB8EsA/BWDLAOmNa8DCeSkEuvAAOQAAILtqZRTiqs4jGuRpwLBADcTi0o+2yMIwRimLB0QDLB3A4bwHRxKQ6gEWaYCMORlHUbRbR5GwcC4FQy7MEgoDonccD/GE3QgDCMJAA="} -import { isFunction } from '@studiometa/js-toolkit/utils'; - -isFunction(() => 'foo'); // true -isFunction('foo'); // false -``` - -### Parameters - -- `value` (`any`): the value to test - -### Return value - -Returns `true` if the given value is a function, `false` otherwise. diff --git a/packages/docs/utils/is/isNull.md b/packages/docs/utils/is/isNull.md deleted file mode 100644 index c3078d79c..000000000 --- a/packages/docs/utils/is/isNull.md +++ /dev/null @@ -1,22 +0,0 @@ -# isNull - -Test if a value is `null`. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"2b58bd1650d5c0743d02e15e33fab45e89b281b3bbedc1557b5698d129107faf","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpe7OADkArq1aJejImykx5UsAGtIAdzB8AvAD5eS1irFxeYGawA6YdgFssEUqPHTZlEFAj8EiCAAKvDulmj4MLwA5uwkYCbKUeJWNgB03mjM0QHIyCAcmt74aGhYcIgA9JUAVnAAtGgQEKwa7GhpIlJQ7BCOMFlpsESVUmjsrHCV4tOS6SWOrCAAustUIsxuSACcVKwwYNERSABsVFmk0QN4HjbehbiIAAxU/PibzPw05IjbAL4UdDYR4EYhkTJ0BiBFgcLh8W6yRRJNSaHR6eSmcwpayyexOFxuCyeJZUXz+PAhEQWXgRKKxeKJMzJSw41gZc7ZXL5QoaYqlcpVWoNJotNodLo9PoDZhDGAjMYTKYzBFshZLVbrC5QgCsZwKByO+FOHMu10CKvu7DAjwATK93qRPt8kE8AUCcHhCCRyOdIUw2JweESbEimSitBBdNwMUlqay8c5XGFid4yQFgqFqbSYnEDoysSz0plOUg8gUrbyqCUyhVqnVGs1Wu1Omhur1+oNhqNxpNZrNiWk1Ss1iANltEAB2AAcewNx0QeouVyhIAteytjwAzPaPl9wc83dRgZ6wT7qH7oQG4cHEZjVLx1BGozGmXGbAmCcm7qS/OnKWEaUiHMGTvN9ZHZagSxQbkKz5GtBXrEUm3FVtJQ7GUuwVXtlTmcChw1UctR2CdZ0OedF02Zcblwkly2tJAABYd0dPcfldEdBFgG5E0JYAb1YXg/l4AAzUg+l4AByAABCV22lIUG1Fdpu0VCSAG57DxGjGFZbg1N4aoaVIFQtOJRg9IMyoRLYOAYFMkMJIkizDOEmzcCodCkFASEDjgXowDwOoQD+P4gA==="} -import { isNull } from '@studiometa/js-toolkit/utils'; - -isNull(null); // true -isNull(); // false -isNull(''); // false -``` - -### Parameters - -- `value` (`any`): the value to test - -### Return value - -Returns `true` if the given value is `null`, `false` otherwise. diff --git a/packages/docs/utils/is/isNumber.md b/packages/docs/utils/is/isNumber.md deleted file mode 100644 index 3dde7c365..000000000 --- a/packages/docs/utils/is/isNumber.md +++ /dev/null @@ -1,21 +0,0 @@ -# isNumber - -Test if a value is a number. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"404edfa36f9400a7abb44a3a0986d2f7355b97c415b987cf114b9c32d423abe6","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpe7OADkArgFsARmUS9GRNlJhKpYANaQA7mD4BeAHy9VrdWLi8wshaQA6YdjKwRSo8dPllKIKAh+BEQQABV4LwAzXmZeAHN2EjBzNRhrWNt7MgA6fzRmeJDkZBAOHX98NDQsOEQAenqAKzgAWjQICFZtdjQckSkodggZGAKc2CJ6qTR2Vjh68UXJbNIcqplWEABdbaoRZk8kAE4qVhgweLR8JAAOKgLSeLG8b1X/ctxEAAYqfnxDsx+DRyIhjgBfCjobBfAjEPwPOgMUIsDhcPhvXykFRpTQ6fSGJQWKziLJY5yudyeaw+Bz+QLBPARERiGJxRLJVKWdKkuJ2LF5B6FYqlcraSrVWoNZptDpdHp9AZDEZjZgTGBTGZzBZLTEOdZoTY7PYgA5HRAAVnuZQuVxuiGtj2eyJAeoRZXYYC+ACY/gDSECQUhvpDoTg8IQSOREfQmGxODwaascdy8boIAZuES0hl+Q4KW4PF4Vlj6UEQuFIqzMhyLlySTY+atBdRhUgSh6KlQqjU6o0Wu1Ot1ev00INhqNxpNprN5stlrTchstrt9o9kbdfjbLtc7kKni9Qm7o52vgBmP2A4F+H7gk2CWCvQvU4BJrG8cG8KKkEa8ADkAACSoTqqMqDvKvQztqf4ANzOBSJYOIwACM3zcDBvCNLwaCkOoCGLtif5RJ0f7oZh9RfmwcC4FQk7MEgoBIhccDDGAeAtCA4LgkAA="} -import { isNumber } from '@studiometa/js-toolkit/utils'; - -isNumber(10); // true -isNumber('foo'); // false -``` - -### Parameters - -- `value` (`any`): the value to test - -### Return value - -Returns `true` if the given value is a number, `false` otherwise. diff --git a/packages/docs/utils/is/isObject.md b/packages/docs/utils/is/isObject.md deleted file mode 100644 index 26e6b69e4..000000000 --- a/packages/docs/utils/is/isObject.md +++ /dev/null @@ -1,21 +0,0 @@ -# isObject - -Test if a value is an object. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"8007eef3861e79a9784de2bf68fe4e12c9322da7da35648d39fcf43873e689df","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpe7OAHkARgCsY/NIl6MibAK4wlasAGtIAdzB8AvAD5eUiBFYxmYADph2AWywRSo8dLkLKIKBD8CIggACrwngBmvGj4MLwA5uwkYLyqrBpicLx2vBCy8mgAdH5ozAnByMggHLp++GhoWHCIAPStMnAAtGhWrDrsxSJqUOwQzjBlRbBErWpo7KxwreIrkgUKRQ3OrCAAuntUIsweSACcVDZgCbFIABxUZaQJk3heGwyX7GC4iAAMVH4+BOzAUZHOAF8KOhsL8CMRwY86AwQiwOFw+O8fGgVOpNLxtHoIIZuEpLNZbA4nK53J51ti/AEgnhwiIxNFYvEkik0nisjlUvlsSVHuVKtVajp6o1mm0Ot1etYBkM0CMxhMpjM5gslms1t5Cls0Dt9ocQMdTogAKwPGowa63RC2p4vFEgLGFPy1X4AJkBwNIoJo5H+UJhODwhBI5CR9CYbE4PCyBoUuIy+MJBiMZL6lMcLjcHmTH0ZgWCYQi7JicUSyXtvPT/NyQsNpTFSCqNW+UqoDSaLXanR6fWVRWGo3Gk2Y0xgs3mi2Wqw9m22uwORyeKLuALtDvw91Fz1eIWXny7PyQAGZ/SCwSG/hCzYJYG8aUXgMXsbwIbxIqRxrwADkAAC47qlO8rDkqgzagugEANyOPm9KFIwwAQtw8G8O0MSkBoyEpjigGRFYgGYdhrS/mwcC4FQGrMEgoDIvacBjGAeCdCAEIQkAA==="} -import { isObject } from '@studiometa/js-toolkit/utils'; - -isObject({}); // true -isObject('foo'); // false -``` - -### Parameters - -- `value` (`any`): the value to test - -### Return value - -Returns `true` if the given value is an object, `false` otherwise. diff --git a/packages/docs/utils/is/isString.md b/packages/docs/utils/is/isString.md deleted file mode 100644 index 30bdbb542..000000000 --- a/packages/docs/utils/is/isString.md +++ /dev/null @@ -1,21 +0,0 @@ -# isString - -Test if a value is a string. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"dd61d6afdd85b2b3fe53afc33cb7837bf5c528de76568ed70a2ab8bb8c9e2c30","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpe7OAGU0pdmADmiXoyJsArjEWqwAa0gB3MHwC8APl4rW6sXF4iZ8gDph2AWywRSo8VPtzKIKAh+BEQQABV4LwAzczUYa15mW2lZOQA6fzRmORDkZBAOHX98NDQsOEQAekqAKzgAWjQICFZtdjQ0kVUodggXGCy02CJK1TR2VjhK8WnJFPk0kpdWEABdVaoRZk8kAE4qVhh5NHwkAA4qLNI5Abxveb8D2VxEAAYqfnxt5n4ackRdgBfCjobAvAjEMiZOgMUIsDhcPj3XzKOKaHT6QyKCxWcTJXxOVzuTzWHypfyBYJ4CIiMQxHHxPFJOypDKXbK5fKFbTFUrlKq1BpNFptDpdHp9AbMIYwEZjCZTGbI1lLFbrTZXWEAVguBSOchO53Z11uoWV8n8hReACYPl9SD8/khXsDQTg8IQSORLjCmGxODxSQ9UZYNLwtLoIAZuNi4gkWY5nG4PF45r4KUEQuFInTYqGEsyHmzqBykHkCrIeVQSmUKtU6o1mq12p00N1ev1BsNRuNJrNZmSFqq1hsQFsdogzgBmA76w2T403WEgc2PCtgF4zkCfb6/KFvQGjwSwO7JknAIO+XiA3hRUh9XgAcgAAuKO1LBY2Re0ewrHwBuJxCTTVJGEfKJmkfbh/14apeGkdRgMHORGAARmtKdoNgypbzYOBcCoTtmCQUAYSOOBejAPA6hAQFASAA="} -import { isString } from '@studiometa/js-toolkit/utils'; - -isString('foo'); // true -isString(123); // false -``` - -### Parameters - -- `value` (`any`): the value to test - -### Return value - -Returns `true` if the given value is a string, `false` otherwise. diff --git a/packages/docs/utils/keyCodes.md b/packages/docs/utils/keyCodes.md deleted file mode 100644 index 108839418..000000000 --- a/packages/docs/utils/keyCodes.md +++ /dev/null @@ -1,16 +0,0 @@ -# keyCodes - -Map of keyboard keycodes and their human readable name. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"97a4d162fe94346903bceb510d70d9dc5b0a596ba8d16d8fa7171df17d008774","data":"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"} -import { keyCodes } from '@studiometa/js-toolkit/utils'; - -document.addEventListener('keydown', (e) => { - if (e.keyCode === keyCodes.ESC) { - // do something when the user presses the escape key... - } -}); -``` diff --git a/packages/docs/utils/loadElement.md b/packages/docs/utils/loadElement.md deleted file mode 100644 index 00726f266..000000000 --- a/packages/docs/utils/loadElement.md +++ /dev/null @@ -1,73 +0,0 @@ -# loadElement - -Load a given source for a given type of element. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"2afe068e7809626f67284fe469ef8c52c031cf88d3058422213f37e588139fe9","data":"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"} -import { loadElement } from '@studiometa/js-toolkit/utils'; - -const src = '/path/to/my/src.js'; -const { event, element } = await loadElement(src, 'script'); - -if (event.type === 'error') { - console.log(`Failed to load ${src}: ${event.message}`); -} else { - console.log(`${src} has been loaded!`); -} -``` - -### Parameters - -- `src` (`string`): the source URL to load -- `type` (`'embed' | 'iframe' | 'img' | 'link' | 'script' | 'track'`): the type of element that should be used to load the source -- `options` (`{ appendTo?: HTMLElement }`): configure the loader behavior - - `options.appendTo` (`HTMLElement`): append the created element to a DOM element - -### Return value - -- `Promise<{ event: Event, element: HTMLelement }>`: a promise resolving to an object containing both the load event object and the created element - -## Examples - -### Avoid loading the same element multiple times - -You can combine the `loadElement` function with the [`memo` function](/utils/memo.html) to add an in memory cache layer. This will make the generated function always return the same generated element. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"778dc1154f8e34a20db799ca7b878cd386c733530a4b763845970aee2958633a","data":"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"} -import { loadElement, memo } from '@studiometa/js-toolkit'; - -const loadElementWithCache = memo(loadElement); -const promise = loadElementWithCache('/path/to/script.js', 'script'); -const promise2 = loadElementWithCache('/path/to/script.js', 'script'); - -console.assert(promise === promise2); // true - -const [result, result2] = await Promise.all([promise, promise2]); - -console.assert(result === result2); -``` - -::: warning Cache invalidation -Be aware that the [`memo` function](/utils/memo.html) will use a simple `arguments.join('')` call to generate the cache key, thus ignoring any change in the options parameter of the `loadElement` function. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"84a29c9ba282ba2977c335153a385dda5bf7d1206b6f44f65ece7fba39de5a78","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808BjCMONAAgBsIBDKAUU4wAtjDBoA6gEs0+AMI9G+GInY8wGSiDY9SDRADYqQsAHNZSAEwAGKml2mY+kNz6CRYyTPmLlWzlJguIi2IEq6ijTkhgC+FOjYwQTEZFo09HjqmlQ6elYAnMZi5vhIACx2Dk54osIQ/oHBoeGkkamIlvlxCTh4hCTkdnTOWVq5+gDMFS7FFogAjPOVpI7OrgJCouINQUjN+BGMUUhT3dSJfSmD1MNMLGzspPAArpxoqqM59nmIAKy/RTMcyM1CqziecFeDGMjSsVBabWiBjOmF6iGSAzSt3RzFYHHW7i2XlkCiUKjUGjG330AHZQiYSlZQt9VngCZtPNISb5cDDdh14QdWkd2pZ5iiLuj+qkhhl0QAKLCkCA4PQYACUaiwODAUAAKhBVAAJPUAWQAMkaYG4Odsvrp9IsAByAxmIF2glbVdE8bVifX1PnBCaCw7HDoStEYmU3OUgIi6dhQCCMZ5E1QAERTac8WmTjAQ6IAVEWAAYAd0CyfLADp8znxKWS48nM9SKw1C2AGZkMSMGDsNAQQfKJPZonsXH2RpQdiBEcDyu6iC1gA6YHXyFNGYAcuwAEowHtPMD9gC68vwaDQWDgiAA9PfYCRuKqa3UAF5STicHg1iArE+KZwPeEgwAARveACCAAKACSoFViuQGpkS6pUg6SDzJYHoMnMHost6ID1kSOzBqGwrhthkZJNK1zpM4irKqqmCalmqGeDWyh8MaZqWtaGweHaxHAXgeqjiWpbcVATZFi2fAALQsJwGDsEqKpkJg7AQF2C7sOxDYcIEURdooA5PGgbYdrIA4ADzSQAfOwMC2hwOl6ampAnhwJGceum7bnuh7Hn2MAXleN53o+z4uRppDvhAX4/n+AGmChIFgZBsEIQZRL3tJ6H2j88wTDSrpzNMhHONJZEnBRiJWOK8TnFGdFYnGuIPBCUKWB8lJFY6vwhjMQKlIgZWeqy6LdW8li1X89UikiNGXJisrOJ1+K8IJRJcj4ZJ9dk2jUlhBiFCNbo2MsU0uNthKct4pJ+EGSAAmEQoNR0lgrVKVztYx6ksRqWo6gGvEWvdwnjI1E14WNBFgpkfq6ga80ggiS1WD90b0di8aJr54iZuOuZUPmhYgJJS7VnWJONs2FlWXAnZPCFp4DkOemExwU48DOc5gHp1MrjW/lgFuu4Hkevbs+F163g+T4wC+cUJUlv7/oB5OgRB0HwYhy7lihhmFcdmFfbDszw9dRHc2ji1Ud9zWorRf3rXgTFxax+l02gNbgdAGDg+akPQiJBZiRJZa5ZxAdQBgslqcxmmqU8SrwJ4zM2ewtlxxgTkATnXatKIcBOE5kCwNpunZ553ljhx4gUNppDsGArycHOumQOwkJKM5rnObQUhsHAosbuLgVS2z56XvLUVKyrb6ft+GupelOtZfrMfiPeeem9DHQTCCcPlDbzh5/b71hqKTU9K7a2xs4YA8KXWBmZO9wQEI64Jq3nXf3JHIL+Qg8yiXROJAcpYAFCFLOwOoUBXgDnUkQKQsBmY8F7lIYQWAhBJggs8UwphAimE/qwQBI4eBGWZnAbB35EycxsuuAAUjwBMABlRgpApBYB5iAgcohwhgBHsIJOxA0EwFnOBVS5YILsHAsqcsZdSBjzFpA+B0AkFDywABNAWdyzDjgDgRgUguxSEYJ/HBLBM6IDFnJKC7BSzAPIbAycv44DM0rLIeBThCBQBoc8fuPBmbQP4TWbgph5TqlLM3UJLiYA1jIMqUgUS4HqFnHEuAgCazll0GAVJlCebqHkQOZ4ZdZyc3LNwmgg5hxZHYDuaACSABWNC0BPFfuPex7BTDcHAjwTumTAFwMCDodmZCzGmDbJI2p7AqkyA5sOZApZ1L9g8TWNgyZnhoFLHLSKitK4wFaZrNK2tfw0DYApIglhLA1loPeX0Uh7yrPgGPK8whOAAGIXkeM2RAbZmp0mbhWcqNZY9NlJN2XPfZj5DnHPXmcqh8A0BXJuXch5WAnk/LeWgD53zQWvIhV5dUNZ2DqN6RAfpgyYEwDgYwYp4FSnlLmd4f5RkrF6BIXpUshzEA0rgQgpB491wAH0SwSDySQksIrVDkr6QMshWS8GUuaTAI4AByZmohZDQAwU8NuMBvBkEVSPGg4gVLrjgBgU8+BlSQDKVwKQABrDmo4FErmUewbKWdlCpwzsIcCQhm6QFbroV1MBVKdVNZ4C1L8rU2rtf85mAQXVqB/NpGyrdGmwBrK03u7TrTCDHuwdhMBw3sGWZAGpLAxFgvYAhAA8lCiKCtYVNPhVrYC95znItRbc+5jznkEvWe8r5PAFJVpgEpMAClsUKSkBATUXYALrjqPqwIy7SDCCoQusAwqwD8FoK/XBTKuXZwpVSxx/LbET1LHe1p64aXhIgJE9VygfzDgMaQTgUB1XqgANzrkfOwGC3DxB3nYO+7gcyAI/ubpzP52zH1hIifKN9LloMAFI4Dqubuqr9P6/2AbAMB0DxkINQc/bBqA8HDFoC2WgZD8TEleQAvKII5Z2D8FYyk9VEhCAqjgM3LJ2r8Bcv6bOA4yNJF/oA0B+8IGwN6OcjxnxHieCOApLOHQjAnWDmFIs/NsAvI3uA+wLjPHVD8YgIJ4TEBRPib4JB30OpJHyfMx5qhFblYDLPH8BYvx3MebUBwTh3DeE1lIM8MAcEwDiRHs4hi7B2NNMQEQYQCwJi9XmE6dUQXPMcAbeBVVRxIvRdi/FuAiXhjJd5elxAExrD5Aa7l/L5mvO8uMmQF+nAh0plefeOgartm7vGjSBY+Q2she8wmTgZ4FJVJc2QQwX0pteZ85wMLPCOApdgIgLr7YBl9bBYN2gw20CjZpAYQw1g8skYU8FjrqWDs9fvNuwIg3ZsirYGB0wR8Gti02m3V+A4AC87A+OrwPJS0ZLB1XEafbk9s8pSwZnUI4VuAASYAL9RAxAAIT6XR2QfHpY5P3cU+RzMxPW7SHTfuGH5CwCE7R2YEntGjNJPXHe0sYtD3HrwWUs9o4nH8Lpe4u8YsecPtPPcNy2z2Dg9WOwgtr92H2ZgIQcsUSEdy5U63JXTgVcdOEOr0QWuddMYeMIDAzilVg4NZxp9dvAHyjZc3JJ5PV225Qy+tDlGYPft/eT0jSmKMYao0HjnbLvcu6EM+19AfsO4YhwR4PxHQ9U8gxHwPcHZkx7ADbuPCSklsY4xZ5JaHrO2d7hr2QjnJNLaCMHkPCmyPgdUMgbjySrMCdvHZhzZh5FOak65qAZ4Odc4nkD3HDvIf08Z1ksA8PY9hKR/k1HNP2DY9nwTonbPSCk9b5Tjv++MfsDp53Bn4FYfM7P+z2ZU+edpA04WZAyBtBlq0MgLJbZZ4toXmIVkGeHAhrGYGEHvDhRAkOT3j6XvGuX7W7SkEgifVaXQjPAnzNh+EsDKEtlGiQAmiqjuHiXmnOgxnDGsGxjandgVFE2gE1GLxrGCWUTQHlFm2eHJCyGblLjgA0xgAAH5VAfsSFm4awxCVQLsWABkYIIgi1DpkAzx1RVAiAIA0FksABqeYbSAYdYU2cmPAIZePZgzSApeZC5TsHgvgruRxdg2lOcZmZAUyTgK1PZVtReWKZeRKVeFKQCMQBSAAVXYQ3gAHFuB1NSAMB7wAAxAZK1TUQuezGQGgKAUlOCNyMAWNMw+ACw15Kw9JMcbIqtDNZQUgSsMuNQLsHsI4Iec7XdUldRNlLABXAZXJDAOAS1akTxbwRxVcEAKCDxTSXddgUyb8NzEAUsVI3SFBCRGjRxSwxwEZZmTdbda8GZIXMwYFEbTgGsZYqhVJVwheKAk5DeHtS5BA9FQdLYriXFL5LY3YtAe4hSBwOAElMWOCXSUsWwxYitdpbZfADAA4xWGKV8MgNWbw44vwwIkIsI3giI+8PUKLWQDUYNCAevIfUfMQVRW9e9do2XZjYwvQeUX4mAPDZMQo1EsTMwIjQHMJAk1gpwsuPDavW8dgbDQPJ1FPdVKANBDcVcdVNAakinfolgoYkYoQKAXvGzFk7kqAZfDgL9J1Gk/EgYwk4/YUwYmtMUtzMAZ/SoUwN/D/WhdmLQIgawGseYc06weYEACfD/d+EuE0gZDgslUcWwwcZFGZTdEpM9RE/4msG0igO02QrQeYgcKCdNBwQyZmRlWhdBGwp0uwsNdgMpGZYJfXQuUM/0jAgaKwf4cqMaEEIgn0FUsOAIfkMgj6TGd0Kgt2J+YgrqF4N4Q6DCbAgwSwfMpAQsxGaaRs0s2ERACsm+aIeYX4Gsx+BiesjgGaNAXqCkI6Q+SwGkYaU+cac+PAacuaF6Ach2UUZEZ2SUHGf6PAWfIxD+GlX+RMGlVQYvMBCOCBEXflDRRBPBaYuMzBWhHBPBWAcCQhYhIfGlQpewrBYQehVuRhZQFhNhHgLbXhRVChQRA4YROAURV8mZaROZORd1JRMgLE9cdRQVPBOgHRPQfRQxYxUxcxSxHRIIDvOxL1RxYvcXZgllbxOg/xXuQJfANQEJJ9VDaJWJJ9UvFJaJLTK9NfPJApWQLzelQWRlZM5lSpapQzepbNFpNpE3Lpeii9BVQwuw0ZewcZXESZaZCpT9JS2ZZZbFDZejNlZteeA5dtMeBFLtU4lFc4gdTFY7V5a4vFbFRDNAQFXUYFKyolUgOymFSAxy44xFC5NytFDyrFYdHFXypK0KklF0gcbS6lMXScBlJlGZLxQgBXbBYii7IfbOHlVLR8gihJMWMVIsCVdsKVIsGVDKnpeVTuAClVNVAUrVXxXVNQfVIII1f+e4aNc1DAS1a1JQRNB1FNctLCz1b1BcP1MuANINNuQuJMmySNMatgGNSauNaa21FgJNR1VNAZTuCk41VS3NdSwtYtUtctStVEgcGtbFete8JtQEttWADtU5FypFM4+KjFRK/rEdG4z5cdSdadWdJK+dRdYYldQvACAcDdACFYuovnI9T809cq0cLKsS+JUsG9bnHEq3bJVDdDD9XPdPdzdvPRVQAPNPDnfyim+PKmpPHDPDNPQUzPU/Zm6jVmmypDPE+3FjSvcvbvNjPjPvITWvQfUhCTZzaTFvDPNvMPdM1uUM0SnTPTdpD+BDejJJUzB7CvACSUmvETXxBvFWsfNbDgZADbPzX4ALB2ktLhbbMrGLOLMTKrFgJLXbFQerEqbLVrCnR7QrYrHq72irP26regWrVLerRrZrCYcOszArTavbF7I7bFU7WolgMbCbd2p22bebRbP0UgFbG5d2jbGCnbTrcQbrPOpKgu1MSQsAcaa7AwW7d2puqIV7d7EjDbb7dpEhf7CYJUh4WfRXCHS/aHG/JnFfMW7JdfFHVnc/HfEHPfTeknMndWk/Rm+/WnKHa/W/FnGnfHYW4zUgMm3nCefnXG+S4XKBRitxZg0mnU8msW+XDgQ3NAY3QtM3TXFcS3X+/XOe5XVXU3DXC3cnIHIvfhOe8vZ3fhN3bZD3YlYjVfZjTmnPXm4/Bm8PGmlm/PUWpBvBv3amrDbm1PajPmjWrPQWqPchxjQvH3ZjIS9jGATjaW3jZk+W62tEpWkfJvGTdUIhsPTvfhy2/vBWm2ofZWjE5vCfR/LyaejgWe8HefK/RfOHYjSh8W9ezfA/bfHHHey+g/I/Q+4h6nMxhe8+pnKxjHa+9Ru+7+0sF/fUpAd/T/XkEAH/f5Ugf/eyx8IA/AEAsA+zSKv66AppWAyleAkGgIFAsJNAm0zAhc/Idsi6OYQg7ssIfheaRYHc6ISg/c1qWsic2g/qqABg33SJUMwQuc0Q8Q3hXdaQ2QiDLIBQpQ9gFQtQ+UTQ7QsgXQ28imYh2ZUsfyuBQqx3MshJdgU0KEHhPBSMokZmGSkpNSYw2Y+ZphMAMxFRDgFM2cNM7OJUbBXQVSHW/Iy6tQKAbkzuhVM57iji8CNgGQEbFgC8zgDgmhOhX8MCpZEFYyLseUCYaJVwxWbdMAGkY4ss54e5OF2dPgkCOFiYIdcFmsCYHyzgO7Ik0cDZzOQagcB59+AY0yitUsK4+4/Y6FNwo45ygsbtIGuKxAy4i7bY0dT5O4jGqhR454yR/daXXEoHZgaLf+9gX4XXKh19SVomVk39ZuRVgK2x6Rz+KV1QAEWZNm1ejm6htVxAFPNVqRrPY1mVm+gvHnMWJ6mlulgV1g6Fxlw4qKllkCVyvtC4zyq43l/lrdQVp1p4lYF4pG7W1GgWe4uo7xg07QQIfsE0s0i0+YawawTJnMhrNNjshrNc9ECJEppYa+SidoJ0McmMGpopvEFsSEJsuclsyYawaYFcrsr0cEXswtsprCJ2e+VaCtvGT4LAyYUpvJsaApttvAFyISPs/kEd8g9oeYLoSph+ftuMQdw+CYRdnNkqPNkAe0zwUOTt4tz6Rc8t3GOME89+fsOCn+MAP+G9oBYpsmcBEAdRXSgVTRF85UVBN84Ck9fBH8ohLlACqS6hYC0C2ZQ51hDhT22CgChC9QERMRH9tCmRTCxRZRXC32gRT9gcIi3RUi3ucisxCxcA6imxOihxUXYmj+jxFiritigJIJHixp1JASsJbhkS/I3SnJCSkS0D3K2S/K6lrI2ZFSppO6/NDS9cbpQm99gWMZa9oyqQKZJ4ET8yzmSypK6yhjcKpl91ztVlr19y0GryiGlK8GjxEWgKrTYK7T0KvTt1uJ6KwG2K71hKsz5Kr5Py424leogmjqom+3OlPK+Sgq1lYqjlMq0hCq3laq3D/deqxq4RMwaVWVALylBVLq6OjVPqnVdipM4azNE1faiaqahNU6ua51BajD41ZanamtkQQNEkza0NfVBrqNUrtAWNYJY62a5NartNK64r26vNH7B60le17OF66tQWD6xtRzhy5zj1tltzkzwdKy3l6G162GudBdJdZGtdNGo5p1rGx+nG/99YmLjLy9d9r+sV9mhJfB0hhh81gWghoWvV6zx7hPf3HPZPHm17jV5hj71ho2hjH77hqWnjKvOWgfRR0RxvVW2TYH8DLWtTXgzTfIvW/TQ2ujW+02jzWRi/OHhRkR4fJH+2iOrOsu3zfzEc92hu2O32hLAOmrIOtLDLUOhYDOs29rKOkrP2KLH2yrBOxu5OjLVOlrO7TO/n7OlQXO3rfOobDuy7cbRd0u52hbVoKumuywOu2bBupOnO5uw7JXtulXn5ruq7G7GXvn6bAelu3rYez7AZMe37SezR4HUQOe3Rxe2/FexHCS0xreixvHFx/et74+ve0+hfJepfCPw/G+p/O9bGgXPG67t+nKxgCXe7n+oHNlKBo3GBkB+BuVh4JJIvwBkvuBsBhBvXIxihcHVBsJYvDBtALB0gL3Dhxg576DQh1H4+lhvPTmAvRvw1xPf7uh/DIH+mzV4f2Y0fihzh8WqH3h82gR0n4RykxHu2sQCRqPiDLvSzEnqUoRuvHfinvf1RyfDR6fPXbR+es+/R5fQxlfte4PmP8x3fRPmxufrPL/o4xf6/9b+HjXUqCB8YoBDSX+KgEEz/xhRXWisCJlE3AKxMjk8TWAIk0ggmdUm94VAi8QzZDsTgvwXJiuXHY3QaUJTXJvO3KZnsjytTfLg03lbyhmmh0Npv+A6ZSFOAMhEuD0w0B9NlCqhWcMMy0JXBxmz7O8iACmacwZm1nOZt0Q4yLNSUKzN4Gs3JYrAoygnHZpS3KTNwDmEFI5lIBOZhdzmPqZBNwm3QREMeeRXUEN0ebPNOmncN5mmUhCfMLslkTun8wBbgdgWFlMFuIAhZQs9OsLdQAi3XhIsUW6gNFo4AxbqAsWVzAIbi3xaEts4JLNHkmQpZ7M/BjrQNs60W6/V0BLnIzuy3c6mc/WkNANisSFahsRWUufPnrjVZz1ZWP3Kmpa0wwqstW4gQ/qoEta6tweBeXika3+RExTWww9Vv/1Py9DrWotW1hPHtbLIchKxBlgASW6FCVuxnEGly2/D4s+W3Le4tUP1IHcI266E7rkJjZ6k42RpRNlQFNLmlLS6bbMkQIay90c2w0IsrdFMBUCu21ZZdn23PYbQ9cG5Zspm2PjNsrYBBXdhuS+HHsqy1EX4b9HHIDt+oTw0qKQPBGrlJoREKdqRC3LYRvhNgOgTQRADrsToLWekOiJ3aYjnA+7cQIe1xHUDKy4YHCDEEwLMBYAk5LgHdFch7QnoDuWoBAHlDshp23fIHNOTno8BckMgTkTaGnY8ieQaGOALBz9itJOSio8LAKWbjAB1w7WZGGDAbiGQuIAkCgOuBiD19q2G5cUZKK2gyjdoj0eUZqiVF3VVRSolPFqMFggx/QBoVQNzH9iBxjRYAU0TgwNYJI6S8oMUaDgjE1seoAGdgMBmJLT1Kafuacoklcg1gaRaAUODGOAw+jpILQpMb2VuTYjOI6YzMf+ljEKYcxAkEMk4B4BIBQAwwTErujwCtIQAMQGIEAA"} -const loadElementWithCache = memo(loadElement); - -const result = await loadElementWithCache('script.js', 'script', { - appendTo: document.head, -}); -const result2 = await loadElementWithCache('script.js', 'script', { - appendTo: document.body, -}); - -console.assert(result === result2); // true - -console.log(result.element.parentElement); // document.head -console.log(result2.element.parentElement); // document.head -``` - -::: diff --git a/packages/docs/utils/loadIframe.md b/packages/docs/utils/loadIframe.md deleted file mode 100644 index 27f42bfae..000000000 --- a/packages/docs/utils/loadIframe.md +++ /dev/null @@ -1,72 +0,0 @@ -# loadIframe - -Load a given URL as an iframe. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"139baff76baa5bee2b4fa9a7f2ddeddc8dacf857ed1b3a0e74f5599f42b78fe2","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvVhGZQAkv1LMAtjEZxSIxLzhpS7MAHMKvCFnGS4Afh0AZWVACirGGrBo4AeQsSwPe0cXNxgPOAAlGDRBUjAAFWwYAB4AHRB2JVUYNIA+FLB2FSwIUjRpR0VlNUoQKAgRBEQQBzleNHwYXiN2Eik4CBiRTq5eZikAAySMqpgc8d4YV3c0ADoatGYjRuRkEA4wAGsa/DQ0LDhEAHpLgCs4AFo0CAhWA/ZVvUEoCTUNldgiJdBOJWHBLjI5JUsisTipWCAALoIqh6ZilJAATiormM7SQAEYAAxUDakIxRPAQhSZarYwy4RDEkAifBo5hiMiYgC+FHQiTwhBI5BJdAYTREVjKmm0vDSlywzHalyelxUGEu02hsNYaRqqPRiAAbIbsaEjHjEABmElo8likDSmr7BkAJioLLZHPIRp5fJwAuInJF9DwEv8ZRgvTQOicUb1pLFRIA7KbcfgkABWG1kilNSOhBh0sAM63M1nKL1IAAcvuo/KagqD1FFoclCyWBZ0AAk4gBZOzyABiM2Cy3jaMT+IALKnzenECnqLbcyBFiEPE76UhSx6KzRvfiM7XMP6G4Hhc2Q00WBwuHwqVC1BotDo9AZjKZzJZ/LZeC1nB2YQ+N+AR/kEgGeJE0SxAkOCpOkNLZCAeQFEUJRlA+iE1HUDR4P+bQdF0PShLoAxaMMcCjBMUyIXM7brqs6ybNsuz7EcVAnGcFzXHcjzPK87wrJ83wQL8zD/JGQIgmCmEzDCaBwoiyIOgmBKWm6exmhaRLZnalIVFhRYlu65bsvu26Wse9YEOe6wtuKbbSjocoKkqKpqhqiHyXCuooqpiDTqWOJztuukro6RmhWWnrmYgU5TlZp42UKdlXsybb5h4MZxn5E4EhmM6aWmmZhfamWFnsW6IFm0V7pycWJQyyVNjQaWMFgpDmGQmB8LGBYrCeMCvvohhGNh9SNCAcSEQAVDN4yDeMc28KQMByPckisBgvAdV1pTbRA/AEZ0fUeLwhj7vw7KdKt0H+KMugjcYvBhhshijcdCxRgA5JRg0rLw8hlOwlFwFEvAAO4dFI7SdOV52UWGb6CByUBUWjIOfWAWQvaJKibdtghg2jTwrTA/BkG0ECfXAOAiBk7AiF9BamHAKP4KMiMcCIBymFSn6kAspCdaQKz5PkyC9gAIgAcrwkQU6togwAijCcecVyXACix7Ss+MAF7sKwrDiSURhaxNlwAOowAARpcACCAAK8iXKdaDKok3Djga+KGkywUWoVpJ6U0g2bsWJW1WZ9VEo1AYpcG9rY2otPXbj/gvNkYBEGiGf9K4OgAMJWFn424U002dOMSNZ/M+NQIIrg7Z1RDsLAlHMLohRYM3sC24IRjdM9tfN+0ioI93KhG3npOw/kABSzC5wAyiIBgWPnWe8GoHoFHAKgt8Q7cwGjtvbRDdu8LbnUQ2DpBwGLYD5FXO/QE3cO0MUpR/RD1O0zAem/BGa4zQsWMIiBxZgBmrwB2vBxgl0zq4eYIgTZwEohDd4HNfiECgKDdmnN4GjxgCsGQRhGDcHGKYGupdXArDICLCh8wxhoxoUgkhEM0RgCYQRCeIgxjX06ETU+VNIYGBoKIsY20ZbQBIXcR6q1VBPxgXAowMhbZsCIbQmA8xDComVhnYBRgYgiNJhDcRnRSbIHGLtIY6ChJoDqMCcYqt1bcUuJAWAdwVhmwtg0cEip4BoHuEQF0LoVi0EuMwLA7B5SdTsY/bUABiWx8B0GOIGGgPgLCJY2PiWkhxsBhYuLVqcDW1xPEwG8b4nCMlAl6BCWEiJUSYlxPqAU5JqT0F6CKaQbgANX5qIgBo1gWj2EoIEbbIRxNIZYMyedNCpQPqw3gZUxAxD67vzoVAgA+nNK2XDRpzR2ToQZ6jNHELMLbG4gC0C/R3lEXBndVq8GLFgymSMQY0A8FtfIcAMCiHwJ1SARNpDsAOJYwiN8IB30ps7eQf0OjbVWmDFQttXCmEgILNEkKYDbU+XoAsvzsb/MBcCgYlEOAQtGMbMwsNBYyNgCseRb41oqEfrwFeMBcW8GsZACRkgj4JMBpcLwJS3Ga0qdUskfi6k0AaaE8JkTomxK6YkhSrAknMHuPymAG0wD3DVfcCQfB+AlHyPjF5hgzWkBUIqPwT98hOFoKoXu0zlmESGSMsZBcdGQOfmAcYQa7j5GIaQiA5DvodGNtTP+pBWBQG+twAA3Pka4vAnbvk8DoaNMhIYlATaYUmPTMmhu0eGyNubqYAFI4DfVMN9ONCak2prAOmzNF0Li8Crfm+NUAi3/wycCMt7D6HCxKIwYsENeBOHHaQRg30raEHMHAVmolHkfQ0WjVkWAcDFkTdwFNabLgZqzZRBhJQHnoM2MMMAaNUQ8zaBWSxg7en+vTbwGdc6dBLueOcNdODN2tB3Xu0+x7P0QYnsgSMbAETVQChmcDEHRhlDXhvVYpBhDyHiPgEGiDWplEnbIxARAVABXUgFKs3AkOQbKF4a5tyViYbANh6aeHJAEd4ER2AJGyOWkJBiK0VGaOfonmsi6ZBsasDaQky4dBAHAj8AuJMAUMQiZQ7ymDrAET3HMdEnApAjSIDCepieWm0PsE3txoaEnYhsBk2kuTtAFPfgXIaI0hJqNtpPchsTxHbNSdVMwQwcnc6sB2W+UaxnLRWigUjMoKdOgAF5eCLqNqM8Iwy9GSG+q2sNnDYiMHGFLMY5JBYABJgCJa5AAQl4CV4wZAavjCPd509nadANbK7wK26X5ZZczmAOrXWmsDser0/IQbxhQOda65uRMPXV0Qb6lBaCLhQKmyG0QbZ5kpbtCvfQbKV7rsIBDCheWMrC14HtqIB3FEqGO2oU752R16B3hgZb28UtTq3nQz7rhGCZNMAw1rFqPvlrIQuntTaD2tvbWenNiw80w7G6WsAap/skMh1GpHNa60Nphy28DHaIHdtx72wtoi0cY/LRe+dP3Z2MMXcu/9pFAPPS3d2/ToRT5Jta/DjrvLGclB/Sz1dbON0c+A9z/dyJREMLi22RL13Uu9dpZl222WwC5bB5jlYBXuHFdK5TSr1XhvG9IM1/nJ6SfZvqxbnrfWNda/N41y3Y2FeBqDUxLYSAdgOm5TUZA/RBgq1KVxTW3R2iCFtisCUKgPGyLuIn2Alx0XDMuIq5pHB7ZhruN7JEuVfZVg0oHeci4Q4rmIRHBkJpo6VmM/HM8idLz2kYDg6AfA9eQ9TnAG9v4pGmBWMPr8fg2BOzZOynQUjkAIm4DoIgEB25cYANT4jMEKKk3sqC1LwLbv61NxglucbM9oryYAQ2dADXsTdxButGGSQQyxEaTM6AqdBp9TCYLP/PMAwCH5lDCJowjArIdSFBojbS943row0qjJyDfDfiaJAGEJsy2x6DvCKaSD5BhaCDwBTwzyCxWJ5IXT8CMCWiUKuJlKax2pgBJg+Iyr7CCCRI0GGo3pgg0GWhxIkErCWjeSsBeaMArK2hP4FjPLDC0rv4zJEGKasArA2p2poBMKUER4VJJ6Pw1KWwmzyrBJZ7KqtIyF8FJIyHyGKgmHBK2g8D9IbbBpwCvZlASjCBlApYZgXajrY4OFZS8DVqJqmAeFZJw424I64yOE6BZiiLH5oCvZZwVoLp+GID1rBEeDW7tak5xG8BhHFpDqRFe7TYBpcqdDWIGFmFKHh7lIp5VLqEyq1IBLaGNJKotKxIGHJLGElAKFmH3AWGmqXqWqdDWqtH2qSBrA2i+4oC7BwCGBDA1BECEgrD4izGEiEhKRF6JgYgBxaTziliV72hkI15IB167gxwHiEhN7NQXgEatjhi6AviyggDyiKj4DKgQCqjqiahqB8G+QqR5TGb4il7rFRRbF4ARSVSRxGgmQxT1TqQnGNhnH2TpSXHlTZQFg+xihhJrHFTVSlR4DlS7Ggn16xRTjHG8h1hJTQmpT2hSLIlIBhJ15l5IAV7Lj2hQHkg4n7GmQN5TiGhQm2RJx4CJZpxDC/bZy5yCzELFzaLlyTSvxsIrZvyNzNy7RtwdwPTjFFB9x2yDzDxGCCm8LAygyFAEGiK/5LyrzryWb2HaIPJ7wgyHwKknxnwXxXzQqwoPyOo4adANwfwLBfzoS/z/x0wMxMzx7FDgLZpQIqLwKY6rZcAYJYIPLtDQD4IsiELSnRGQ6ULUJhp048IsI+rREG48Ljz2Gv68DIFmIWKSJgDSKyLMqgyHZKL5DhleqaIpnILnThhjAClhhGImIkyxrllEFqqFKZLiplLuJSqVHmzVFaFBJ1HNIqoOb2KdL5LdJZHZJ3q5KDk9IMIjkqHlHSqTmaH1I6FNJ6GqrLnqpwgpLnlbnCz9K8BnLDLNkbIvTFnIHf6EDAgLLfziDPQrLjBrLPkenbIBp7IzQHKxBHIzQnL3mernKjKXLDI3JiD3Id54IP6dBvL0r5xfJEoYB/IAosjkqgpUo8pOn3ywIuyIp4pkyoroowCYqXo4rHT4pWA4U/J4UkoEVAqSAUpgrUpsCjIQBYWMpyK1n3Ycr5GfR8pCWdCCpqoipirKFlHjn0EHn+LTkKonkNELkXmaraq6r6qGrnnGoQBdGkAWolC9F/79Hfiumzaqnuq/mwWPmjItl+rWHjBbZhrY7Q4Fqw7E5BG+V9pjYRFRF0I+Xk61oJGNp+VE5tb76I4xoU79rhFZFhUkJZkM5zoLq/oroAaS5amc4gY84HrJH75CwixXp97kgwEPoHBPrpyZFvo0bC6GY9Zi75XtBAbboy5gZta+ZlDQZhZwYZgIamaoamkWBMZYY4bsYeCihcZrKkbkYuiUZeYfq0a8D0ZIUYYzVsZwD4YLXWa8ZWgCZCbrU+abXibzV2bSZqpOYuZKZJgqb4hqb9WbVDWwa6bKC7pkBGYmbvWiYRhhYWZWbXX7iBb3XyYiCYFgBuYeYXXIYabg2Sb2Z2ohZaYRZPRGDRaxYBrxavI4wpZpbq4Db9Da6uG+r65cJFYjYVZVZZC1b25u5W4BEpF2502O6k2a6Dau5lY1YhWOKe5TYzYuoOUlnjFOVLbaJRnoL+qTY2F2FmCfk3ZoB3ZHYnYwovbbbwlXaq3q2qCPYwDPatYE007sIq4/ZhqY6A7AjA63mtq64Q4RpQ7k6E5lWBVu1+Wo7Dro7g5uEu045JVRUE6xUe2C5BWU6kzU7+1U2ZUX5fpM65Ws79Ds6FXS6/X7p85s0JVC7frtV/ri6p0FXXwZ2gZQBy6kye5K3K7E1q4ZZk05atrm1U35lG5u68Cm6M181NYtY51BGc3139Y83k093u7y7CwK3jA+4sQB64BUDB5kRDBKXuJR74Ax5x6iR7lgiVJp7qKZ5aU56XB548BLGfEGguhThYhFQhQLiYkOTsI4lVhgl1Teguhckt7nHXioVd7O3kJMkwAD6VlD4j6+CSDj6T5doz5z4L5L5oyMBr4b5kBb4Sl75nqiJH5ZHzDvnn6X70jX636WbNzCHP4vlSBTI7TRmf6n4cy/7/5vbIEgGERgF2qkCQFpLQE5kCWjBQAIFj6jKMP4JoHiDRDfjYFsC4F6nTwmyEHUzWJgEeCkHkE7lYDUFjB0G+KMHMFjCsHkjsFjCcEKNoD8A8F8ECFCGP6kNMXcOSGmJyPjBFE2UlESqqFeITmyo1Ezm6HaVNEapGEghmHtGdFWEBqba2E61vZ+Eq4uHpUxHfRpHeEJF+Hh2pEDCeEZGvpo7eWB1xFJNpP+EBWC5pEZPjZo4i15Hcq8oOMghyFOMUGlFjlqGqUeMaXHn1Hzm+OXktG2qmE2UdFkg8ACDdGWVtlmEOoz1+5jETHz0gDTGzHzGLGF7n0okZiLi0lWj317ARpP0v2HEEiEl+hNSkk8kP1vZOQ3F3FuRPEeSvEkLagfH6gomGiFTrObEMmAlaA7N4mxxJhcjKQSiwB4A9zoS8DADlCQiIS8BcgCCdSHzfQAACwkPwUQzAtwDwTwLwbwHsMhdajtETUoWgKu30lzDx7kLxXk2oOu+LoLzMHgwOEEULKuzAnC7w4L1IMwz4IgoOBQR0jA5UA0iQ12SWxNdOSaoL+Qn62T5C4wg4wWrgvZbLndwA0oXIOglW/LADXIfd+Q0LiwYM4rUggpMR4wlWKrXOlEUyJEVIp8rNOrNQYkSAoAoooQ4xkgeAdwIAXIXIQAA"} -import { loadIframe } from '@studiometa/js-toolkit/utils'; - -const src = '/path/to/my/iframe.html'; -const { event, element } = await loadIframe(src); - -if (event.type === 'error') { - console.log(`Failed to load ${src}: ${event.message}`); -} else { - console.log(`${src} has been loaded!`); -} -``` - -### Parameters - -- `src` (`string`): the source URL to load -- `options` (`{ appendTo?: HTMLElement }`): configure the loader behavior - - `options.appendTo` (`HTMLElement`): append the created element to a DOM element - -### Return value - -- `Promise<{ event: Event, element: HTMLelement }>`: a promise resolving to an object containing both the load event object and the created element - -## Examples - -### Avoid loading the same iframe multiple times - -You can combine the `loadIframe` function with the [`memo` function](/utils/memo.html) to add an in memory cache layer. This will make the generated function always return the same generated element. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"3260be87b3074f737364d571e9e90e48a1794a4571def81cca53f2b98af62daf","data":"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"} -import { loadIframe, memo } from '@studiometa/js-toolkit'; - -const loadIframeWithCache = memo(loadIframe); -const promise = loadIframeWithCache('iframe.html'); -const promise2 = loadIframeWithCache('iframe.html'); - -console.assert(promise === promise2); // true - -const [result, result2] = await Promise.all([promise, promise2]); - -console.assert(result === result2); -``` - -::: warning Cache invalidation -Be aware that the [`memo` function](/utils/memo.html) will use a simple `arguments.join('')` call to generate the cache key, thus ignoring any change in the options parameter of the `loadIframe` function. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"35de5a10482433f84e31e340e2f2a64683edb12f795328f51da39f90e15d3877","data":"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="} -const loadIframeWithCache = memo(loadIframe); - -const result = await loadIframeWithCache('iframe.html', { - appendTo: document.head, -}); -const result2 = await loadIframeWithCache('iframe.html', { - appendTo: document.body, -}); - -console.assert(result === result2); // true - -console.log(result.element.parentElement); // document.head -console.log(result2.element.parentElement); // document.head -``` - -::: diff --git a/packages/docs/utils/loadImage.md b/packages/docs/utils/loadImage.md deleted file mode 100644 index 5a99cb0ed..000000000 --- a/packages/docs/utils/loadImage.md +++ /dev/null @@ -1,72 +0,0 @@ -# loadImage - -Load a given image. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"ebb0ab5ae1393f0902718c7e48f9eb5322d90030573307a37ab97714b629c7fd","data":"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="} -import { loadImage } from '@studiometa/js-toolkit/utils'; - -const src = '/path/to/my/image.jpg'; -const { event, element } = await loadImage(src); - -if (event.type === 'error') { - console.log(`Failed to load ${src}: ${event.message}`); -} else { - console.log(`${src} has been loaded!`); -} -``` - -### Parameters - -- `src` (`string`): the source URL to load -- `options` (`{ appendTo?: HTMLElement }`): configure the loader behavior - - `options.appendTo` (`HTMLElement`): append the created element to a DOM element - -### Return value - -- `Promise<{ event: Event, element: HTMLelement }>`: a promise resolving to an object containing both the load event object and the created element - -## Examples - -### Avoid loading the same image multiple times - -You can combine the `loadImage` function with the [`memo` function](/utils/memo.html) to add an in memory cache layer. This will make the generated function always return the same generated element. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"6fd233a2cdc8ce1157bfce1953006b2ee6fbd71f0eab5a625343870c9316982a","data":"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"} -import { loadImage, memo } from '@studiometa/js-toolkit'; - -const loadImageWithCache = memo(loadImage); -const promise = loadImageWithCache('image.webp'); -const promise2 = loadImageWithCache('image.webp'); - -console.assert(promise === promise2); // true - -const [result, result2] = await Promise.all([promise, promise2]); - -console.assert(result === result2); -``` - -::: warning Cache invalidation -Be aware that the [`memo` function](/utils/memo.html) will use a simple `arguments.join('')` call to generate the cache key, thus ignoring any change in the options parameter of the `loadImage` function. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"042b6e85676395f9afe51402465633e18ec0d7eee89ddae81c9d18be651d26f2","data":"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="} -const loadImageWithCache = memo(loadImage); - -const result = await loadImageWithCache('image.webp', { - appendTo: document.head, -}); -const result2 = await loadImageWithCache('image.webp', { - appendTo: document.body, -}); - -console.assert(result === result2); // true - -console.log(result.element.parentElement); // document.head -console.log(result2.element.parentElement); // document.head -``` - -::: diff --git a/packages/docs/utils/loadLink.md b/packages/docs/utils/loadLink.md deleted file mode 100644 index abe7381e9..000000000 --- a/packages/docs/utils/loadLink.md +++ /dev/null @@ -1,72 +0,0 @@ -# loadLink - -Load a given source as a link. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"fe6f14a9f818890b5ae7352cef09c6ed9aa6fa36e617d789db0269d78832ae97","data":"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"} -import { loadLink } from '@studiometa/js-toolkit/utils'; - -const src = '/path/to/my/styles.css'; -const { event, element } = await loadLink(src); - -if (event.type === 'error') { - console.log(`Failed to load ${src}: ${event.message}`); -} else { - console.log(`${src} has been loaded!`); -} -``` - -### Parameters - -- `src` (`string`): the source URL to load -- `options` (`{ appendTo?: HTMLElement }`): configure the loader behavior - - `options.appendTo` (`HTMLElement`): append the created element to a DOM element - -### Return value - -- `Promise<{ event: Event, element: HTMLelement }>`: a promise resolving to an object containing both the load event object and the created element - -## Examples - -### Avoid loading the same link multiple times - -You can combine the `loadLink` function with the [`memo` function](/utils/memo.html) to add an in memory cache layer. This will make the generated function always return the same generated element. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"01e38a06b2349548e3db0d1b48a233daec1dbeb9c526984ca86d9c352e6e1a1f","data":"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="} -import { loadLink, memo } from '@studiometa/js-toolkit'; - -const loadLinkWithCache = memo(loadLink); -const promise = loadLinkWithCache('style.css'); -const promise2 = loadLinkWithCache('style.css'); - -console.assert(promise === promise2); // true - -const [result, result2] = await Promise.all([promise, promise2]); - -console.assert(result === result2); -``` - -::: warning Cache invalidation -Be aware that the [`memo` function](/utils/memo.html) will use a simple `arguments.join('')` call to generate the cache key, thus ignoring any change in the options parameter of the `loadLink` function. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"49be0847daa4abb817b8878c98de6d9c526869cdd6661ba6ce9610da88780514","data":"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="} -const loadLinkWithCache = memo(loadLink); - -const result = await loadLinkWithCache('style.css', { - appendTo: document.head, -}); -const result2 = await loadLinkWithCache('style.css', { - appendTo: document.body, -}); - -console.assert(result === result2); // true - -console.log(result.element.parentElement); // document.head -console.log(result2.element.parentElement); // document.head -``` - -::: diff --git a/packages/docs/utils/loadScript.md b/packages/docs/utils/loadScript.md deleted file mode 100644 index badc13394..000000000 --- a/packages/docs/utils/loadScript.md +++ /dev/null @@ -1,72 +0,0 @@ -# loadScript - -Load a given script. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"becee30fe56df36c2a6990cc23a9d115e8810c6f656f5bc00d2634f6a54d6a2e","data":"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"} -import { loadScript } from '@studiometa/js-toolkit/utils'; - -const src = '/path/to/my/script.js'; -const { event, element } = await loadScript(src); - -if (event.type === 'error') { - console.log(`Failed to load ${src}: ${event.message}`); -} else { - console.log(`${src} has been loaded!`); -} -``` - -### Parameters - -- `src` (`string`): the source URL to load -- `options` (`{ appendTo?: HTMLElement }`): configure the loader behavior - - `options.appendTo` (`HTMLElement`): append the created element to a DOM element, defaults to `document.head` as the script will not be loaded if its element is not attached to the DOM - -### Return value - -- `Promise<{ event: Event, element: HTMLelement }>`: a promise resolving to an object containing both the load event object and the created element - -## Examples - -### Avoid loading the same script multiple times - -You can combine the `loadScript` function with the [`memo` function](/utils/memo.html) to add an in memory cache layer. This will make the generated function always return the same generated element. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"285fd03ff7c3b9102b5506712cb9785fe91603997551475d5130bfe066eb167a","data":"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"} -import { loadScript, memo } from '@studiometa/js-toolkit'; - -const loadScriptWithCache = memo(loadScript); -const promise = loadScriptWithCache('script.js'); -const promise2 = loadScriptWithCache('script.js'); - -console.log(promise === promise2); // true - -const [result, result2] = await Promise.all([promise, promise2]); - -console.log(result === result2); -``` - -::: warning Cache invalidation -Be aware that the [`memo` function](/utils/memo.html) will use a simple `arguments.join('')` call to generate the cache key, thus ignoring any change in the options parameter of the `loadScript` function. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"ae6b74f4a1f571aea7c245e2c1f3b6131df95e9fb23c4d361bcfae7e7e4e02c6","data":"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"} -const loadScriptWithCache = memo(loadScript); - -const result = await loadScriptWithCache('script.js', { - appendTo: document.head, -}); -const result2 = await loadScriptWithCache('script.js', { - appendTo: document.body, -}); - -console.log(result === result2); // true - -console.log(result.element.parentElement); // document.head -console.log(result2.element.parentElement); // document.head -``` - -::: diff --git a/packages/docs/utils/math/clamp.md b/packages/docs/utils/math/clamp.md deleted file mode 100644 index c0f77c94a..000000000 --- a/packages/docs/utils/math/clamp.md +++ /dev/null @@ -1,24 +0,0 @@ -# clamp - -Clamp a value in a given range. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"e17d46c4a2209c6834d9004d3885dbb37c5e484fb930f4a290df7b396150973a","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvEa2YBbLIyJtBMRLzCC5AIzIVec9mHWadeg81omtu0t2tnSAHTDsFEUmmmyFlEFAgRBEQQAGEfLF5mXmVWVV4jKN4Ac3YSKVJmMGSYADo/NGZk4ORkEA4wAGs/fDQ0LDhEAHomgCs4AFo0CAhWSvY0XLg0QSgJORhC3NgiJsFxVjgmuWY0fCaZeSxc2rlWEABdA6ph5k8kAE4qVhhstaQAVipC0hyGEM3fa6NcRAAGKgifBnZhiMiXAC+FHQ2F+BGI4OedHeIBYHC4fE+iliqgctn0hmMGhs5hWVmJjnsFNsLjcWA8XixfgCQTw4S2SRxMASUmiqXSvEy2TyBSKJTKFWqVFq9UaLXaXR6fQGQxGYwgEymMzmCyWKzWGwiOzQe0OxxAp3OiAeT3Kt2S92tzzObzwTO+YF+ACZAcDMmDyP8oTCcHhCCRyEj6Ew2JweN4tkoVGpqaSjHjSZYM3Zs7T3J4E19/IFgmEIpzkzykvzboKsjl8s7ikhSuUjFKCHUGs02p1ur1+oNhqNxpNmNMYLN5uxFstVusscbTUcTi93gB2dfXe2O20vV0fCJ+Cq/ADMvpBAaQf2D1FhYYRkeoyJj6PjWKTcRTpnxBnTqdIAkswAqkfzIPN6QLd1i1ZEJ2QUCsvyrPk0lrIUG1FZsUAldsai7OVe0VAcVWHdVNXHbVp1nfUFyNXZ9hXC01yQABGP4WO3O58EeZ1XkmN0jw9X4ABYL39GhAxvc0RGgOE6QZXhgELSIIQEUgNV4AByAABUjR0KQj+2VNAdRnOBNIAbhcFwPyeXgAV4NjuAs3gWl4B4bIiRgWLshynJcty2M8xMOl8/R/Ncpp7L8cikFAZFbjgCQwDwdoQAhCEgA=="} -import { clamp } from '@studiometa/js-toolkit/utils'; - -clamp(5, 0, 10); // 5 -clamp(15, 0, 10); // 10 -clamp(-5, 0, 10); // 0 -``` - -### Parameters - -- `value` (`number`): The value to clamp. -- `min` (`number`): The range minimum value. -- `max` (`number`): The range maximum value. - -### Return value - -- `number`: The clamped value. diff --git a/packages/docs/utils/math/clamp01.md b/packages/docs/utils/math/clamp01.md deleted file mode 100644 index 312286c29..000000000 --- a/packages/docs/utils/math/clamp01.md +++ /dev/null @@ -1,21 +0,0 @@ -# clamp01 - -Clamp a value in the 0–1 range. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"4a9ee952d1bd0200109d1ca9a86eeff80b3b1a233cf66287b0431ec875a73ee4","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvEa2YBbLAAYAjIyJtBMRLzCC5AIzLdtug2QA6Ydgoik002QpWUQUCCISIQAYUdZezLzqrJq87FJo+DC8ioDIBMq8pMxgAOYwAHQuaMwpnsjIIBxgANYu+GhoWHCIAPQ1AFZwALRoEBCsxexo6XBoglAScjDZ6bBENYLirHA1csyRNTLySsrp5XKsIAC6W1S9zHZIAJxUrDCpkUgA7FTZpGkMXktOyi5FuIiKVCL4B8xiZGOAF8KOhsB8CMRAbc6I8QCwOFw+M8VmoNFodHpDKRjJizKRLNYsLZ7CjnFQ3B48L5lgEguiwhEojF4olkmlMrccnkCkVSlRypVqnVGi02h0uj0+gMIEMRmMJlMZnMFmTVutNjs9ndHgBWG6Fc4pS6IA13B54NVvcIfABM31+SQB5E+ILBODwhBI5Bh9CYbE4PAcyxUaJCGNM2NxkYsVhsdmDLxclM8Pj8dOCoXCvEi0TiCSSqQyWW5SHyhXC/IIFSqtQazVa7U63V6/UGw2Yoxg40m7Gms3m+EWfhUazQG22uxA+0OpoAHKcjSazQcLU8R69TjakABmB1/Z1IRRAqciaAQokk3jARMrXhAgSkWW8ADkAAFWzK5cx62Km11FT7OAXwAbksSw1UYRR0l1bgQN4OoYhgiCN0YVZYPgxDNxAb8kFAWFzjgCQwDwRoQCBIEgA=="} -import { clamp01 } from '@studiometa/js-toolkit/utils'; - -clamp01(0.5); // 0.5 -clamp01(1.5); // 1 -``` - -### Parameters - -- `value` (`number`): The value to clamp between `0` and `1`. - -### Return value - -- `number`: The clamped between `0` and `1` value. diff --git a/packages/docs/utils/math/createEaseInOut.md b/packages/docs/utils/math/createEaseInOut.md deleted file mode 100644 index b4eca3ac4..000000000 --- a/packages/docs/utils/math/createEaseInOut.md +++ /dev/null @@ -1,20 +0,0 @@ -# createEaseInOut - -Generate an in-out easing function given an ease-in function. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"561f90fbf2ec23cd7deb667d20b61fbb1e5aa32d1c3044e3911259c4848a65d5","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvGFxgBJMAGF2pEYyykIAc1Lw4iXmEEBbAEZluBo2bIAdMO2NYIpNNNkLlqyiCgQRCIggAKKyvOxSIioiAHQ+aMxagcjIIFjMpMzGPhraunBwvAAKmjp6vERsgjC85mgA7jBSAAYADM28zGBQvM0AjM1xALoUqbpogqRgPqFwMD2VrNW1MA0wTb3tnd29A8OjIBxgANY++GhoWPoA9NcAVnAAtGgQEKzH7GgxcBNQEsarZgxWBEa6CcSsODXYzMND4a4yOYxc7GVggIYjEA/DIMRAATiorCaWjhSD6rSoCVIWlWeER8iU0R8R1wiApIBE+AyzDEZCQeIAvhR0NhWQRiHzKXRcSAWBwuHwhKJxJJeCJdLCYLMGQB5cGMekKAyzCJaABiwjEEjAll4JrA5stKrA9kczlcao1NG1Cj1DCofgCeEUXpqXXCYEeEHB7jgpoETutcUpiWSqXSmWyVENUgAKvgavSIwnlUn0QdxpNplR8zUIlGY0qrZJ9qkjqcqOdLjd7k8Xm8Pl8foI/hAAQlgTBQeD2JDobD4eqZN6PGA/ci0Kj0Zjsa4kAAmPqE4mkxB9ACsKeptKCS81PrX4OZEVZ7M53N55EQh6FIpweEIEhyCleg8BESQfljBk0D9LwRGNLhTQtUtJB8XdcQADgAZmPB1Tz6AAWK8aRlHMYPBODnzAVl9yod9Mk/JAADZf2oUUAIlYDqGlJg2E4HhPWXLVVz9A1VwQuMHWQ5sbQkpDE0kV0nBcNw7xXOZfSfAN/ECEAQyE7YIwbNxEXjJtnWTahUyQFI0m5LMQBzXhayg4tzLLEYxlWKsfBc+tozcdyW3LNsIg7AgLiuRBbgeZ5XneT5vl+f5AUnacIShGE4WuNThI0x8vhRNEMSodCyVadkiTw/AyUvKzrxlXKHz9KiaLorkGJoL99yw1jMH/IJAMlbjQKCOV+MVBSpBzOD1FKfJ9EMExzFIW1rBWpT3RM1dKO0oMgm1YsolUSyEiSGz03snJ5vKEo8nKRZljqRoWi2Loen6QYQpASsphmWQFiqGpnvWV6One3Yvs8w4wrOSKe1i/sEqHZKx1SkEwQy+dsvpDctxKrEqVxPo+iY3CSRqs92SpEi6R2plCRfA92o/LqkCwwVMXA2A8DdFTeGAKDPGiChBPvESYwFARNGMXgAHIAAFh1HcdmF7OKB0+THZzgOWAG57HscCwEgsjYOiXgAF4xfU3V9Rm6JuD1nxVaQUBpSaONUKCB4QAFAUgA=="} -import { easeInCirc, createEaseInOut } from '@studiometa/js-toolkit/utils'; - -const easeIntOutCirc = createEaseInOut(easeInCirc); -``` - -### Parameters - -- `easeIn` (`(progress: number) => number`): an easing function to reverse - -### Return value - -- `(progress: number) => number`: the reversed easing function diff --git a/packages/docs/utils/math/createEaseOut.md b/packages/docs/utils/math/createEaseOut.md deleted file mode 100644 index 441ddd41d..000000000 --- a/packages/docs/utils/math/createEaseOut.md +++ /dev/null @@ -1,20 +0,0 @@ -# createEaseOut - -Generate a reversed easing function from a given easing function. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"443283b8896fa1d5098c235e19bdf3ce7829179a2ac7f50b92bdcb3645d03157","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvGFxgBJMAGF2pEYyykIAc1Lw4iXmEEBbAEZluBo2bIAdMO2NYIpNNNkLlqyiCgQRCIggAKKyvOxSIioiAHQ+aMxagcjIIFjMpMzGPhraunBwvAAKmjp6vERsgjC85mgA7jBSAAYADM28zGBQvM0AjM1xALoUqbpogqRgPqFwMD2VrNW1MA0wTb3tnd29A8OjIBxgANY++GhoWPoA9NcAVnAAtGgQEKzH7GgxcBNQEsarZgxWBEa6CcSsODXYzMND4a4yOYxc7GVggIYjEA/DIMRAATiorCaWjhSD6rSoCVIWlWeER8iU0R8R1wiApIBE+AyzDEZCQeIAvhR0NhWQRiHzKXRcSAWBwuHwhKJxJJeCJdLCYLMYAB5cGMekKAyzCJaABiwjEEjAll4JrA5stKrA9kczlcao1NG1eoYVD8ATwii9NS6vAg4PccFNAid1rilMSyVS6Uy2SohqkABV8DV6eEpEqrZJ9mNVpNplQczUI24i87S4cIqcqOdLjd7k8Xm8Pl8foI/hAAQlgTBQeD2JDobD4eqZN7ZL7kWhUejMdjXEgAEx9QnE0mIPoAZkT1NpQTnmp94OZEVZ7M53N55EQO6FIpweEIJHIUvoeBESQfijXVwS8ERjS4U0LWVa0fA3XEAA5d0Ofd8DJFCqRpGV6V9cDbzAVktyoR9MmfJAADZ32oUUvwlX9qGlJg2E4HhPXnLVF31TNIOjB0YOLG1eOguNJFdJwXDcS8FzmX0fADQIQGDDjtnDSNERjet43iJMkBSNJuXTEBM14asQILWNYJLdEDnGCsfDM2tLMExsjhbAgLiuRBbgeZ5XneT5vl+f5AVHccIShGE4WuaTONk8Fl1XDEqAQ/kAFY9wdA9j1PbCAJDa8/SbQjtxIrkyJoF8t1aajME/IJv0lRj/yCOVWMVUSpEzcD1FKfJ9EMExzFIW1rGG8T3TcbqmX9fxFO1CyolUBNqF0lAU0MnI+vKEo8nKRZljqRoWi2Loen6QYbLLCYphmWQFiqGojvWE6OjO3ZLpGVI3LOTyO187sAr7YKh1CkEwQi6dovpRK0WSrEqVxckCVQrL0MPdksPPYyPEZbxCTvUqOXKnlKqQI8ABYBUxQDYDwN1JN4YAQM8aIKHYq8uLcAUBE0YxeAAcgAAX7Qdh2YTs/J7T4IcnOABYAbnsexALAYDcLA6JeAAXg5mTQLQA1cfA7gFZ8cWkFAaUmmjSQ8AeEABQFIA"} -import { easeInCirc, createEaseOut } from '@studiometa/js-toolkit/utils'; - -const easeOutCirc = createEaseOut(easeInCirc); -``` - -### Parameters - -- `easeIn` (`(progress: number) => number`): an easing function to reverse - -### Return value - -- `(progress: number) => number`: the reversed easing function diff --git a/packages/docs/utils/math/createRange.md b/packages/docs/utils/math/createRange.md deleted file mode 100644 index 35dfc5a4a..000000000 --- a/packages/docs/utils/math/createRange.md +++ /dev/null @@ -1,22 +0,0 @@ -# createRange - -Create an array of number between a given range and incremental step. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"dfdef795e62d11c51d03b3bd4c04f423e73029a698d0db25c6f7d258e1a7b5c5","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvEaRjMaAJWZgA5jEYBbdmES8wgjQCMyFXhua1d+oyd5waWKweOluTm6WQBdADph2GlgQpGjSsvIwSqq4VFAQIgiIIADC4TS8yhmkpMwYAqQQGhm8KuwkUjnRGWBQvADu7Gj4vE0wJWUwUtoyMBqdaGx2DgB0lNTMKonIyCAcYADWY/hoaFhwiAD0GwBWcAC0aBAQrPONw/aCUBJ9A8OwRBuC4qxwG+ZNGz0RUWrDyxqsEBeLxUezMEJIACcVFYnRUTSQAEZEVQBqQ1Awkl9FMo1GM5rhEAAGKgifDg5hiMhQgC+FHQ2EJBGI1NRdExIBYHC4fGxkVx6i0Oj0zls5ksIo8pnsMEckpcbnlZG8fgCQRCYTkOOiYziCTwqS1bUy4JyeX4BSKzHa5V4lTU1VqDSaLXwbVKtu6sj6YAGrCGstGqImUxmc0WVGWq3WW12ByOJzOFyuhRgt3uj2er3e+E+aX50T+aABQJBIDBEMQADYUbM4QjEMjg+i03g+T8YrNtISAEyk8k5KnkYk0ssiaBMtXBULATXfAW8Gn5Qq8ADkAAFk9c08wdvtDsdTmhM+wXquANx+PztgWMEm8RH3nvcc+8La8ZBP0wAFlMVdMAAcpiPl4Yw3MwSCgOynRwBIYB4LsIA0jSQA==="} -import { createRange } from '@studiometa/js-toolkit/utils'; - -createRange(0, 10, 2); // [0, 2, 4, 6, 8, 10] -``` - -### Parameters - -- `min` (`number`): the minimum value for the range -- `max` (`number`): the maximum value for the rance -- `step` (`number`): the value to increment each number - -### Return value - -- `number[]`: an array of numbers diff --git a/packages/docs/utils/math/damp.md b/packages/docs/utils/math/damp.md deleted file mode 100644 index 29502c292..000000000 --- a/packages/docs/utils/math/damp.md +++ /dev/null @@ -1,34 +0,0 @@ -# damp - -Get the next damped value for a given target and factor. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"1841be795e86bb713329819ef0c5e1685cea6c1f9abc4674b7647977ff908d11","data":"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="} -import { damp } from '@studiometa/js-toolkit/utils'; - -const targetValue = 10; -const factor = 0.5; -const precision = 0.1; -let currentValue = 5; - -currentValue = damp(targetValue, currentValue, factor, precision); // 7.5 -currentValue = damp(targetValue, currentValue, factor, precision); // 8.75 -currentValue = damp(targetValue, currentValue, factor, precision); // 9.375 -currentValue = damp(targetValue, currentValue, factor, precision); // 9.6875 -currentValue = damp(targetValue, currentValue, factor, precision); // 9.84375 -currentValue = damp(targetValue, currentValue, factor, precision); // 9.921875 -currentValue = damp(targetValue, currentValue, factor, precision); // 10 -``` - -### Parameters - -- `targetValue` (`number`): The final value. -- `currentValue` (`number`): The current value. -- `factor` (`number`): The factor used to reach the target value, defaults to `0.5`. -- `precision` (`number`): The threshold below which the current value snaps to the target. Defaults to `0.01`. - -### Return value - -- `number`: The next damped value diff --git a/packages/docs/utils/math/ease.md b/packages/docs/utils/math/ease.md deleted file mode 100644 index 282902a5f..000000000 --- a/packages/docs/utils/math/ease.md +++ /dev/null @@ -1,121 +0,0 @@ -# ease - -Functions to get the eased version of a progress value in the 0–1 range and helpers function to generate ease-out and ease-in-out functions. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"94f4e716cbc7d01caa8a73455c7e40407a2e374292ae700219a4747c4054a921","data":"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"} -import { - // linear - easeLinear, - // in - easeInCirc, - easeInCubic, - easeInExpo, - easeInQuad, - easeInQuart, - easeInQuint, - easeInSine, - // out - easeOutCirc, - easeOutCubic, - easeOutExpo, - easeOutQuad, - easeOutQuart, - easeOutQuint, - easeOutSine, - // in-out - easeInOutCirc, - easeInOutCubic, - easeInOutExpo, - easeInOutQuad, - easeInOutQuart, - easeInOutQuint, - easeInOutSine, -} from '@studiometa/js-toolkit/utils'; - -easeInCirc(0); // 0 -easeInCirc(0.25); // 0.031754163448145745 -easeInCirc(0.5); // 0.1339745962155614 -easeInCirc(0.55); // 0.16483534557549673 -easeInCirc(0.9); // 0.5641101056459328 -easeInCirc(0.95); // 0.6877501000800801 -easeInCirc(0.99); // 0.858932640203341 -easeInCirc(1); // 1 -``` - -### Parameters - -- `progress` (`number`): a progress value betwen 0 and 1. - -### Return value - -- `number`: eased progress value between 0 and 1. - -## Examples - -Select an easing function below to see how it will transform the given progress over time. - - - -
    - -
    -
    -
    1
    -
    progress
    -
    0
    -
    -
    -
    0
    -
    time
    -
    {{ count }}
    -
    -
    -
    -
    -
    -
    diff --git a/packages/docs/utils/math/fold.md b/packages/docs/utils/math/fold.md deleted file mode 100644 index 6b7b16e5a..000000000 --- a/packages/docs/utils/math/fold.md +++ /dev/null @@ -1,73 +0,0 @@ -# fold - -Fold a value back and forth within a specified range, reflecting it at the bounds ping-pong style. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"c03acae9f4b53098912558e1bb2334a192ed0a3fb73d37a2fbe92d2f41b4bfa8","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwAiKyiMibQTES8wggLYAjMhV7r2YFWq069zWkY3bS3SydIAdMO3VYIpNNNmUQUCCIREEAAxGSheZl4FViVeTWYRAGsIsHD+dzR8XgNeTJg9HOZUs1peUiKAcxgAOh80ZgrA5GQQDjBEn3w0NCw4RAB6foArOABaNAgZRPY0arg0QSgJdRh66tgifsFxVjh+9WZM/vTZaq71VhAAXSuqeeYPJABOKlYYMArMpAAWKnrSKoMIInKA+Nq4RAABioInwDwSNHIiCeAF8KOhsBCCMQyHU6ECQCwOFw+CD5IplKorKZ9IYqfZdAcLPTrLYWWQnC43B4vKCqH4AnhQrIIlEKXEEskimkMlkcnkClJpSUypUanUGk0Wm0OlQuj0+oMRuNJqxprN5otlqtmOsYJttuxdvtDvhjmEzmgLtdbiB7o9EABWX6td6ffA/P4PQF4EFggwQgBMMLh5TEuKhaIxODwhBI5D++KYbE4PF55JilOM1kZBjsNZK9bIbOrHOcrgyvJ8AsCITCouisXiSRSMo8cqkCtpo5V5Q+6qjjSQzVaBl1BG6vQGwzGEymMzmCyWEBWaw2Wx2ewORxBnu9Nzu/yBAHYQ28Pl9ECH/jHgWF42AEIAMwpvC6ZIpCWbUJiuY4gW1BFkERKlqSYQVkoTakLWdKtlhjbsjYmGch2PJxvy/i9sK4SRIO+TDlKxTpOO2STvg+TTsqTKqvOtSLlqq7tJ0m6GjuJr7haR7Wme9oXk6V6uu6pznJcD5+k+zxvmGn7ftGqyxv+rwJpGICwmBiJIJBvoiNAWJcp2wC8rwKICKQJ68AA5AAApax6nswol7maMyybs7kANxOE4ZIAIy6NCvCJtwYW8IMvDRVFaEgbw8WJclqXpWAZKjLF2W6LlKX9GlPh+UgoD4u8cASGAeAjCAKIokAA=="} -import { fold } from '@studiometa/js-toolkit/utils'; - -fold(1, 0, 2); // 1 -fold(3, 0, 2); // 1 -fold(-1, 0, 2); // 1 -``` - -### Parameters - -- `value` (`number`): The value to fold -- `min` (`number`): The minimum value of the range -- `max` (`number`): The maximum value of the range - -### Return value - -- `number`: The folded value within the specified range - -### Behavior - -The `fold` function ensures that: - -- Values above `max` are reflected back into the range -- Values below `min` are reflected back into the range -- Reflections repeat for values multiple cycles out of bounds -- If `min` equals `max`, the function returns `min` -- If the range is not finite (e.g. `max` is `Infinity`), the function returns `min` -- The result is always within `[min, max]` (inclusive of both bounds) - -### Types - -```ts -function fold(value: number, min: number, max: number): number; -``` - -## Examples - -### Ping-pong index navigation - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"3c6f53b994544b5e90793b9e6eb693e6ef0d6614829781f17c9c1a43f7ca9243","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwAiKyiMibQTES8wggLYAjMhV7r2YFWq069zWkY3bS3SydIAdMO3VYIpNNNmUQUCCIREEAAxGSheZl4FViVeTWYRAGsIsHD+dzR8XgNeTJg9HOZUs1peUiKAcxgAOh80ZgrA5GQQDjBEn3w0NCw4RAB6foArOABaNAgZRPY0arg0QSgJdRh66tgifsFxVjh+9WZM/vTZaq71VhAAXSuqeeYPJABOKlYYMArMpAAWKnrSKoMIInKA+Nq4RAABioInwDwSNHIiCeAF8KOhsBCCMQyHU6EDWqteCJBKRSO80ABJVJ0OzWHz3R6IACsAA5Xu9PvgkABGABMfwegLwJLJFOpsFoYIMEIFIFh8LEuMQ3zRGJweEIJHIf3xIsk814rC4VJpFl43wZ/yBrLlbw+X2RgoBqzwxvmEro0rAEIAzDC4eUlUiAGxq6iYzU4nXUPVBN6eUXksCmyV03F3a2830vQkO7mIfnO4VBJPis3eiEhgOKxFISHhzAaoJajOx+hMNicHheOTRJTp0i6fSGVRWUwHc3Gay2Mf2JwuNweXs+PwBPChWQRKKKfLxJIpNIZLI5PIFKRFcKTsqVGp1BpNFptDpULo9PqDEbjSasaazeaLMsqzMOsMCbNs7C7Pshz4McYRnGgFzXLcICMkCPLMr8eZcj8xausCYSVkg1byoGCLKhhjaRi20Z4h28ZEmWKaelO44xmhvLMrm9o4YWcr/CW8qksmqZeq8MrETWQZ1ogfINuiEbNti2p0QSIgGp47qiealqZg86GstC2GOrmAn4a0JosURiAkQq0nKt8PJUUprYxjQ9GEomwnlmmc70npTJ8iGRk8Y6RbUEK5lMdp1m5nZ5FIvJ6pYq5qmdhwXB8CC8i7oOw4GHlJSDrO05kAurgZCuVBroEIRhNu/Z7gkySXtIHgnlIZ4joeJQ3h8d6Co0SDNK0BgvgQ3S9AMwxjBMUwzHMCxLBAKxrBsWw7HsBxHCCCFITcAVAnyADszIcvmuERS6BIgrFUkJZxzkpbRuoeQmxLecxZqDla+lIHyhnnbx4VmWpn0xeJPrPPdwb/UlinPSpr1qRpRqWd9Fq/UyvqQjyQMmXhBJaVZkMQnFZGwyqTkoepsB4IulXAL2vAogIpArbwADkAACAHLatzAzd+81oBtkFwJzADcThOO90UsbwAC8vCQtLoio8TZpKxaatOIMvAAHLMEQ7AVIc+TpKQADuDxQLomgQMIIgGBUESeGe7xQE48ta8r2U+5KvAANS8HjKu6JrkrcJLvD62HAq8P6Fq6EnfLVOnMtgPrRsm2bNBxM1NukHbcSO6ILtu7k+D5Gh3vgwrfthIwAd0Lwoyh7o0Jox6ZrR7H/Qd+Hg8J766e1FQAtIKA+LvHAEhgHgIwgCiKJAA="} -import { fold } from '@studiometa/js-toolkit/utils'; - -let currentIndex = 0; -const lastIndex = 4; - -// Navigate forward, bouncing at the end -currentIndex = fold(currentIndex + 1, 0, lastIndex); // 1, 2, 3, 4, 3, 2... - -// Navigate backward, bouncing at the start -currentIndex = fold(currentIndex - 1, 0, lastIndex); // 1, 0, 1, 2, 3... -``` - -### Sprite sheet scrubbing - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"e4d5290ec89d817bd7bc18663bcd1c721d11118fdf053eef33c10484d5a1a26a","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwAiKyiMibQTES8wggLYAjMhV7r2YFWq069zWkY3bS3SydIAdMO3VYIpNNNmUQUCCIREEAAxGSheZl4FViVeTWYRAGsIsHD+dzR8XgNeTJg9HOZUs1peUiKAcxgAOh80ZgrA5GQQDjBEn3w0NCw4RAB6foArOABaNAgZRPY0arg0QSgJdRh66tgifsFxVjh+9WZM/vTZaq71VhAAXSuqeeYPJABOKlYYMArMpAAWKnrSKoMIInKA+Nq4RAABioInwDwSNHIiCeAF8KOhsBCCMQyHU6ECQCJJPMBOUVgBhCDCNAqAAcPnuj0QADZoa13p98EgAIxs/6AvD8MkwSnUsEGCEAJhhcPKYlxLLRGJweEIJHIf3xeDennESTs1gZ/yB3IAzGy3h8vohftQHgKgnqOq8JUgAKwy+HypGo9HUTGqnEa6haoI63LsfWqKy4u7GnnfC0c622/mrPBO8VgCEewmyhEK7m+5VYtWxkP0bWrCNR4yGuMPE1u7mvZNcm1/e3px2R52tV2IXOwr2IpDmpX+lVBMvBmiVoJEsAkoXMFYG8uMk0Adml7Kt7dzaYJK5WWYhzM9ctHiFpE8wU+x6rx85ALA4XD4IPkimU0fsun0Qw/2sADzHXGxwKcFw3A8LxQSoPwAjwUJZAiKIfziBJkiKNIMiyHI8gKKQcJKMpKhqOoGiaFo2j7Loej6QYRnGSZWGmWZ5kWZZVmYdYYE2bZ2F2fZDnwY4wjONALmuW4QE3HlaSTfcfk7AFuxAEEzyQC88xHQtmTvANpyDZ8CXDJ1wKNRsFNzS1ORUu01IJTMXWzbTLwLJFJW5QyHxnUy8EXZdhVFMAaV4ekGyZItbTs61eVUh0NJCqkwq0lkPO9MdIRRWSiVgPBoIyXhgDg3gUVJCB1F4AByAABTiliqnjhjGCYphmLYdjgGqAG4nCcILPBPEVUs8ABeCL+rAJxBl4AB5OARCE1hDnyTJSCpCoshGvpeEhXhACTCXgtyO/azq3QAyAicdJSF4RhzN7XhJshXqa2SAAeXhJVe97eAAakm7k+GAJxeF4IbSVXfJJq/J1dGhKGKTG3hRl4YG3rmxGW14S7dC3XQL1xhHdG5a6wBRHwVnqJBQHxd44AkMA8BGEAURRIA="} -import { fold } from '@studiometa/js-toolkit/utils'; - -const frameCount = 8; - -// Oscillate through frames: 0 → 7 → 0 → 7… -for (let tick = 0; tick < 20; tick += 1) { - const frame = fold(tick, 0, frameCount - 1); // 0, 1, …, 7, 6, …, 0, 1… -} -``` diff --git a/packages/docs/utils/math/inertiaFinalValue.md b/packages/docs/utils/math/inertiaFinalValue.md deleted file mode 100644 index 51bbd870d..000000000 --- a/packages/docs/utils/math/inertiaFinalValue.md +++ /dev/null @@ -1,23 +0,0 @@ -# inertiaFinalValue - -Calculate the final value for an inertia effect given inital value and velocity. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"409e2e8b33d6de933af02f49e20066818b46e7e008f26b5e160086a7963ef7f9","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvdmDLjmAMRlsAam0ExGM9vNZrWGxLzCCAtgCMyFaWB2dWAERis0zIyYtXeUZqawLmMQhSAH53M0tSbnDPUgAdWz9gtBs5TiUwVXVcKigIEQREEABxGBS0fBgBZVZvXxwoXiJsgWDeZl4Ac3YSKX5AtGCAOkpqZk7C5GQQLGZSX1HtXX0NXgAVSurM2uaDGBGAXQpp2fnTRdtdJxcOjaqRQVJSGDAU3Y1D45m5hdz6gKCpHWmzgOBgjUGvGegXwvAqVVcpE6ZSa2WssH6ghccDhEF4AAMAAxDAAcAFZ8Z9ps80I8wAgqHdjHQ3tkqSAOGAANajfBoNBYOCIAD0woAVnAALSDCCsLk6IZwWlQCSmMrMIawIjCwTiVhwYWmZgVYUyNKKGorfZ80ysEAHI4gJVzBiIACcVFYL06FSQAEYAOxURHI10gM2keQZLJ7Uac3CIQlUET4H5iMhIN0AXwo6GwCYIxAzwZZTDYnB4qUj6Ut2S0l3sVpikWsS3s11cza8Pj8AMGoS7UUHCXYSUjVajtdjuXyhRKKPhWzYdT84NRe1aQI63V6AgGw1GrgmSCm3zOFzsMdWTP4NXXH3tX1Ov3DDbYHdumweTxerL27Ofc4/l7fcgSZUEYDXSFoRTOFNhDFF3hgdEYExbFcQJYlyUpR9qTKOkGRAJlZHoe99lwjkZB5Kg+QFIVRQlaUIFleU0EVZVVXVTUYG1XV2H1Q1jXwU1ZGrC1titIYbTtB0qGdSMkAANiDDlvV9RBA2DOZQzwCNJwk7I4zNJAACZk1TeZ03IRMczzHA8EIEhyBLegyw4Lg+D0msDL2etLz0bJB1bN9HGcTtjAibt/lAsIItiaI4siEcxxSLzxKvHIQDyAo8FKcpNlvbYVwaMjN3aLoehePdARGLTjxQE4fiA19/KtYEqkK5ckIApqLyuMLP3uR5nleMievPYD/FA9reAgqC8Rg2FFwQv8NBQtC0BxSEiVJCl2RpAjRmIlkxoozlqIIflBRFcUpRlOUFSVQQVQgNVXG43i9QNI0TTS6MAv/aT7UdeTXTdABmT01Pwf0VJW3TRP0jKjNkJBIZAFM0xoazCSzR0RGgAtRywZJeGACdvIy3gswEUhXt4AByAABJ6Xre5hbqYlidB1L6GYAbgSEdEcpgGNEYJNeD9QluEF2wRfSsXNEl6XrGJMlZdGdmkFAFkXjgCQwDwCUQCzLMgA"} -import { inertiaFinalValue } from '@studiometa/js-toolkit/utils'; - -inertiaFinalValue(0, 10); -inertiaFinalValue(0, 10, 0.5); -``` - -### Parameters - -- `initialValue` (`number`): The initial value. -- `initialDelta` (`number`): The velocity. -- `dampFactor?` (`number`): The speed to reach the target value, defaults to `0.85`. - -### Return value - -- `number`: the final value of the inertia logic diff --git a/packages/docs/utils/math/lerp.md b/packages/docs/utils/math/lerp.md deleted file mode 100644 index 6db3fcda3..000000000 --- a/packages/docs/utils/math/lerp.md +++ /dev/null @@ -1,22 +0,0 @@ -# lerp - -Interpolate a ratio between a given interval. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"cdbc493a131354bb999ec0b36d2f1214802746ec64ed2a8346eb119435e86b00","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvVmSyMAtuzCJeYQfIBGZCr3nNaKtZu29SzcREPqtpbleOkAOmHbysEUmmmzKIKBBEERBAASTAaUndWcxheNHxYswteLTQAdxgYKWZeAHN2EiklCKI2ADpfNGZcoORkECxmM3lfRSkAFQTeYrJS1l0lV3VePsEYCoBdCnrG5tb9Xk7YpRJSPt19IfkRtjHJ6Yam5haqJIlFrrOIOOvcmDR9+tJ7wVIwXyWd1jGU+4ysgbZMBQDa0XgiDzPODuYFKXI3UzmCSPEAcMAAa18+DQaCwcEQAHoCQArOAAWjQEAgrHR7AecDQgigEnk92YZVgRAJgnErDgBL08QJMkiZWx8lYIAmUxADKaDEQAE4qDIwLl4kgACxUKqkO4K1E+FVKXCIAAMVBE+COYjISEVAF8KOhsKaCMQ7Tq6AaWBwuHwRXI2vYbDo9AZVNYTFcQ2Q7JGHM5XO5PN5Ir5/IE8GEIlEYnFLkjrql/tk8gUAT01uVKtVajMjicQG0Lstwr02ICtl89lKDrNjvMwZ8Vh3+uHu6Nxn2G3NTkXW4jkpS8vcUc9GW8Pl0p790pkpC3mMDQeDIfAYcy1Qirii0ZiqNjcfiiaSKVSaXSygymSy2RyYC5Hl2D5AVzHwYVZDFNAJSlGU5U8JAAFZtUNNUNUQVDdX1PBA18NFTQAJkta0zFtchzQdGUIVgPBkw8LxgDTLBeAdARSAgbYAHIAAEf2ZTi2RJclKWpWk0G5Xk4C4gBuZxnEDRgLV4ABGZSzTKJDuBk3giV4JDWjZJBQG9LI4Akd5glJEAHQdIA==="} -import { lerp } from '@studiometa/js-toolkit/utils'; - -lerp(0, 10, 0.5); // 5 -``` - -### Parameters - -- `min` (`number`): The interval minimum value. -- `max` (`number`): The interval maximum value. -- `ratio` (`number`): The ratio to get. - -### Return value - -- `number`: The lerped value diff --git a/packages/docs/utils/math/map.md b/packages/docs/utils/math/map.md deleted file mode 100644 index 4209e8e40..000000000 --- a/packages/docs/utils/math/map.md +++ /dev/null @@ -1,24 +0,0 @@ -# map - -Map a value from one interval to another. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"4d3c315265458a8034f345a2e5b2e26328df60322bb2b8ce861819c98cf7e06e","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvALbMsjIm0ExEvMIOkAjMhV7swWQWgCy+1eq069Bo8ea1zG7aV0Qjhk2bVOrbtB7sHb0tSbkcQgB0wdmksCFI0GTlKECgIEQREEDssOF40fBheRVZlAVIIaV5JItJmMABzIoh+XmR9AP0AOi6O23sAXXyIXnqIArJeOsbm1uQ/TrAehf7aAa6UtGYGzORkECxmOukUkrKAFULipSK0EdksDYGKfcPjlL7PKUuiz4ByPLSfQxDTXUowJ4vA5HZgnKifQK8H7WDwApK0EFVM4QkDPV4wuEgFZfJFXYlooHRaSg7GQ/HvKjExHI8mA+yYsHKOkgUgwNCCUhgFLIz6cooPHBQYb5MnuIxTepNbkcMAAaxS+DQ/jgiAA9LqAFZwAC0dwgrFV7DQXTg/KgEmkfOYXVgRF1RnYrDgutkBR9ci6mukrFxzxAtqODEQAE4qKwYI0CkgAMxULakJpRkAPFIq3CIAAMVBE+BhYjISGjAF8KOhsPmCMQK2m6FmWBwuHwHgobuFnLoEV4LP2Uas+745V9xy5qpPAtOwsFnFEYnEEkksCk0hk8Dk8hMxeVKtUwLVFbM2oOlr0bCZBtKxhNSAqZtU5kzul0mYMNmntrt6VhU4blJIpsWlB5uTeID4VvUxviuf5AWBaksRuKCCQ+OD7FA0c0ApdlULFDCGSJOd9Fw1kZBQml0NxKFoMJb9aEoycCIxIjaXo/ZeX5QVhUQ29DwlGApTuGVmknF8lW4kAVXVKhNW1PVDRNM0LStG07QdJ0XRgN0PS9f0/UgoMQwGMMIwSJAAFZUzkhMGiTRB7PTTM8BzON9HzAAmYtSzqctyELKswxEaAG1XeJEmADdeCrI8qj+AABW1BHtSonVU00IHNS00HdcQvT+ABuKIom7GzdCLXgAEYapqnyC24EreH1OqCxSR0tiQUBWwTOAJCFLIjRAKsqyAA"} -import { map } from '@studiometa/js-toolkit/utils'; - -map(5, 0, 10, 0, 20); // 10 -``` - -### Parameters - -- `value` (`number`): The value to map. -- `inputMin` (`number`): The input's minimum value. -- `inputMax` (`number`): The input's maximum value. -- `outputMin` (`number`): The output's minimum value. -- `outputMax` (`number`): The output's maximum value. - -### Return value - -- `number`: The input value mapped to the output range. diff --git a/packages/docs/utils/math/mean.md b/packages/docs/utils/math/mean.md deleted file mode 100644 index e43da3271..000000000 --- a/packages/docs/utils/math/mean.md +++ /dev/null @@ -1,22 +0,0 @@ -# mean - -Get the mean value from an array of numbers. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"afb2014ad3260a9cbdd9e9b3fc9500875239b742bf51757421030b1cdaf0c029","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvALYxmYRmEHSARmTiJeS1WWQBdbpu1rSAHTDtpWCKTQy5YStWYBzBCmQgOYANZP8aGhYGgD0IQBWcAC0aBAQrD7saAB0cGiCUBKyaMzJsEQhguKscCHSzGj4ZQ7JAdKsIHp6VGnMtkgAnFSsMGAulUgALFQ5pC4wDIggsvJO3riIAAxUIvhtzGJknQC+FOjYCwTEWyN0kyAsHFx8MwrG6kbKJvqGWk9k5pbWtvazI67uZCebx+KgBIKhCLRWLxRIpNIZLITXL5QrFUrlSrVeS1ND1RrNECtdqIACswy8vX6+CG/zGEzwtzm7DACwATCs1qQNjRyEtdvscHhCCRyKd6Ew2JweL87u9SBo3jpSC9HsrPlYbHYmf83EggV4WaCCIFgogwpEYnEEklUulMhBsiiYAUiuwSmUKlVbrj8U0WqNJgB2IPdKkDRAU0bjc46w2spAAZk5602fMWAuoB2FxzF1DOkquMtuinlivuKoMapMGu+2ocThyeo88eN4LNFuh1rhdsRjuReRdaPdGK92LAvoa/qJgaQAEZFhzKX0I1G2jHGQ3uiyFhTVqneUgM4SRNBDl8tbxgLLeNsBKRHbwAOQAAQRDqdUKtsKSw5KT4AbnMcwS2QUkKF4ZZeAXAwAN4MJeFJECHEYZA2SgqCYO4OCEIXZD5FQqIFwgzDFlg+CQkgpwnSQUAzl6OAJEcKZIhAbZtiAA=="} -import { mean } from '@studiometa/js-toolkit/utils'; - -mean([5, 0, 10]); // 5 -mean([20, 0, 10]); // 10 -mean([-10, 0, 10]); // 0 -``` - -### Parameters - -- `numbers` (`number[]`): The original values. - -### Return value - -- `number`: The mean number. diff --git a/packages/docs/utils/math/round.md b/packages/docs/utils/math/round.md deleted file mode 100644 index 169dd30f7..000000000 --- a/packages/docs/utils/math/round.md +++ /dev/null @@ -1,22 +0,0 @@ -# round - -Round a number to the given decimals. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"e40ac159dbb196c40ed3b374aa84396e4e8817c0a1dc00275c08b3b71af52988","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvUhGFRGRNoJiJeYQQFsARmQq9YI9hrZwA/KvXay3C5p2kAOmCNYIpNNNlgolEFAgiCIggAEpeULzMvIqsyrwA7uxo+JG8AObsJFKW9rwQ/PowhsascAB0vmjMaUHIyCBYzKTMGr4xcQAq+DBqdmS8aBCechUAuhT1jc2tVAZGJrxdPTn9+YXFC4O8ANYwMFhjEyCkMGiCpGC+AILD3jARK6QDQ8k9GVnr86W8rDBgaclDvUOGBtr58Gg0Fg4IgAPSwgBWcAAtIMIKxtkkynAzlAJBpTswyrAiLDBOJSrDjMlYTIRhCNKwQKNxiAcU0GIgAJxUX7/ZJIACsVCqpDSpzwdO8vhBuEQAAYqCJ8E1mGIyEguQBfCjobBygjEDUiuickAsDhcPhS+TtFS9KykPRzEpmWyOmwO+xOFxuDw23z+QJ4MJyVJ2hJJFJRd5/L2rAoukwVEXVWqTVUzEARpbxp5bG1AhqZwNFL5wRbdPN5RNl13PHZ7A7Mo4nM4Xa63WAPPr5l5V2NSJPfPkA/BFkFgqgQqEw+FI1EQdGYtDY3H4wnEmCk8nsSnU/C08JlBlMllUdnuIXCkCjgWIG+i8VmgO89hgOUAJiVKua6vICo6nqOB4IQJDkCa9BMGwnA8F2ChKPajzOnWJjmHmnqPD6GiuO4XaBgEQShOE4aIZGySpIO1ZrMO5SVGmSB1MW0xtGRuaPA2hYthmLGzKh3zsb2NafPWWy7PsRZtuclxUDcNr3NWWyvOkmRxrRPx/GOE7vlOBCQtCcKIiiaIYliOKCHiEAElUW47hScBUswNKFqezKspenIAOwACy8pp96Pk0z6SuEMrvnKADMP6qv+SDylqrIiNABq+nhwBdrwWoCDIGi8AA5AAAuZlnWcwRmLsuSRkvZeUANxOE4NqMAAjPKZSCtwtW8PCvCtY14QtW1greQAbHon6dd1sK9UNgq+KVSCgKafxwBIlzBEiIBalqQA"} -import { round } from '@studiometa/js-toolkit/utils'; - -round(10.5); // 10 -round(10.546, 2); // 10.55 -``` - -### Parameters - -- `value` (`number`): The value to round. -- `decimals?` (`number`): The number of decimals to round to, defaults to `0`. - -### Return value - -- `number`: The rounded number. diff --git a/packages/docs/utils/math/smoothTo.md b/packages/docs/utils/math/smoothTo.md deleted file mode 100644 index bb854bebe..000000000 --- a/packages/docs/utils/math/smoothTo.md +++ /dev/null @@ -1,168 +0,0 @@ -# smoothTo - -Create a smoothing function to smooth transitions between values using damping or spring physics. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"437851935af8d36ee37b2c90dd4d5d44f7b6d46e29a685e62d50ee645b4fd0af","data":"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"} -import { smoothTo } from '@studiometa/js-toolkit/utils'; - -const x = smoothTo(0); -x.subscribe((value) => console.log(value)); -x(100); // Smoothly transition from 0 to 100 -``` - -### Parameters - -- `start` (`number`): The initial value, defaults to `0` -- `options` (`SmoothToOptions`): Configuration options - -### Options - -- `damping` (`number`): Damping factor, the smaller the smoother, defaults to `0.6` -- `precision` (`number`): Precision used to decide when the smoothing should end, defaults to `1 / 1e8` -- `spring` (`boolean`): Enable spring physics, defaults to `true` if `stiffness` or `mass` is set, `false` otherwise -- `stiffness` (`number`): Stiffness factor for spring physics, the higher the stiffer, defaults to `0.1` -- `mass` (`number`): Mass factor when spring is enabled, the higher the heavier, defaults to `1` - -### Return value - -The `smoothTo` function returns a function with the following methods: - -#### `smooth(newValue)` - -Call the function with a new value to start transitioning to it, or without arguments to get the current smoothed value. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"f2f49e52c14c3288fbc79f3ab59dde700170411c9a5900a8b4ee8d5b116fba8e","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvOAFsIENPgAqERnDTNSaAPyJeYQTIBGZCrwhZxkuLt4BlOQuUQA8pYlgee4AB0pvAMYwGAB3ADU2QRhbA2Mybj1Yk1IAbj8AgLhBIzgRUnYTPUZ+MCKiSJhEw2S+AF4APl5mMAw6xsY23iN5VhhmtP8A4SycvILK3mLSyfLWKKq40k7m1t4Grp6+sAGM3lJmEI6F5J2M5igoRlnj+JvU9IyoZhksdjAAcyu2GOrb/V/7oNeFhSDAROw4B4vqwfosEv9FqdMuJ+CV4HBobCanckdIQW9PrNbN0IL1mvCSWTtn4AL5+dgvCBaaSORQqSggKAQEQIRAgADCoOYNCaLPkigJAmEYg8vEUwt4IXYrFYYqcrAwcpCMBgUhMaG1uq1EF4syicAAdByNO9echkCAsJpnhz1Jo0LwlPgYLw3uxxGxTRUrQBdCgOp37GQcixWTy8NxxuACJly71y/aef0eUPhkAcMAAaw5+DQaCwcEQAHoqwArOAAWjQPUL/ot6kEUAkMhgGgtsCIVcE4lYcCrMmF+CrsnFzgtpZkrBAYYddGeWF6HIABjv634RNYPbQ1mq2aoAAzcAa0dvZXL5EyMaFRToHzykmAW1gQQkVbhXvxaEYABGc9LxSXga14c8LWAvwdy3ZcwxAN0tCQABOKheg+RQkAADioDRSHeXs8BnJx2Swt5cEQc8qBEfBnTEMgMJpCh0GwGiCGIFjCLoBg+TfdRT3wbwHkCYJwgqLE/iSMhcRGe9xiKEoygqO5lhaToOjWRpKS2XFhjvMZCkmVSZnUhEal0potJs/T+nEvYDiOKz5Kc85LmuNylhxJynheAlMQ0vygRBMEIShIkQp8hSUTROAMWinz4TkwFdjgfEPmCjYP3JPQHOpMAaVdIiBIANgAFiw3V3lwxBysIzQSIElDWXwDkCxogAmejGP2ZjyAatiOJwPBCBIcg+PoJg2E4HgRJUNQypk0gzFjDwbD0BxZxURNNvhXwgSCUIIjmaIYrShTjIfCYpjU86NJslZtM6QrDM8G7lLM6ZnwmNLNNWdZ3qc/ZDlSgFcU86FLsh/z1yC5KAdC3ZwvBSFJBy5HYqc9R2FRYJEqxgEIcRXGst/GECs2fLcqpAY6TABksCZD1yLPDkuR5PBBT6EVmBEyUhFEOM0wVJUVREjUtR1PVe0NKQDRNM14CtJrbSQe1HWdaMqFQj0vR9P0A1VFXcwjHWY3cawE2t+N+FTRQfTQTNITjc38zeYsqFLctKxresmxbNsOy7CAez7AchxHMcJ0Uad2pUec0EXZc8zXF5NyoBC91EQ9eGPWpFovACwBvRSTJgJ8VdfawPy/H8/v/a8QLAq9IKraDYPgnckL1sqkAAdgAZhqnCOsQAjqGa0i+XZ5xOuopBepABimJoIbgIAVhG6hOPGnipuofi8CEtn2qKSSzqiVbOjSznuV5EAAFUsCeEUnaDc7fX4UVI2eXsZBfTJneOwEgYAzAtTTD6FWP99Amn/hHIBEJeCgPAWrFCA9J6NXzLVeqOCiItTIu1RewQkCj1Xv1Zgg0kDnl3pgMafIJq8WPjNPkYAAGZWoT6ISH4/DlFILwXhvQ9D8jrlnTkj88CG14FuYRMAty8DkFAQQvRgSkGIOwWAyYBaQkzj6WARhBDvFAR8IR4jnaMQ9CgvRypNByhNE7PwAApZg5Q7BjEsOY98aiexryZrIdRmjYBQC6JqbURgugaJCHAMglo/B+Bkco1RPo6Asy0MmJWeIIr8HYCIcxjJghgDQJWBJYAABUvAACCsixE+IUUI1gXBkxKkUEo3shAoDJiyAxJoyY5EWIbp8bgW4zADPqRaMgGjSAdEUc0UJ4y4D1xCJoMAsyxYehEM0LoPpBCxNCc2RU+QP4mhWLwAActAT89ZpAuz6DIC0fhKk1PeN+IwgZFkfkUW8N0ogeGSFye8QQoIDkmhCMc52JpkBbhBNydE7Y0BcmHFuEMjBfYVmrFWSAsB6wWiZO8KsXMxxNJoOoBsRBurdQtLQKszBXhVlhSIeFC5WAAGJGXonUEitAfB5l+GhRyxKCLYCkFICitFZYMU1mxTAXF+LCWPyrCS+AaByWUupbS+lgrLQsvZRopliUuVTO4BaT06ZXkQHeaqT5vRFFbLlrwPZMBQmtMIMOX0jItCSk/luGViB5GKOSb0R5YA/AAH1ynlIAOqrIJJGsNegZEWqtd4pZajLW1jBGgAA5MmCOnSdGgn0DAf03pBFCQhDQYpGo/BwAwKIfAGjIB7N4BwQslifRGGibEwRVSAAKABJTJ3pNSglicYXoZhICCM0B2zUFb1C6jQDWjhdaG1NogC2ttPo2CqicEAy5sALQ3PUEKGQlp7A6mgbwaFkARSSCCQa5MA6qwuHFei/2WKrlyuIgqnkSrhQqrVVSmldL2AMv1cylObLmANjvTABskgGzaobBIPgDtSB+DkEWt4GG445jKQAUVoOuNRezvXmreR8gNiAyk5zgPuQZ35PjZu9CqMFTJWBQGzaXKCfb8jFMrLwNj35FScagGYQ5XLN1oEYxM5jjBWMwHY7wAApHAbNZhs0hHEzxgYfGBMlL0CJjjpAuOSZNNJ4ccm02fimUyE6IReCEdFQ57NUbCAWDgGYJZ+bJTvNCYxLAOBgjcebn4AzbwSm8Hs4InsiVmAkVsqEt0IhCwZm4Q425IrSC0bAFBAILnpl6A8/ICsPnw4dP8+cYTdKQvOoi53XYCpkAwFmCGRAW9EDb0a7sJoHoPH5EsBaUgwgB1gC9BCOpNB6CTD9UQGQ3Xh7dW63hbgvXmsehcEYTNYgRtjYm/gKbkgZseiCFcxAC3EDD3POha7a2NtnA9H6qLZAOGsAg3CxKVY6BgmHB4RAg9B7dfQo9gILW2tsBDA2cFdWyANUQJSsH/WYuzEG+wLx53YCIFe6Qd7n2n0/doH9uMgPyoNUvMjhUL3ilvbYOOZgbwfuzDDaegkiPh7XbKWffQACTzueVKqAASpan5khs0DHkRaFZePGBbgACLNBIoIgAJMADhPYaQAEJeCK4+GQLXW5eOd341FoTevle8CjYL3gIujBi7ADri3BuLPZamT3LcRGSP6MdZCMxPq6m2btU0xKeWPe5x5zJk8LU7B3OeHYSrhBwaS/zlM6PvZY9noTz2JPHQU+eA9DIDAgePwnkkqm+uJfeiMBk2YY1AwsPF6Y43JTKmdNmbC/pk3hmhMmbEx313MnG9V8/Ap1von1Oad4Np3TxveCm8E8Z5Ton2/may0PsAReR+TNczM8vRW3Ola8xVvzZiAu1eC7qZ1PG58L6Mzeg/uWreefK9ISrEoz81aC/VqAYYsvu9DTzgL15x7H52t0ljtwdwl2H0GRlzWQVyVyATVw1xgG1110QNIEN1vx7z0Gd0EXAOF1F3fEd3QP10wNdwAIQmtESztAdFiVwCoGQCWWBSZVRQ/UxVAUUGyAtAPBkC/RxTHBlSrCMDeSrApRAyVQKCrCl3rG4D7kwXdCQGAm6hwWwjqgnkHiamIlnlXgsVIRomqkoXXhYlonoX3iYUPmtBPj5EYHzWgD4G3wU3izgESwulsgwDMAtC8I2kkDYD7R1iExWGQBDHhCIAgC0UmAAGpgJzBJpvxzg5CqAiU8A79MkTQtwrM0BFFXVi0QgupTUABZVRcQDcHdYiQwJdZMe1HZYEZpZ1MwHIpxMAXJUgYSJ1UJLga9fECcUgTUZw1w5LJoSWTybMXw1UdovpaQO8cQNAf7SQfhCobpBkOxQRQ5AVQzfgRgYeEZNgyVTFCcMAQePFX9AsQQGlA45DVw2OZoYeCDKLfgC0YeZORcdbNZT+ZqCowTJoItXdWoxKZ1LLaFf7VgC0PDYUWZXYv2TFGVH9AlIlADUlVVcQjVMDaOZUZ4tlYEsEtAbEhsZqHgE1OjXcBjIA4SA8YQD0IuLefPWzIZRTck4pPQVTbjMwBknlLvefHA8xCkvQLeV3TImzeuMfNkxAKfNk7As3PQEU3gPkrLAUsABCMpOwK9IEkcUEpkOOCEiVKE6Vb9S0eVeE5VMlZE0DelYEjE1lLEjU4UXE/E9DVMbDI2Zo6092agjWFAOgt4JlDkIgGCYCWCMCeQ/WJQ4eQwtQ+qChQhHQ5jfQpAQwteAaDefCMwxhbiSaKwthXQ4A+eS+U6aSJ6dYe+JIqRPkV+d+DtL+KIOBAWRBQBQRFBNBXUSBXsa9WBfGeBWoqMOs4BVBMBXUDBYMpbKecMieAhGeVqeeWMxAeMqhGhbrbqGkZCA8WAPAZmVmXgYAYuXgGkAQDRGQafAAAVDm7F7GYDrEbGbFJFbDQDRNHGgMAJ53nhPHniWnAlrXalbnAg7nsDKgyyzFFkOVAnPEFODQU3ng6HbiggAHEWyRBgVQRikRIASVYOQI5mAkBQB+JdQMYwA8B6wQAaQaQgA==="} -import { smoothTo } from '@studiometa/js-toolkit/utils'; - -const smooth = smoothTo(0); -smooth(100); // Start transition to 100 -console.log(smooth()); // Get current smoothed value -``` - -### `add(value)` - -Add the given value to the current raw value. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"930ef4a3f3144977c2342b8c3536d6e35bf5aba5ce3eed36382506aec2b2fcd0","data":"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"} -import { smoothTo } from '@studiometa/js-toolkit/utils'; - -const smooth = smoothTo(0); -smooth.add(10); // Add 10 -console.log(smooth.raw()); // 10 -smooth.add(-2); // Substract 2 -console.log(smooth.raw()); // 8 -``` - -#### `subscribe(callback)` - -Subscribe a callback to value updates. Returns an unsubscribe function. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"357f5d4f6d8c175289de776aa4c5e55d7dbe710f91f104039f5b650ecc707f2b","data":"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"} -import { smoothTo } from '@studiometa/js-toolkit/utils'; - -const smooth = smoothTo(0); -const unsubscribe = smooth.subscribe((value) => { - console.log('New value:', value); -}); - -// Later... -unsubscribe(); -``` - -#### `unsubscribe(callback)` - -Unsubscribe a specific callback from value updates. - -#### `raw()` - -Get the raw target value (not the smoothed value). - -#### `damping(value?)` - -Get or set the damping factor. - -#### `precision(value?)` - -Get or set the precision. - -#### `stiffness(value?)` - -Get or set the stiffness factor. - -#### `spring(value?)` - -Get or set the spring option. - -### Types - -```ts -type SmoothToOptions = Partial<{ - damping: number; - precision: number; - spring: boolean; - stiffness: number; - mass: number; -}>; - -interface SmoothToFunction { - (newValue?: number): number; - subscribe: (fn: (value: number) => any) => () => boolean; - unsubscribe: (fn: (value: number) => any) => boolean; - raw: () => number; - damping: (val?: number) => number; - precision: (val?: number) => number; - stiffness: (val?: number) => number; - spring: (val?: boolean) => boolean; -} - -function smoothTo( - start?: number, - options?: SmoothToOptions, -): SmoothToFunction; -``` - -## Examples - -### Basic damping - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"b148c3780b8cd90bb77478622d0396b715f064b2cf70b53d02c3419a116b8731","data":"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"} -import { smoothTo } from '@studiometa/js-toolkit/utils'; - -const position = smoothTo(0, { damping: 0.1 }); - -position.subscribe((value) => { - // Called on each frame during the transition - element.style.transform = `translateX(${value}px)`; -}); - -// Start transition to 300 -position(300); -``` - -### Spring physics - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"f9b89c23f67f3449961fb0b0d096a820ed72492b45205634e86e1814c3b6df86","data":"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"} -import { smoothTo } from '@studiometa/js-toolkit/utils'; - -const springValue = smoothTo(0, { - spring: true, - stiffness: 0.2, - damping: 0.8, - mass: 1.5, -}); - -springValue.subscribe((value) => { - element.style.scale = value; -}); - -// Animate to 1 with spring physics -springValue(1); -``` diff --git a/packages/docs/utils/math/spring.md b/packages/docs/utils/math/spring.md deleted file mode 100644 index 0e1d9902c..000000000 --- a/packages/docs/utils/math/spring.md +++ /dev/null @@ -1,94 +0,0 @@ -# spring - -Get the next spring value using velocity and spring physics. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"e3d1d4f172b6cac8d320449f12e9eea1e88f5f28c9479e84aa135dc7a953cded","data":"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"} -import { spring } from '@studiometa/js-toolkit/utils'; - -let currentValue = 0; -let currentVelocity = 0; -const targetValue = 100; - -[currentValue, currentVelocity] = spring( - targetValue, - currentValue, - currentVelocity, - 0.1, // stiffness - 0.6, // damping - 1, // mass - 0.01, // precision -); - -console.log(currentValue, currentVelocity); -``` - -### Parameters - -- `targetValue` (`number`): The final value -- `currentValue` (`number`): The current value -- `currentVelocity` (`number`): The current velocity -- `stiffness` (`number`): The spring stiffness (or tension) factor, defaults to `0.1` -- `damping` (`number`): The damping factor (or friction) to reduce oscillation, defaults to `0.6` -- `mass` (`number`): The mass factor affecting acceleration, defaults to `1` -- `precision` (`number`): The precision used to calculate the latest value, defaults to `1/1e4` - -### Return value - -- `[number, number]`: A tuple containing the next value and velocity - -The function returns a tuple where: - -- First element: The next position value -- Second element: The next velocity (set to `0` when the target is reached) - -### Physics explanation - -The spring function simulates a spring-damper system where: - -- **Stiffness**: Controls how quickly the spring tries to reach the target (higher = faster, more rigid) -- **Damping**: Reduces oscillation and controls energy loss (higher = less bouncy) -- **Mass**: Affects how the object responds to forces (higher = slower acceleration, more inertia) -- **Precision**: Determines when the spring is considered "at rest" - -### Types - -```ts -function spring( - targetValue: number, - currentValue: number, - currentVelocity: number, - stiffness?: number, - damping?: number, - mass?: number, - precision?: number, -): [number, number]; -``` - -## Examples - -### Animation loop - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"9a33b3a12f983c873b6d9ca01d68521ca8ac592bd3018f68dbd5152eb23b3cde","data":"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"} -import { spring } from '@studiometa/js-toolkit/utils'; - -let position = 0; -let velocity = 0; -const target = 300; - -function animate() { - [position, velocity] = spring(target, position, velocity); - - element.style.transform = `translateX(${position}px)`; - - // Continue animating if not at target - if (position !== target) { - requestAnimationFrame(animate); - } -} - -animate(); -``` diff --git a/packages/docs/utils/math/wrap.md b/packages/docs/utils/math/wrap.md deleted file mode 100644 index 975b4032b..000000000 --- a/packages/docs/utils/math/wrap.md +++ /dev/null @@ -1,72 +0,0 @@ -# wrap - -Wrap a value within a specified range, creating a repeating cycle. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"cefdfaa43313d713b5d91cc42520dc61e6890b4bab7b26ebdc1bf3f8156c1e10","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO6lmWRkTaCYiXmEEBbAEZkKvTezBqNOvQea0TW3aW7WzpADph2mrBFJoZcrJRBQECIIiCAA6r68zLxKrCq8Rrxo+DAGicxgUBa0vHJgAOYwAHT+aMz5IcjIIBxgANb++GhoWHCIAPTtAFZwALRoEBCsdexoRXBoglASmjBlRbBE7YLirHDtmszJ7bLyRU2arCAAusdUE8xeSACcVKwwBclIACxUZaSFDKG7fndGuIgAAxUET4S7MMRkG4AXwo6GwAIIxChbzoXxALA4XD4P0UylU6hs5kMxkJjn0mysZNs9mpZBcbg8Xh88n8gWCeAi8iiMXxCSkyVSJKimWyuQyhRKb3KlWqtQaVCaLTanR6/UGw1G40m0wgs3mi2Wq3Wm22P32aEOJzOIAuV0QAFZXjUHvknohne9Pngfv5agCAEwgsFySHkIGw+E4PCEEjkVH0JhsTg8FkKWIqBy2ClGLPEyx5uyFhnuTzeX1UdkhcKRaIZ1KJQVpKQZLKU8UFYqlGVIKo1IwKgjNVodbp9AZDEZjCZTGZzZgLGBLFbsNYbLb4Ha+C1W07nd5fADszvuj3wL2lHzmPt8fv+SAAzMHwWGkIDI9QETHkfHqGik1iqa4vWhY5qSpjZtkha0hB9KuKWzIVgEQTVlyWA8vW/JJCkzYim2lgdpK3YVL2coDo0w4qmO6qTlqM66vqC6Giua6mpu5oHEce62geNwOncrrup6lzet8t5/GAALOqCL40OG742iI0CIoyZa8MAaa8NCAikHqvAAOQAAL0XOZTUROmpoEaq5wPpADcLguLi/G8MCvAPtwdm8J0vABk5viML0ACM+huR5Xk+X5YC4kFblhZ53ntLwQX+IxSCgGiDxwBIYB4D0IDQtCQA==="} -import { wrap } from '@studiometa/js-toolkit/utils'; - -wrap(5, 0, 3); // 2 -wrap(-1, 0, 3); // 2 -wrap(10, 0, 3); // 1 -``` - -### Parameters - -- `value` (`number`): The value to wrap -- `min` (`number`): The minimum value of the range -- `max` (`number`): The maximum value of the range - -### Return value - -- `number`: The wrapped value within the specified range - -### Behavior - -The `wrap` function ensures that: - -- Values above `max` wrap around to the beginning of the range -- Values below `min` wrap around to the end of the range -- If `min` equals `max`, the function returns `min` -- If the range is not finite (e.g. `max` is `Infinity`), the value is returned unchanged -- The result is always within `[min, max)` (inclusive of min, exclusive of max) - -### Types - -```ts -function wrap(value: number, min: number, max: number): number; -``` - -## Examples - -### Carousel/slider - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"661fb3df17df0bbf518a527d431be211ab92a4683af4fc777786157121f5e672","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO6lmWRkTaCYiXmEEBbAEZkKvTezBqNOvQea0TW3aW7WzpADph2mrBFJoZcrJRBQECIIiCAA6r68zLxKrCq8Rrxo+DAGicxgUBa0vHJgAOYwAHT+aMz5IcjIIBxgANb++GhoWHCIAPTtAFZwALRoEBCsdexoRXBoglASmjBlRbBE7YLirHDtmszJ7bLyRU2arCAAusdUE8xeSACcVKwwBclIACxUZaSFDKG7fndGuIgAAxUET4S7MMRkG4AXwo6GwAIIxChbzoXxqc14IkEpFIDzQAElMnQHLZ/BcrogAKwADjuD3yT0QAEYAExvS6fPDY3H4omwWj+WoA9kgUHgyHkRDPWHwnB4Qgkcio+jcyQTJIQMqsADKHFgbV4VPJ7y+NNF90e+CQzOZHI+czwA21evYBqF/yQAGYQWC5JKkAA2WXUBEK5HK6hovD3bw8vFgQnEqzqGwokAUr5s4EYq020XvLmheN85MesAAwO+iU0KWAkOYeWhRXpmiq0IsDhcPg/RTKVSpxz6QzGQe2YeWUlkexjsguNweLw+eT+QLBPAReRRGL9hJSZKpEdRTLZXIZQolDkVJBVGpGBpUJotNqdHr9QbDUbjSbTCCzeaLMsqzrJs2w/PsaCHCcZwZqaNpelS9J5tK9pFiAPzlpW1b+rWNpUg2YbNhGpTRqEsZYjiCZJgKU6RpmNrPDmlqMtaLIFpyjrFpRpYCphQbYRCuGIKy9ZwqGTZIkqJHtmK6reM6bCugaajGuccEsoGdq5ixNpaYWnHUFqin6vAfGIFWYp+oJULSsyBESS2kZtui5Elom/IkrOdHqayIlITpbGoQZbnUXQZm3JZNY2aJcqIo50nop2nA8MuCixCotHDkYmXZLRM6mLY87uJ43gYVQa4hOEkTROlqSJAeaRSBkWSbDkeQXqU5SVNUtQPgQzStB03R9AMQwjGMExTDMczMAsMBLCs7BrBsWz4DsvgQVBpxqZcXysgh/lMq81AceiZV3hWNwCQGLL4WJjZxcRKouZiIUeSmBXpvRwmMYdrFskF6JvWWfyXYgEXijhNkifZj1Sc9apgBqCm6iZhqqbBu1IKyml/bpgNOkZqNuqZoMAhDVk3c8dkwSI0CIguJW8MAqW8NCAikH+vAAOQAAKTb+/7MMN75jaMQFLXA3MANwuC4rnce5ya8AAvLwgKy6Icmai6aOq0amsuJ0vAAHLMEQ7D5FsqT8J40iXFALjAwK+u9s7dC8AA1Lwdrq/oKNKfA3DS7wxu++yvA+rwrx+z7RTx3LYDG2bFtWzQvDaBCdT26QjuiIroU5GrbsF+9vC9D7+jAjrxkkzwIfGzHUcR771fPPHl4gELSCgGiDxwBIYB4D0IDQtCQA"} -import { wrap } from '@studiometa/js-toolkit/utils'; - -let currentIndex = 0; -const totalSlides = 5; - -// Navigate forward -currentIndex = wrap(currentIndex + 1, 0, totalSlides); // 1, 2, 3, 4, 0, 1... - -// Navigate backward -currentIndex = wrap(currentIndex - 1, 0, totalSlides); // 4, 3, 2, 1, 0, 4... -``` - -### Angle wrapping - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"c10ed985a2c7f5a681ac729d9dcb38aae2234250e4d28168e0155932bd946d7d","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO6lmWRkTaCYiXmEEBbAEZkKvTezBqNOvQea0TW3aW7WzpADph2mrBFJoZcrJRBQECIIiCAA6r68zLxKrCq8Rrxo+DAGicxgUBa0vHJgAOYwAHT+aMz5IcjIIBxgANb++GhoWHCIAPTtAFZwALRoEBCsdexoRXBoglASmjBlRbBE7YLirHDtmszJ7bLyRU2arCAAusdUE8xeSACcVKwwBclIACxUZaSFDKG7fndGuIgAAxUET4S7MMRkG4AXwo6GwAIIxChbzoXxqcyiBXuDls/guV0Q11uGMe+CQAFY3pdPngMvl7v5agCAMwgsFySHkRDPWHwnB4Qgkcio+h4e7eek49Q2FEgAlfACMioATHcHvknogqdQaXM6djcH8wADXiBQeCuUhAXzqAjBciRdQ0Uw2JweD55IplKoZY59IZjH7bAHLLiyPZg2QXG4PF5Pb8AkEQuFItFYvFEslUoGsVlNjk8oUStSKkgqjUjA0qE0Wm1Oj1+oNhqNxpNphBZvNFstVutNtsfvs0IcTmd5e8lSrgaTNeSedSPvrvr4mf8XuzLTRuQAOW2YAWhIVymhi0ISrEM32mPHnSdIVU6+5kymL2mhKVGysmjfmjkQ7cHxZfd7SPR1Shdc9MU/cMnQVB9nh3dUX21N9lxAT81x/RAADZN05QCgRAw8kWFCCzwxSVDVg/F70QRUcMVZC51fXUl3RTDjQBAB2fCAKhIi4TtEjjydU90RYDguD4H5vTia9ZVIAMjFg0MrCjOxYJjdxPG8H5/ECYI8AieQohiH0EikbM0ikDJ80sXJ6WKUpykqapamrAhmlaDpuj6AYhhGMYJimGY5mYBYYCWFZ2DWDYtnwHZfGHUdTjvS4lRwklnxYhc2PfEB9K4pBeL/LcBL3ISD0RUTyPRC8YI02iMofbizRyrUdXeArOO/Hi+KtejgPHERoERWNdN4YAE14aEBFITteAAcgAARCjsu2YPym0C0Ze1iuAloAbhcFxOl4ABpGAYCwS97jgXhdDQaRrqkQE814FkcPe2B8lIa64BcBrDV4ABeXhngpQETrAT8wYTFhDX0YFPu+7gjt4c7rkBU7YZB8HekhmG4fB2TP2R/QvsBdHMfaT7FQpfxNqQUA0QeOAJDAPAehAaFoSAA=="} -import { wrap } from '@studiometa/js-toolkit/utils'; - -// Keep angles between 0 and 360 degrees -let angle = 450; -angle = wrap(angle, 0, 360); // 90 - -angle = -45; -angle = wrap(angle, 0, 360); // 315 -``` diff --git a/packages/docs/utils/memo.md b/packages/docs/utils/memo.md deleted file mode 100644 index b0530256a..000000000 --- a/packages/docs/utils/memo.md +++ /dev/null @@ -1,28 +0,0 @@ -# memo - -Like the [`memoize` function](./memoize.html), but simpler and smaller. - -The cache key will be generated by joining all the args together and the cache will never expire. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"7fd24da9c6003f3fe51275967046a14cb9b952bfa117d3ac64dafdf3a1b3e419","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvALYxpEADwAVXnRpgocXowB0e5qQDmcRL2EBrSAHcwyALp8AvAD4zYSxBvPG/MKaXc/gA6YOzSWBCkaDJyEJQgUBAiCIggALKx7ABeMLxo+Lmk8IKs0RD8vMwCwmISUlbs+ZW8cOxghqy5BoaCsmDRbbD8bY0wrBg6IUr47Fqzza3hnaS8YVidfWjM4pK85XkFvAAGsvLZMEfVojtgOvFbxkjIyCAc7vH4aGhYJgD0vwArOAAWjQEAgrHMjR0cDQgigElkWx0sCIv0E4lYcF+pwgOk+0lYIDsdiosIMDEQAE4qJ12vkkAAWKhbIwwSkgXHxN64RAABioInwBmYYjISCpAF8KOhsLyCMRxSy1HghNc6rwCswiBgAGI1G4sUzMMAYCi8ABGxtNgUqpvi5KiSAAbABmWkwen4JAARnd1G67LwWp1+vVkm5bV5ACZBcLSKKaORqdLZThg4ryMr6EwsCKkWQ+MxrRgHazKQB2Cser2+lmBjnMSNgGNxkVi5PR12p6hyjMkLPUFWpRh5hMF0h8K120tk8tIAAcAtensMDMQPvrbI5FubrZAQvbSaQ0edPcw6dShAH92HIFH+fZhcqJbLFIlzJXtY3W8MQdSTa0lGSD+oeCYdhK559lema3jmAH2nO77Us6NZrt6iDVgG254EU6yirgQEtiBbbgceG4+lBl4Kje2Ycg+45PpOlqvkhToUbGX7oXW2F/jue4kQe8aJuKiDRhWVHyteSpDvBB6SLCMTyAAEjA2p6gadSmEaM7mtOJoYE4rgGW+7E+tGACsaHrj6WGsnxeC4qp6lhrUEZEbyqFCUeolnjKvbUdJg40HJLAcFwfC4goOkGXpJZGTO3i+Npxa6SxM4JQZtoxaacUZbwLgziEayRNEXJUIkyR4BkZw5AchTFKUewVFUapufUjT4AsbQdF0Ri9J6AwaDAwyhDQ4yTGA0zzPMVSLOsZCrEsciDdsGr7PkuQnJkOSXG1Nx3PWjwoC8bzmB8Xw/Ig/xAqC4KQtCsLwoi7LMCiMBohi7BYjisT4mghLEqSICOpSPqMlZXHrp+9n/pysQCYgXlgSJnZ+WmUmwXRqqabsIYaeGYA5Wa6VZaxIPzhuFnLnS3Ebv6sMcvjrk3IjyPCRBiCupR/kXpjtGyRyIgKWVsTOaGuN+NoqWxaTNoFcZiEU8hPrOlhtM2XZDaOWLakS4TiMLqRqNIHykrA8LsB4CVUS8MASkQLwkoCKQEDSLwADkAACT0Im7r2AiCYIQlCaDopicAewA3CEIT7RqzOSywel8MAIS8LwRRwqQUhvXhrAEYwvz8OCvyGCnMdgJKseiCLDviwT7UFQ7jCJ4T3CVyETl643hoeyXEAe+aHsWgYHsd7w/yWgY8RIk2iCgGonqtBGqRAiAkqSkAA==="} -import { memo } from '@studiometa/js-toolkit/utils'; - -function heavyFunction(a, b) { - return a.replace(/foo/g, b); -} - -const memoHeavyFunction = memo(heavyFunction); - -memoHeavyFunction('foo', 'bar'); // bar -``` - -### Parameters - -- `fn` (`Function`): the function to cache - -### Return value - -This function returns a new function which will cache the first function results. diff --git a/packages/docs/utils/memoize.md b/packages/docs/utils/memoize.md deleted file mode 100644 index fa2fa3997..000000000 --- a/packages/docs/utils/memoize.md +++ /dev/null @@ -1,27 +0,0 @@ -# memoize - -Memorize the output of a function in the memory cache. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"6888b90ca2c1d1e5f64bd1daf95a296a31bdcb2b387f8bc87d48e165100c7589","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvALYxpEdgC8YAHgAqvOjTBQ4vRgDojzUgHM4iXsIDWkAO5hkAXT4BeAHxWwtiA/eN+MEs1Cl5gGWZaAEFTGFCRZhF8GABpGAx4xOTQgF8AfksAWTkFZQB5LHFJOBUAJRg0QVIwNWxVNXd3bktDYzMLXgAFE2ZZGlIajrdPesbm1px1dwAdMHZpLAhSNBkSpVwqKAgRBEQQYvl93jRk3ghBNCwHu/5eZgFhMQkwA0pqZnMSGQyBAHG8f3waEeFgA9DCAFZwAC0aAgEFY1nYaAMcEaUAkY2YBlgRBhD3YrDgMNkl2UBkh0lYICcTiouJMDEQAE4qKwYGBTDckAB2KhoEyxTkgGmlA6g9hgXCIAAMVCSIzEZCQXJyFHQbTwhBI5DFWjwQlEVSkyWYRAwADFPlbGFgRtJLMwwBhurwwIJpAAjLVs8XbJAANnDvP5gvwSAAjABmMUShqGmC2h1O75/MFKgBMavwGvG2t1+pwhuIweoZrOLrdDTIfFdpFGHq9f3ZYcQAA5VaCY0LEABWFNmNNnVujXMKgtFktaxD5xPl6gGs5Gms0ehMadjZu8fcdjBd0Ocrm96MC4dj/4TqX72eKpDJkDqtua8jcteYSub6sTVrXd633JtSBbN0TzPDkE2VUVBxvONR3HSU8CfXk51fBdP1LRB417X8NwIQC/h3KURGqHYZX2KAAAkMztR1LW+Hp9wKN4vWmX1/SDIDu05eMV2vWMkHzeNUMnaU9mUejGKzFjJGfJUo3fYtcKXcMiP/EjjTIusQBYDguD4GjlBUBs23dTjvV4DweMDMh/ECNioJs7i/Uc0hQnCaRIhiOJeASJJUnSTIQtyDiLllCorRqTy+K6VyrI4z1bPshKyFWdZNm2XZaTlI4TjwaKrhuGA7geJ4dggV53gtL5JF+FNARQEEwWsCEoSwWEEWRVF0UxbFcUEfEIEJYkYFJclKWpGSYHpNBGWZVkQAEhMABYEL5JCRUkqUzLlPMIxwxI8MTZVtKVXTtwMhqrV4G0mOzSRLPbdzLEy/jzwTEc7x20T8LfUM0M3eTmMasBlJOtTF2/RNCL1dcdK3IDyLwSiwFxfLZTkzMIatZLRlSri7M8L6YJ7eNhULRDAfE/a8EOvHnsUqHMJfPtTq/JBLtWyjYDwHKth2Xz5t4HIBFIcbeAAcgAARGsbCT6lE0QxLEyXESlZYAblWVZ7u+R7wZesA3ukPhgFWXheFIBomikfdeAAKhdo83X1sAcgN0QqJx2iGPxs27ID5RGCehTIe4L3VmZoPWchxh8xj3g4V4Da/kJJBQC0fk4BzM5ERAHIciAA=="} -import { memoize } from '@studiometa/js-toolkit/utils'; - -function heavyFunction(param) { - return param ** param; -} - -const memoizedHeavyFunction = memoize(heavyFunction); - -memoizedHeavyFunction(2); // 4 -``` - -### Parameters - -- `fn` (`Function`): the function to memorize -- `options` (`{ maxAge?: number, cacheKey?: (...args:any) => string, cache?: Map }`): options on on how to memorize the output of the function - -### Return value - -This function returns a new function which will cache the first function results. diff --git a/packages/docs/utils/nextFrame.md b/packages/docs/utils/nextFrame.md deleted file mode 100644 index d5a14e597..000000000 --- a/packages/docs/utils/nextFrame.md +++ /dev/null @@ -1,29 +0,0 @@ -# nextFrame - -Execute a given function in the next window frame. This function is a promisified version of the [`requestAnimationFrame` function](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame). - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"7931d112b461228539f11aab8d03ff7556242b9ce99dcba634aadf79ed650363","data":"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"} -import { nextFrame } from '@studiometa/js-toolkit/utils'; - -// Callback API -nextFrame(() => { - console.log('I will be executed in the next frame!'); -}); - -// Promise API -await nextFrame(); -console.log('I will be executed in the next frame!'); -``` - -### Parameters - -- `callback` (`(time:DOMHighResTimeStamp) => unknown`): the function to execute - -[Source](https://github.com/studiometa/js-toolkit/blob/main/src/utils/nextFrame.js) - -### Return value - -This function returns a `Promise` resolving on the next frame with the return value of the provided callback. diff --git a/packages/docs/utils/nextMicrotask.md b/packages/docs/utils/nextMicrotask.md deleted file mode 100644 index 6b87b9ac8..000000000 --- a/packages/docs/utils/nextMicrotask.md +++ /dev/null @@ -1,27 +0,0 @@ -# nextMicrotask - -Execute a given function in the next microtask. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"57a31ee7aaaf39d6d39e55e016688265c1be15b10a144e7d85e08d6af36aafe9","data":"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"} -import { nextMicrotask } from '@studiometa/js-toolkit/utils'; - -// Callback APIs -nextMicrotask(() => { - console.log('I will be executed in the next microtask!'); -}); - -// Promise API -await nextMicrotask(); -console.log('I will be executed in the next microtask!'); -``` - -### Parameters - -- `fn` (`() => T`): the function to execute - -### Return value - -This function returns a `Promise` resolving on the next microtask. diff --git a/packages/docs/utils/nextTick.md b/packages/docs/utils/nextTick.md deleted file mode 100644 index 4a9ff06ee..000000000 --- a/packages/docs/utils/nextTick.md +++ /dev/null @@ -1,27 +0,0 @@ -# nextTick - -Execute a given function in the next window tick. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"3dd004b548389b4afde7beb51a554d7d30977969e9dd71677429b5a473ff8b18","data":"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="} -import { nextTick } from '@studiometa/js-toolkit/utils'; - -// Callback API -nextTick(() => { - console.log('I will be executed in the next tick!'); -}); - -// Promise API -await nextTick(); -console.log('I will be executed in the next tick!'); -``` - -### Parameters - -- `fn` (`Function`): the function to execute - -### Return value - -This function returns a `Promise` resolving on the next tick. diff --git a/packages/docs/utils/random.md b/packages/docs/utils/random.md deleted file mode 100644 index dddbc6ca0..000000000 --- a/packages/docs/utils/random.md +++ /dev/null @@ -1,23 +0,0 @@ -# random - -Get a random number between bounds. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"dc75026fc0e4d26d9b1d39faa7d91e516b6feb9ebfba15ab215a128c8ad135d6","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvUszBQIAWxaJeYQQoBGZCrw0B+FWs1luh9VtIAdMOwVYIpNNNnyFlEPJEJEIAOIwnZmc5RVVzMl0AgHcYGCkAc3YSKQ0IYSg4ADp3NGZ472RkECxmGTcqIIAxdlI4J1T07IBdCiKSsvcNXgBlGBFJKF00uR1YfmZBVjQ4XjQIXgAGZtaQUgDBUjB3AEEw41JItBi43gADZlPeFzONU+WijjAAa3d8NDQsOEQAem+AKzgAFo5hBWE92GhMnVBFAJAoAsxMrAiN9BOJWHBvjIQgpMm8FKwQE0WiA6qUGIgAJxUVhxeJofBIABsVFypHiATw2Nc7keuEQCyoInwpWYYjISEpAF8KOhsPyCMQJay6BSQCwOFw+NzFMo9hYdPozPtTPqyNZbPZHMEeVRPN4/AErjbQkYLIdjgkkicGnIsjk8gU2qLyiAqjU6kNGkSVu1mKGur1+nIoyNeGMJlMZnNFvdVutNjszQctEdYlJzpdrqdbnnHi8qG8Pl9fgDgRBQeDIdDYYoEUiYCi0ewMViXIo8WgCUSSWTHEgAKwskC0sD0xmIZdsjlqnWhvlIABMQpFMnF5AFMrlODwhBI5BV9CYbE4PBdSmYxoNugMxdNbvNGw7AcJw93ce08H8QJ32LD1y14RJklTDJslZQMkEKYoQ3ccNanqYYoDzOMEx6PoBmQ0YYHGSZplmeYlhjIo1jQDYtioXYAJLaJ4MrK4UxrO5GJXdhnled5Ph+f4gRBMEIShFje3hXIByHdFMT3Sdp2JKg5wpSlqRXOkGWZND2U5HwwJpET+QAZhPUVzyQBYr2oeVbyVB9qFVZ9NTfPc9U4w1f04/9wisICrVA8dQwgnwoOdPdYNLT0EO9FICP9ND8gw4MOgqXhqjw5CiOwqhEzIlNfSgSjqKzOjcyE5jWKLTi4JOXjq1rIT6zE5tJLbGSu3kmE4X7ZFUTUsccU0wltNJNkKQARgAFmWmkjI3LdSh3Llot5aykDWkBhQcmgL2ckl+lgPBLRA3hgBgqUBFIUIAHIAAEe1G3IpPbTsIQmkc4FegBuaxrH8xbMgXbgQd4X5nVa5L4IWPjBihhcIeixhAQx2H4e+RGwraqRUeuXHoaxnFGAxnRD2h/GEaCJHuJODG0d4emF3cJTmCQUBVTiOAJC2HwARAKUpSAA==="} -import { random } from '@studiometa/js-toolkit/utils'; - -random(1.5); // a number between 0 and 1.5 -random(-1.5); // a number between 0 and -1.5 -random(1.5, 2.5); // a number between 1.5 and 2.5 -``` - -### Parameters - -- `a` (`number`): first bound -- `b` (`number`): second bound, defaults to `0` - -### Return value - -This function returns a random `number` between the `a` and `b` bounds. diff --git a/packages/docs/utils/randomInt.md b/packages/docs/utils/randomInt.md deleted file mode 100644 index ba0909a8e..000000000 --- a/packages/docs/utils/randomInt.md +++ /dev/null @@ -1,22 +0,0 @@ -# randomInt - -Get a random integer between bounds. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"e039f29090462961e03b2bd9b7aba2dcec761460fdf41b944023b523905e2656","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvUszBQIAWwCSYNC0S8wghQCMyFXjoD8GrbrLdT2vaQA6YdgqwRSaabPnLVlEPJEJEEABxGDdmdzlFXnZVGABzMkNQgHcYGCkdCGEoBCo0ZjiA5GQQLGYZBR9wgDF2Ujg3TOyAOhAAXQoSsoqfHV4AZRgRSShDLLlWjpLSUMFSMB8AQSkYmgTSJLRU9N4AA2Zd3g89nV2AbnbOkA4wAGsffDQ0LDhEAHo3gCs4AFo0CAgrFu7DQzQagigEgUoWYzVgRDegnErDgbxkkS8oMeClY7Q6IAa5QYiAAnFRWOk4mh8EgydRygliSB0Z4VAxyTFcIgAAxUET4crMMRkWkAXwo6GwXIIxBFeToTJYHC4fBZijZ6k01n0hhMWvMpEs+ps9kczlcEVZ3iofgCwVCR0tUVW8USei2aQy4xyPnyhSQxVKgsqVBqdQaYxaly6wd6AyGI0jE2jzNm8yWK1i6022yk+0Ox12pwuU2uMXuVEez1eH2+fwBQJBYLQEKhMLhMARSPYKLRHnVqma2NxbXxhNcSAArHSKWAqTTSXkGaE8GrMT4blyAEx8gUyYXkHniyU4PCEEjkeX0JhsTg8J2YzVmGwGYxWA1G59kU1OFxuNdsj4tp4CEYQPtEWZuiknpJj6S7+igMY9KGvC1PUjTepMVzdMwIYgH0gzDHIsFYdMaYLFQywQWsUEejs+ZHMRRbnCmNwVgQTwvO8Xy/P8gLAqC4KQoo7bwoiyKogBg7DniVDjsSACM3KTuSlLUrSS6kIyq79uuHJgFyADMu6CgeSDcqK+LDLAeBmn+vDAA+bK8KKAikFEADkAACQltvkPH1vxILiT2cAeWc9j2FJahKdwZy8B8jHUa6GzurmvDcoxoxKVFukaluvK8LF8WJbIyXZmlMFKVlvAFT40L5EgoAKukcASAsgTfCAoqikAA="} -import { randomInt } from '@studiometa/js-toolkit/utils'; - -randomInt(10); // an integer between 0 and 10 -randomInt(20, 10); // an integer between 10 and 20 -``` - -### Parameters - -- `a` (`number`): lower bound -- `b` (`number`): upper bound (default: `0`) - -### Return value - -This function returns a random `number` between the `a` and `b` values. diff --git a/packages/docs/utils/randomItem.md b/packages/docs/utils/randomItem.md deleted file mode 100644 index 49850abc5..000000000 --- a/packages/docs/utils/randomItem.md +++ /dev/null @@ -1,24 +0,0 @@ -# randomItem - -Get a random item of an array or a random character of a string. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"a67655b18a9e259d8523c2d49874b8f493b5aa3a8f4e5bfab556606a9794dde2","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvUszBQIAWwCSNBQB4AKgD5G7VXES8NyALq8APrzhpS7MAHNuhjRas27918Nj87MKAA6YOwKWBCkaNKy8sqqlCDyIgiIIADiMJHMUXKKvHowCrwQ/LyypaQyGEWkpdkxvCL4zDJiZEUlWda2DvFozPbJyMggWM3MCvH5CnC8AIIVzFXhbt32ICYUw6QZgqRglGCCrKwbw2j4pBAA7ghUwACiFeEAvkYX1zNlZJc17CUABlM4P88jNIJkpM1KtVal0PAA6dabEAcMAAa3i+DQaCwBgA9HiAFZwAC0aAgEFYaL08OsgigEgUGWY8NgRDxgnErDgeJkOViBXhWIUrHWGxA1maDEQAE4qKwYA5zkgAIwABiofVI9gyeD5MRUBXiqNwiA1IEaY1a5Flzwo6GwpoIxDIvTo0otkmseX0hjhDlM8UlESQADZQ/LFfZlYgAKya5o6j1A41+JAAJiolpaNBtobtDpweEIJHImvdTDYnB4dUUhvU/vsOiBfvcDlcjdMThWHi8chgvjA/iCITCEVrAomVESyTSGVq+tyU3apUhCyWNSyi8K2eY1pXnTbawTAyQQxGYynICBc3XMMbSK2Oz2ByOJ2R50uN3iDyepFeGjvDcq68N8yx/LwgL6CC7BghAELlNCyyHqsiKnCidgYlQWI4viRKkuSlLUmgtJoPSjLMqyMDspy7Dcry0R1qoQpoCKYpUMG0rqhGKJRjG6oJtquopNu9apkOSAAMxZk0OaumaBbUI6xYumW1AVikIhepELY9gGJhBlqXEqgA7JGSr4Eg8bUImwnXvo4mmtJFqyXuuaqiqimYEWKQlq65b0HgWlgN6jaGAEIDMAARiIPgRYZUqqqGzkKhZYaCUmeAPvKaZxjJVruYg+b2kpPnOqWbqBSkLAcFwfCiaoaiyBgza+npniWM1XaGM1I6hOEkQNUa04QEkeDpJkE4+gUB5rkhm5Tbu+7FLCR69P0gzDKMMhXje8zze1j4gNsZEvhQhzHOhn4fD+jw/ABQGfFIYG/ACQIwXBCFQosMIoQiR2olhBDYriiAEsSZIUlSNJ0gyiiUWyHJcjyQ0KCxbEmOKnGqgAHJmvFpYgAk2UJHqo456UuQV8lql5ym+aplUesFoVHuFkUxXFIAJSGRMyilfGWUVGV2dlGEScLVNyTaKqeeKWmwHgo4DbwwATvWvCvPwlyFAA5AAArDFF9PhkNEXoSN0XAusANxBEELM6fovAALy8MguvMLrFC8LrUXe77IgB7rUDBzAwf8LrJh22AqO6Po3A27wBJFEOK7nDAvBEGwgiZ3YkHvfbojae1ru+9FsUDrbQRx42ifJ3iqeZytGe8Aq2JtPn/yNv88RMn0SCgO6ipwBI+wpMSIDPM8QA"} -import { randomItem } from '@studiometa/js-toolkit/utils'; - -const items = ['a', 'b', 'c', 'd', 'e', 'f']; -randomItem(items); // one of the value in `items` - -const string = 'abcdef'; -randomItem(string); // one of the letter in `string` -``` - -### Parameters - -- `items` (`array|string`): array or string - -### Return value - -This function returns a random item of an array, a random character of a string or `undefined` if the array or string is empty. diff --git a/packages/docs/utils/scrollTo.md b/packages/docs/utils/scrollTo.md deleted file mode 100644 index 9b9449c9b..000000000 --- a/packages/docs/utils/scrollTo.md +++ /dev/null @@ -1,77 +0,0 @@ -# scrollTo - -Scroll to a given target without blocking user interaction. The target can be a selector, an element, a number or a scroll position object. - -If the target is a selector or an element, the `scroll-margin` CSS values will be respected when calculating the final scroll position. - -The `scrollTo` function uses the [tween](./tween.html) function under the hood, inheriting from its options. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"b659762e586fd3b433e8c80e7d3edde566ef8c9bd43502a687eeb44a7bcf7151","data":"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"} -import { scrollTo, easeOutExpo } from '@studiometa/js-toolkit/utils'; - -await scrollTo('#target'); -await scrollTo(document.querySelector('#target')); -await scrollTo(800); -await scrollTo({ top: 300, left: 200 }); - -// Custom axis -await scrollTo(800, { axis: scrollTo.axis.y }); // default -await scrollTo(800, { axis: scrollTo.axis.x }); -await scrollTo(800, { axis: scrollTo.axis.both }); - -// With offset -await scrollTo('#target', { offset: 100 }); // stop at 100px from the target - -// With a different scrolling element -await scrollTo(800, { rootElement: document.body }); - -// With custom easing and duration -await scrollTo(800, { duration: 2, easing: easeOutExpo }); -await scrollTo(800, { smooth: 0.5 }); // custom smooth factor -``` - -### Parameters - -- `target` (`string | HTMLElement | number | ScrollPosition`): the target of the scroll -- `options` (`ScrollToOptions`): options for the scroll (offset + [tween options](./tween.html)) - -### Return value - -This function returns a `Promise` resolving to the scroll position, even when stopped by use interaction. - -### Types - -```ts -interface ScrollPosition { - left: number; - top: number; -} - -type ScrollTarget = string | HTMLElement | number | Partial; - -interface ScrollToOptions extends TweenOptions { - /** - * Root element that will be scrolled. - */ - rootElement?: HTMLElement | typeof window; - /** - * Scroll direction, available values are: - * - scrollTo.axis.x (enabled if target is an object with a `left` key) - * - scrollTo.axis.y (default) - * - scrollTo.axis.both - */ - axis?: (typeof scrollTo.axis)[keyof typeof scrollTo.axis]; - /** - * Distance from the target. - */ - offset?: number; -} - -function scrollTo( - target: ScrollTarget, - options?: ScrollToOptions, -): Promise; -``` diff --git a/packages/docs/utils/storage/createLocalStorage.md b/packages/docs/utils/storage/createLocalStorage.md deleted file mode 100644 index 959d90e0e..000000000 --- a/packages/docs/utils/storage/createLocalStorage.md +++ /dev/null @@ -1,31 +0,0 @@ -# createLocalStorage - -Create a storage instance backed by `globalThis.localStorage`. The underlying storage is resolved lazily from `globalThis` when the instance is used, so it can be imported before a browser-like global exists. Values persist across page reloads and are synced across tabs via the `storage` event when available. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"168444ac507ca8fe05e8951c976264031db52ea65923eec4212be04d143bde92","data":"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="} -import { createLocalStorage } from '@studiometa/js-toolkit/utils'; - -const storage = createLocalStorage({ prefix: 'myapp:' }); - -storage.set('theme', 'dark'); -storage.get('theme'); // 'dark' -storage.get('lang', 'en'); // 'en' (default) - -// React to changes (including from other tabs) -const unsubscribe = storage.subscribe('theme', (value) => { - document.documentElement.dataset.theme = value; -}); -``` - -## Parameters - -- `options` (`StorageOptions`): Optional configuration. - - `options.prefix` (`string`): Key prefix for namespacing. - - `options.serializer` (`StorageSerializer`): Custom serializer. Defaults to JSON. - -## Return value - -- `StorageInstance`: See [createStorage](./createStorage.html#return-value) for the full API. diff --git a/packages/docs/utils/storage/createSessionStorage.md b/packages/docs/utils/storage/createSessionStorage.md deleted file mode 100644 index bfe656d32..000000000 --- a/packages/docs/utils/storage/createSessionStorage.md +++ /dev/null @@ -1,27 +0,0 @@ -# createSessionStorage - -Create a storage instance backed by `globalThis.sessionStorage`. The underlying storage is resolved lazily from `globalThis` when the instance is used, so it can be imported before a browser-like global exists. Values persist for the duration of the page session when available. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"459d66cd4edc345b8db5735849a6e5cad362c44732d8c229c98df7d15ea3c07e","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvEaRjMaAZXhwJYBWgilmAcxgAeACq86NMFDi8ASjBGaoeuGlLsw2ir2ZgMAPl4BeKxs7BycXNw8vb29GCCxxSTgAfkReAHkAW3Y0PXVNHRhUuNU4dwAdECxSYnZYUnLvbhTcrV0ASTBHTxF9A29SsHZ0rE00aVl5GCU4FUlm/MoQTtIGRABOKlYYVzR8JAAmAAYqNGZSXRWQGTlFZVU53QWOMFxEI8v8U+YxMiRVgF8KOhsC8CMQfscTHhbB1Ro48romhoWjB2p1RPprLZSPZHM5XO5PD5vAslisAOwANg2W20OyQZOOp3OeDhyMeLheeyoIg+Wm+5EQFIBQJweEIJHIEPoTDYnB4Y2uk1usyR+T0mOCuLCBMi0Vi8Q6yTSmWy9wKRQSZQqVSINTI9UavDNqJO6PVQWxITx4UJUX6g2GywVEymMzUqoeVFJSAAHFSQJttrtEIdGWcYBcriHleH4bgNhz9tzeV8aAKAIxCwHUYFisGS6iQxAgRiVWJkTB8SowfjsWhGrWuXgAH14wlgveeUBJJ2WSHLB3WCZpdMFaeZze7vdo7OeRfen35SAAzP9q5hRc3xeDG9Lm9DHLxWflEXmXV0MR6caF8REiTPThWctj2Pakk3pdcMxZCN8wTQtEAAFmLQ8yyQA5hRrS9QQlBYaDvFt0gzQgoD4Z0YQ/d0sW/b0dSJAA6OAMz0coNAAay2epGHYjAUhYiB2LAcp3CINhBBgFJCUdIgIBqAC50QcsEPLMDaWTUDqCZKDm0YhgCz3RDkL5VDEBjDCLxBa8GzwzMElhGDX2Rd83Q1T1Bx9XU5KAikAFYVNXBkNPTC5n0jOD9N8g8jJ+V4zNrK961wpsCKI6BSJgpzukozUf3c+idOYkA6CwdhZDgTjuN4wraGK0qhN4ETWDEiSvCkmTpyjWcgLJdTE1Uk9IOCqC9JeCKeRQ6LTPPOLsJvayoVsp97KddLyOcr8vW1P8ok8+dVnjXr/IG6C813F4ArGqKBXQqasMsxL8MYQidlS5a31WzKXOozbfW8OjzgKtiOJAaIKt4PiBPKR1CV4RgAGpy14etWAgZgSJ2lMDiQ5dwMQdTZw3EBmWGiDItLCa/gAXW5aAQQDEZeGAYMbmmO4YN4P4BCqdJeAAcgAAUcQQoAkJ7mAAegAKzgABaDQIFYVisjFwRxFYOAeYAbn6foHzsvN/CZpUWZVPNGEZrc+xSHnGONsBEB59nuC1wSYTzBiM0YHnAbAHn3B55gACMRHLPZjx5p3+hCmB3bQT2ipK+Bfd4Y8KQOA4I5dqO/o9r3+K2cONd4MWxd5wPg9DnmFlFpBQBMLYwzwKWQD+P4gA==="} -import { createSessionStorage } from '@studiometa/js-toolkit/utils'; - -const storage = createSessionStorage({ prefix: 'session:' }); - -storage.set('token', 'abc123'); -storage.set('expires', 3600); - -storage.get('token'); // 'abc123' -``` - -## Parameters - -- `options` (`StorageOptions`): Optional configuration. - - `options.prefix` (`string`): Key prefix for namespacing. - - `options.serializer` (`StorageSerializer`): Custom serializer. Defaults to JSON. - -## Return value - -- `StorageInstance`: See [createStorage](./createStorage.html#return-value) for the full API. diff --git a/packages/docs/utils/storage/createStorage.md b/packages/docs/utils/storage/createStorage.md deleted file mode 100644 index 2aaabe274..000000000 --- a/packages/docs/utils/storage/createStorage.md +++ /dev/null @@ -1,82 +0,0 @@ -# createStorage - -Create a multi-key, typed storage instance with reactive subscriptions and automatic serialization. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"59e6075b51f0feb88e6aae4cbb91a759315d715016a0fedc609bbe8bb90e078b","data":"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"} -import { - createStorage, - localStorageProvider, -} from '@studiometa/js-toolkit/utils'; - -const storage = createStorage({ - provider: localStorageProvider, - prefix: 'myapp:', -}); - -// Set and get values -storage.set('theme', 'dark'); -storage.get('theme'); // 'dark' - -// Get with default value -storage.get('lang', 'en'); // 'en' (key not set yet) - -// Subscribe to changes -const unsubscribe = storage.subscribe('theme', (value) => { - console.log('Theme changed:', value); -}); - -// Clean up -unsubscribe(); -storage.destroy(); -``` - -## TypeScript - -Use generics to type your storage keys and values: - -```ts twoslash -// @twoslash-cache: {"v":1,"hash":"ce90c11fdde0a7b0a9ad2efc8c2ef266cf7165c59f1cb9deedfa8069e382a62f","data":"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"} -import { createStorage } from '@studiometa/js-toolkit/utils'; - -type AppStorage = { - theme: 'light' | 'dark'; - user: { name: string; id: number }; - lang: string; -}; - -const storage = createStorage(); - -storage.set('theme', 'dark'); // ✅ typed -// @errors: 2345 -storage.set('theme', 'blue'); // ❌ type error -storage.get('user'); // { name: string; id: number } | undefined -storage.delete('user'); -``` - -## Parameters - -- `options` (`StorageOptions`): Configuration options. - - `options.provider` (`StorageProvider`): The storage provider to use. Defaults to `localStorageProvider`. - - `options.serializer` (`StorageSerializer`): Custom serializer with `serialize` and `deserialize` methods. Defaults to JSON. - - `options.prefix` (`string`): Key prefix for namespacing. All keys will be stored with this prefix (e.g. `'myapp:'` stores key `'theme'` as `'myapp:theme'`). - -## Return value - -A `StorageInstance` with the following methods: - -- **`get(key)`** — Get the value for a key. Returns `undefined` if not set or if the stored value is corrupted. -- **`get(key, defaultValue)`** — Get the value for a key, returning `defaultValue` if not set. -- **`set(key, value)`** — Set a value. `null` is stored as a real value when your type allows it. -- **`delete(key)`** — Remove a key from storage. Subscribers are notified with `undefined`. -- **`has(key)`** — Check if a key exists in storage. -- **`keys()`** — List all keys managed by this instance. When a `prefix` is set, only prefixed keys are returned (with the prefix stripped). -- **`clear()`** — Remove all entries. When a `prefix` is set, only prefixed keys are cleared — other keys in the same provider are left untouched. Subscribers are notified with `undefined`. -- **`subscribe(key, callback)`** — Subscribe to changes on a key. Returns an unsubscribe function. Listeners are notified on both local changes and external sync events (cross-tab, navigation). `undefined` means the key is absent. -- **`destroy()`** — Clean up all listeners and event handlers. - -::: warning Cleanup -Each `createStorage()` call registers a global event listener (when the provider has a `syncEvent`). Always call `destroy()` when the storage instance is no longer needed to avoid memory leaks — for example in a component's unmount/destroy lifecycle hook. -::: diff --git a/packages/docs/utils/storage/createUrlSearchParamsInHashStorage.md b/packages/docs/utils/storage/createUrlSearchParamsInHashStorage.md deleted file mode 100644 index fc965704e..000000000 --- a/packages/docs/utils/storage/createUrlSearchParamsInHashStorage.md +++ /dev/null @@ -1,45 +0,0 @@ -# createUrlSearchParamsInHashStorage - -Create a storage instance backed by URL hash params (`#key=value`). Useful for client-side state that shouldn't be sent to the server, like tab selection or UI mode. - -This storage is browser-only: it requires `window.location` and `window.history`. The browser context is checked when the provider is created. In non-browser environments, it falls back to a no-op provider. - -By default, changes use `replaceState` to avoid polluting browser history. Use `{ push: true }` to create history entries instead. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"6d7c7c16672575e0c337418c60c64c8dbfd6a058a7e8e91277363d36f36c96d0","data":"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"} -import { createUrlSearchParamsInHashStorage } from '@studiometa/js-toolkit/utils'; - -const storage = createUrlSearchParamsInHashStorage(); - -// URL: /page -storage.set('tab', 'settings'); -// URL: /page#tab=%22settings%22 - -storage.set('view', 'grid'); -// URL: /page#tab=%22settings%22&view=%22grid%22 - -storage.get('tab'); // 'settings' - -// React to hash changes -storage.subscribe('tab', (value) => { - console.log('Tab changed:', value); -}); -``` - -::: tip Values are JSON-serialized -All values are serialized with `JSON.stringify` before being written to the URL hash. This means string values will include quotes (e.g. `#tab=%22settings%22`). Use a custom `serializer` if you prefer raw strings. -::: - -## Parameters - -- `options` (`StorageOptions & UrlProviderOptions`): Optional configuration. - - `options.prefix` (`string`): Key prefix for namespacing. - - `options.serializer` (`StorageSerializer`): Custom serializer. Defaults to JSON. - - `options.push` (`boolean`): Use `location.hash` assignment (creates history entry) instead of `replaceState`. Defaults to `false`. - -## Return value - -- `StorageInstance`: See [createStorage](./createStorage.html#return-value) for the full API. diff --git a/packages/docs/utils/storage/createUrlSearchParamsStorage.md b/packages/docs/utils/storage/createUrlSearchParamsStorage.md deleted file mode 100644 index 28bfe05a3..000000000 --- a/packages/docs/utils/storage/createUrlSearchParamsStorage.md +++ /dev/null @@ -1,55 +0,0 @@ -# createUrlSearchParamsStorage - -Create a storage instance backed by URL search params (`?key=value`). Useful for shareable UI state like filters, pagination, or sort order. - -This storage is browser-only: it requires `window.location` and `window.history`. The browser context is checked when the provider is created. In non-browser environments, it falls back to a no-op provider. - -By default, changes use `replaceState` to avoid polluting browser history. Use `{ push: true }` to create history entries instead. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"f85048a3671a6c4d8d2fb78901c9be2140f242533e6f0dc1be854627e42939d4","data":"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"} -import { createUrlSearchParamsStorage } from '@studiometa/js-toolkit/utils'; - -const storage = createUrlSearchParamsStorage(); - -// URL: /products -storage.set('page', 2); -// URL: /products?page=2 - -storage.set('sort', 'price'); -// URL: /products?page=2&sort=%22price%22 - -storage.get('page'); // 2 - -// React to back/forward navigation -storage.subscribe('page', (value) => { - console.log('Page changed:', value); -}); -``` - -### With history entries - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"320313ee3aa1bb57931d68e8d1c2fd0ee297488ad7d6d775e6821dee5a4e3d6f","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvEaRjMaAVVKsAynNIj8ABWalmAWzgq0EPQHMYAHgAqvOjTBQ4vAEowRpqJbhpS7MGYUvMxgGAB8vAC8ru6e3r7+gcGhYWGMEFjiknAA/Ii8APL67GiWxqbMFgWZEmBwQQA6IFikxOywpE0RAGS8SqxarUTtZNVZddz55eYwAJJ1aCEiVtZhDWDs+limaNKy8jD9arqaOnqG05W4VD66DIgAnFSsMAFo+EgATAAcVIukFnuIBkckUymOGm0ugMRhMM0oIA4YFwiAADFRNNCxGQkA8AL4UdDYFEEYg4v72PAeBa8HwVCxTOFXea3URWNweUheHx+AJBELhMII26ke4ARk+ADZnq8zO8kAB2P66QF4Onw57+FEAZgx+CxNHIiElBKJODwhBI5Ap9CYbE4PD2oMO4PUp2hFyZFksHLiPMS/JSaQy41y+SKJTKXpgY1q9V4TRabQ6XV4vX6g2Toxq2UmvEuFhZizZPtiXPivKSAtS60221FToORzdUPOsPp1xAIvF2uliNl8sQP2VAJgQJBTddJ1bMILnaROr1BpxiDFJsJ1GJFrJ1uolMQIEYSZwoowfAzQxGpFj2QAdFhBHB8HleAAjCAQF4hXgAH14wlgfgtSgYV/nFSUlX7N4PkQAAWEdVQPB8nwRBckF1YF9T0bEjVghU8QAXQxaASTrHZeGARswVUFszlnaNeDxARWn0XgAHIAAEfEEKAJH0MdmAAegAKzgABaExPwAaxKQTBHEVg4DYgBudZ1kEwTeAAUWYTRaTHRg+AnGhnGYXhkQAd14fB2HVDA7DAXwMHWakfFpBjomMl0aOnOjPQ7RhKOQ/B8l8QQYEY7hlIRfjFiQUB7FeOBajwUSQDxPEgA"} -import { createUrlSearchParamsStorage } from '@studiometa/js-toolkit/utils'; - -// Each set() creates a new history entry -const storage = createUrlSearchParamsStorage({ push: true }); -``` - -::: tip Values are JSON-serialized -All values are serialized with `JSON.stringify` before being written to the URL. This means string values will include quotes in the URL (e.g. `?sort=%22price%22`). Use a custom `serializer` if you prefer raw strings in the URL. -::: - -## Parameters - -- `options` (`StorageOptions & UrlProviderOptions`): Optional configuration. - - `options.prefix` (`string`): Key prefix for namespacing. - - `options.serializer` (`StorageSerializer`): Custom serializer. Defaults to JSON. - - `options.push` (`boolean`): Use `pushState` instead of `replaceState`. Defaults to `false`. - -## Return value - -- `StorageInstance`: See [createStorage](./createStorage.html#return-value) for the full API. diff --git a/packages/docs/utils/storage/index.md b/packages/docs/utils/storage/index.md deleted file mode 100644 index 6f3c5546f..000000000 --- a/packages/docs/utils/storage/index.md +++ /dev/null @@ -1,10 +0,0 @@ -# Storage - -Utilities to manage browser storage with a unified API. Supports `localStorage`, `sessionStorage`, URL search params and URL hash params, with automatic serialization, reactive subscriptions, cross-tab sync and key namespacing. Storage backends are resolved safely from the current global/browser context, and URL-based storages no-op outside browser environments. - -- [createStorage](./createStorage.html) -- [createLocalStorage](./createLocalStorage.html) -- [createSessionStorage](./createSessionStorage.html) -- [createUrlSearchParamsStorage](./createUrlSearchParamsStorage.html) -- [createUrlSearchParamsInHashStorage](./createUrlSearchParamsInHashStorage.html) -- [Providers](./providers.html) diff --git a/packages/docs/utils/storage/providers.md b/packages/docs/utils/storage/providers.md deleted file mode 100644 index 8a7745ead..000000000 --- a/packages/docs/utils/storage/providers.md +++ /dev/null @@ -1,108 +0,0 @@ -# Providers - -Storage providers are the low-level adapters that read and write to a specific storage backend. You can use the built-in providers or create your own. - -## Built-in providers - -| Provider | Backend | Sync event | -| ------------------------------- | --------------------------- | --------------------- | -| `localStorageProvider` | `globalThis.localStorage` | `storage` (cross-tab) | -| `memoryStorageProvider` | in-memory `Map` | none | -| `sessionStorageProvider` | `globalThis.sessionStorage` | none | -| `urlSearchParamsProvider` | URL search params | `popstate` | -| `urlSearchParamsInHashProvider` | URL hash params | `hashchange` | - -`localStorageProvider` and `sessionStorageProvider` resolve their `globalThis.*Storage` backend lazily on each access instead of capturing it when the module is imported. This makes them safe to import before a browser-like global is available, and lets tests or non-DOM runtimes provide storage later. - -## Provider factories - -All built-in providers also have factory functions: - -- `createNoopProvider()` -- `createLocalStorageProvider()` -- `createMemoryStorageProvider()` -- `createSessionStorageProvider()` -- `createUrlSearchParamsProvider(options?)` -- `createUrlSearchParamsInHashProvider(options?)` - -Use the storage-backed factories when you want a fresh provider instance instead of the default singleton export. - -The URL-based factories accept a `push` option to customize navigation behavior. They check for a browser context when the provider is created. If `window.location` or `window.history` is unavailable, they return a no-op provider instead of throwing. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"30cf328271aeb3e255906ba6983a8e307a2d394630a0ec98df4f6b582ee409ed","data":"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="} -import { - createLocalStorageProvider, - createMemoryStorageProvider, - createNoopProvider, - createSessionStorageProvider, - createUrlSearchParamsProvider, - createUrlSearchParamsInHashProvider, -} from '@studiometa/js-toolkit/utils'; - -const noopProvider = createNoopProvider(); -const localProvider = createLocalStorageProvider(); -const memoryProvider = createMemoryStorageProvider(); -const sessionProvider = createSessionStorageProvider(); - -// Uses pushState instead of the default replaceState -const pushProvider = createUrlSearchParamsProvider({ push: true }); -const pushHashProvider = createUrlSearchParamsInHashProvider({ push: true }); -``` - -## Custom providers - -Implement the `StorageProvider` interface to create a custom provider: - -```ts twoslash -// @twoslash-cache: {"v":1,"hash":"ef4a6bd2f9278b2cad042696755d26ed2f767f0f77df66a4966d8949dd4a54f5","data":"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"} -import { createStorage } from '@studiometa/js-toolkit/utils'; -import type { StorageProvider } from '@studiometa/js-toolkit/utils'; - -const cookieProvider: StorageProvider = { - // Optional: DOM event name for external sync - syncEvent: undefined, - - get(key: string): string | null { - const match = document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`)); - return match ? decodeURIComponent(match[1]) : null; - }, - - set(key: string, value: string): void { - document.cookie = `${key}=${encodeURIComponent(value)}; path=/`; - }, - - remove(key: string): void { - document.cookie = `${key}=; path=/; max-age=0`; - }, - - has(key: string): boolean { - return this.get(key) !== null; - }, - - keys(): string[] { - return document.cookie - .split('; ') - .filter(Boolean) - .map((c) => c.split('=')[0]); - }, - - clear(): void { - for (const key of this.keys()) { - this.remove(key); - } - }, -}; - -const storage = createStorage({ provider: cookieProvider }); -``` - -### The `syncEvent` property - -Providers can declare a `syncEvent` string to indicate which DOM event should trigger re-reading values for subscribed keys. When set, `createStorage` will automatically listen to this event on `window` and notify subscribers. - -- `'storage'` — for cross-tab sync (`localStorage`) -- `'popstate'` — for back/forward navigation (URL search params, browser-only) -- `'hashchange'` — for hash changes (URL hash params, browser-only) -- Any custom event name -- `undefined` — no automatic sync (used by `sessionStorageProvider`) diff --git a/packages/docs/utils/string/camelCase.md b/packages/docs/utils/string/camelCase.md deleted file mode 100644 index ec65fb2fd..000000000 --- a/packages/docs/utils/string/camelCase.md +++ /dev/null @@ -1,20 +0,0 @@ -# camelCase - -Transform a string to `camelCase`. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"1a31876087ddc5cd25750680d7d188d93581ab6f3793f8f112899a8b587b14d2","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhoBzALYxWAYS4xEvRgDoVzUgHM4CgK5gA1pADuYZAF0+AXgB8vXQYjGAOmHbisEUqP4SpsuLiooCH4ERBBpIRJPXmZeEVJ2MHVeNAgxSRk5JUpqZk0kZGQQDn0c/DQ0LC0AemqAKzgAWlSIVj12NCURbSh2CEk0ZiVYImrtNHZWOGr4xPVq7wy/GCVy8VYQU1MqETUGRABOKlYYJLR8JCPcjRh9kEXfORyS3EQABip+fDVmfhpyQ4AXwo6GwrwIxDIORo9CYbE4PHSj38ylUGi0tn0RhM5h0WIcYGcrnc0QemX8OSCITwETAUVEsVmSRSaTJy2yVEG+RQRRKejKFSqiFqDWaEFa7U63V6/VuQxGYwmUxmaASSQWPnJKzWGy2O0GniQAFYriczhdDpy1Opbng2U9jolXgAmT7fUi/f5IN6A7b3aDg4keUTAJFa3iA3gAM1I/V4AHIAALSvoDZj1JotNodRWTODxgDczmc9pR8YAyrLeOXVXNeLSaGA0PHuAXeLU4rKa2r1A3TgwqGmkKA6I24H0wHgGiBAYCgA=="} -import { camelCase } from '@studiometa/js-toolkit/utils'; - -camelCase('Some String Content'); // someStringContent -``` - -### Parameters - -- `string` (`string`): The string to transform. - -### Return value - -- `string`: The transformed string. diff --git a/packages/docs/utils/string/dashCase.md b/packages/docs/utils/string/dashCase.md deleted file mode 100644 index ea386deec..000000000 --- a/packages/docs/utils/string/dashCase.md +++ /dev/null @@ -1,20 +0,0 @@ -# dashCase - -Transform a string to `dash-case`. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"8cc9895f600b622f3b74104d346d5658e7d3ef97a4dc5a2373008150c5d93c78","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpeULvgDCXGIl6MAdEuakA5nDkBXMAGtIAdzDIAunwC8APl7a9EQwB0w7ALZYIpUeLhSZlEFAh+BEQQSSESD15mXhFSdjBVXjQIMQkAWn4ZBT80ZnUkZGQQDl0/fDQ0LA0AemqAKzg05IhWHXY0BRFNKHYIZxhchVgias00dlY4atj41WqvHzgYBXLnVhBjYyoRFQZEAE4qVhgEtHwkAA4qXLUBvAXpJb8S3EQABip+fBVmfhpyA4AXwo6GwrwIxDIOToexALA4XD4DxkimUag01l0BiMpi0WLsYEcLjckWRTyoASCeDCYAiomiMwSSRSCwyWRyeWChWK8R0ZQqVUQtQaTQgLTaHS6PT6A2YQxgIzGEymjLmZOWq3Wm22Nz2AFYrsUTqozpdripVHcQurnvFXgAmT7fUi/f5IN6ArYgQSwPDE9yiYCpbyPGC8QG8ABmpD6vAA5AABKW9fq5eqNZqtdqjcaTOMAbkcjnVjDjAGUZbwy2g4kyaTQwGg49x87xajEZWlVRkhA2GFRU8wkKAYSc4L0wHgGiBAYCgA=="} -import { dashCase } from '@studiometa/js-toolkit/utils'; - -dashCase('Some String Content'); // some-string-content -``` - -### Parameters - -- `string` (`string`): The string to transform. - -### Return value - -- `string`: The transformed string. diff --git a/packages/docs/utils/string/endsWith.md b/packages/docs/utils/string/endsWith.md deleted file mode 100644 index 09c377fb9..000000000 --- a/packages/docs/utils/string/endsWith.md +++ /dev/null @@ -1,22 +0,0 @@ -# endsWith - -A [more performant](https://jsbench.me/1hlkqqd0ff/1) way than `String.prototype.endsWith` to test if a string ends with another string. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"47cc641d171c3407479bbf69ff76ce54e199bc21f3321efb2aa0965073f44375","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvGGChwA6uzT5GcNKXZgA5ol5qN2inpjNSI/Lv2at3XQCMIEVibAAdMOwC2WCKTTTZBSV8ShAoCBEERBAAFXh/dn5eZj11a1TTNDheAHdg5MhlMlSDLQA6d3cY/HZs2uTeT18YXhxSfl9PZjB/ElI4CSkIJKLeAAMAZTTtMqxSCDQF7BgymTlFZTHGmGVoMtC0Zi0o5GQQDjAAa1D8NDQsOEQAeieAKzg7GXMyzxgngEZ8KxLgBHEFQAAM/H4TwATCAALoUM4Xa5UW73R4vd4AWkWTkuSjKakEUAkv0OZVgRCegnErDgTys2ieayCyjKt08rERSJAakySAAnFRnNplEgABxUQ6kLQ7PBsjYhUWaXCICFUcymZhiMjCgC+FHQyzwhD6BzoDGiLA4XD4SuCqmmOhK1iMcBMZgsbu0tl4DicLncXh8fgC62CoXCkTwcTUvESDWZWgyfmyeWUBQW+GKKYqbjA1Xq9RSTVILTaHVIXR6vD6A0kvGGvFGkxds3mi0wOFWgWVWwphCg+xlRxOKM0aIIdwezzeHy++B+f0BwLBkOhcMRyPOU5us6xC7xjmBRJJZIgFOYVJgNLp7AZTJdrP7wU5aG5vKoAr8SAArNK5wyFoEqIEBsrytaICOhKqpgOqsJavgOp6uQGpGiaOBmsQ+oylaTBsJwPARuyKgppYLoel65iUaU/qBs43Qht4vj+LBKphBEUSxPEiZJCkKZplkuT5N0OZ5h2lRFjUdTZGWzStGQ1a1r0ZCNkMIy5uMUylJ2CxLL2HGDjsw6jtQ45IKce5XAemLzu8nyiMuvwAkCoLglCMLwkik62eih4OXAJ4EueaCkuSOw3tStL0oyKavpGHJcjyCJ8r+1pCgAzKKIFgRBphQYqb5wTZ6o5SA2qkLqNDoRCBp8iI0DqiAoZsbwwCkcqvAGgI8yeLwADkAACF6RYcx74meaCxY+cCDQA3NJHGMINKaDUYg3WIN3ALbwLytqQggwO4K1rS6G1DZAO17Qd/BsJ6oTXkgoBWjIGl4O8IAGgaQA"} -import { endsWith } from '@studiometa/js-toolkit/utils'; - -endsWith('string', 'ing'); // true -endsWith('string', 'no'); // false -``` - -### Parameters - -- `string` (`string`): The string to test. -- `search` (`string`): The string to search for at the end. - -### Return value - -- `boolean`: whether the string ends with search or not. diff --git a/packages/docs/utils/string/index.md b/packages/docs/utils/string/index.md deleted file mode 100644 index e90dead30..000000000 --- a/packages/docs/utils/string/index.md +++ /dev/null @@ -1,16 +0,0 @@ -# String utils - -## Leading and trailing characters - -The leading and trailing string utilities will ensure that characters from the start or end of a string are present by adding or removing them. - -- [withLeadingCharacters](./withLeadingCharacters.html) -- [withLeadingSlash](./withLeadingSlash.html) -- [withoutLeadingCharacters](./withoutLeadingCharacters.html) -- [withoutLeadingCharactersRecursive](./withoutLeadingCharactersRecursive.html) -- [withoutLeadingSlash](./withoutLeadingSlash.html) -- [withoutTrailingCharacters](./withoutTrailingCharacters.html) -- [withoutTrailingCharactersRecursive](./withoutTrailingCharactersRecursive.html) -- [withoutTrailingSlash](./withoutTrailingSlash.html) -- [withTrailingCharacters](./withTrailingCharacters.html) -- [withTrailingSlash](./withTrailingSlash.html) diff --git a/packages/docs/utils/string/lowerCase.md b/packages/docs/utils/string/lowerCase.md deleted file mode 100644 index f7f220993..000000000 --- a/packages/docs/utils/string/lowerCase.md +++ /dev/null @@ -1,20 +0,0 @@ -# lowerCase - -Transform a string to `lowercase`. This function is an alias of `String.prototype.toLowercase()`. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"8df6959c13a7f4c4f6882394861f495954bdc25ea8cd6400796d9d4b7c5d9cb5","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvVhADuZAMJcYjOGlLswAc0S81G7d137NWgDph2AWywRSaaXMXLKIKBBEJEIBZJL3eZj11U140CEd5UhFlADpXNGYtL2RkEA4wAGtXfDQ0LDhEAHoigCs4AFpwiFZM9jRYtUEoCSsYRNjYIiLBcVY4IpNtIpkopTgYWNyrVhAAXTmqNWZ7JABOKlYYbTR8dapE0i12vFHnCdcM3EQABioRfBXmMTJ1gF8KdGxrgmJXg7oDG8LA4XD4Z1I4xUQx0wQMWiMcNMFmstgCEKhrncnjwvjA/gcQRhYQiEJiE3iBySKTSGWyVFy+UKJXKVQgNTqDSaLQgbQ6XR6fQGMJGTkhcWmswWS0OQIArBt0tstLt9tQVscgekxZjNpprgAme6PUjPGjkW5vRYgETQH6ouwOYCRc4wXhvASkXm8ADkAAFua12swypVqrV6oL2P0fQBuCwWDHKRg+gDKvLdqZC2l4eJoYDQPu4sd4JT0GaROdtBe2DCofOYSFAgO2cAkYDw5RAbzeQA"} -import { lowerCase } from '@studiometa/js-toolkit/utils'; - -lowerCase('Some String Content'); // some string content -``` - -### Parameters - -- `string` (`string`): The string to transform. - -### Return value - -- `string`: The transformed string. diff --git a/packages/docs/utils/string/pascalCase.md b/packages/docs/utils/string/pascalCase.md deleted file mode 100644 index c2cf307ad..000000000 --- a/packages/docs/utils/string/pascalCase.md +++ /dev/null @@ -1,20 +0,0 @@ -# pascalCase - -Transform a string to `PascalCase`. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"1a60de0b70ad6a755a935ef84a8fa1f963c7f9a87f001d6b178fef94deb8123c","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpeWLvzYBhLjES9GAOmXNSAczjyArmADWkAO5hkAXT4BeAHy8d+iEYA6YdgFssEUqPFxJrGXFwqKAh+BEQQKSEST15mXhFSdjA1XjQIXgAFCWlZRUpqZg0kZGQQDj18/DQ0LE0AejqAKzgAWjSIVl12NEURLSh2CBcYNGZFWCI6rTR2Vjg6hKS1Ou9ffxhFKpdWEBMTKhFVBkQATipWGGS0fCQARgAGKlH1EbxVnID88txER5B+fCqZj8GjkU4AXwo6GwPwIxDI+Ro9CYbE4PDE2T8siUKnUmhsekMxjM2kJ9jATlc7hi7yxnyCITCESiZFEcUWyVS6SyPg+G0RhTCJTKSV0lWqtUQDWabQgHS6PT6AyGIzGEymMzmCzQiWSK0x602aG2u32IEOniQADY/hcrjdEA8nqo1K9wrT1l8kj8AExUAFAkEI37gs2CWB4KkeUTADG8ukwXjg3gAM1IQ14AHIAAJKwbDUZNVrtTrdDWzOCZgDcTicHuxmYAyireI2dUteJEwDRu5nuFXeA1Wyq27q1F2ewwqAXmEhQHQe3BBmA8M0QODwUA=="} -import { pascalCase } from '@studiometa/js-toolkit/utils'; - -pascalCase('Some String Content'); // SomeStringContent -``` - -### Parameters - -- `string` (`string`): The string to transform. - -### Return value - -- `string`: The transformed string. diff --git a/packages/docs/utils/string/snakeCase.md b/packages/docs/utils/string/snakeCase.md deleted file mode 100644 index 40bd0c4a9..000000000 --- a/packages/docs/utils/string/snakeCase.md +++ /dev/null @@ -1,20 +0,0 @@ -# snakeCase - -Transform a string to `snake_case`. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"d94932cfb1a817c7718a251960501f8a1626ce65761b70e0bbf4dcd40832cea4","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjCGDhpecMMwDWMAMJcYiXowB0q5qQDmcRQFcwkyAHcwyALp8AvAD5eegxGMAdMOwC2WCKVHips+ZRAoCH4ERBAZIRIvXmYxNFJ2MA1eNAgxCWkAfX55ZQC0Zi0kZGQQDn0A/DQ0LG0AejqAKzgAWlSIVkl2NGURHSh2CFcYAuVYIjqdNHZWODqRBKT5jL84GGUq11YQU1MqEXUGRABOKlYYJLR8JFPqdQ0RvB9pOTWA8txEAAYqfnx1Zj8GjkE4AXwo6GwnwIxDI+ToRxALA4XD4z1WMBUak02ls+iMJnMunxDjAzjcHmi6NeuCoQRCeAiYCioliC0SyVS6V82Vy+UKoRKZUSkkq1VqiAazTaEA6XR6fQGQxGzDGMAmUxmc3ZS2puU2212+wKXiQAFZbudLtcTlQTQ9EXq3mdEp8AEy/f6kQHApBfUF7ECCWB4CmeUTAbkveS8UG8ABmpCGvAA5AABRWDYYFJqtdqdbqTaazFMAbmczidmJTAGVlbwa/EObwmTQwGgU9xS7wGmJlZkdRpskI2wwqNnmEhQAiLnBBmA8M0QKDQUA"} -import { snakeCase } from '@studiometa/js-toolkit/utils'; - -snakeCase('Some String Content'); // some_string_content -``` - -### Parameters - -- `string` (`string`): The string to transform. - -### Return value - -- `string`: The transformed string. diff --git a/packages/docs/utils/string/startsWith.md b/packages/docs/utils/string/startsWith.md deleted file mode 100644 index a4b0b57de..000000000 --- a/packages/docs/utils/string/startsWith.md +++ /dev/null @@ -1,22 +0,0 @@ -# startsWith - -A [more performant](https://jsbench.me/1hlkqqd0ff/1) way than `String.prototype.startsWith` to test if a string starts with another string. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"d7199a1fa8b7ee6efa90255c79c9056fc03a13a4ec8703a203697b4940a2adce","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvOGmak0cAOrs0+RjNLswAc0TS0mnRWkw5I/Ho1bt3PQCMIEVqbAAdMOwC2WCPP1yFZVVKECgIEQREEAAVeDRedn5eZn1DbX95OF4AdxV8ZMhVMlTrADp3d2j8diya5N5PXxheHFJ+X09mMHiSUjgJKQgkot4AAwBlAzKsUgg0OewYUpkApTzRhphVaFKQ2W1I5GQQDjAAaxD8NDQsOEQAenuAKzg7GFF8Us8Ye4BGfFYZwAjkCoAAGfj8P4gAC6FGOpwuVCuNzujxeAFp5k4ziplmhBFAJN9ZKVYER7oJxKw4PcrDo6bJMkFPldPKxYXCQCt5EgAJxUZw6YKIX5gqhM7RbPA8wJ5EKnXCIcUgcxyZhiMj8gC+FHQizwhF6ezoDCiLA4XD4srWqnUUx0lgd2mMcFMpHMTrStl4DicLncXh8fhtLJCYQieFiMgSSRS9PSNpyeQKc3wxQT5TcYCqdTqKUapGarXapE63V4vX6kl4Q14IwmztKMzmCxw+NWLI2JMIUF2EuYByQRxOWiRBGutwez1e73MXx+/0BIPBkOhcIRY8uk7RM6xjkBeJkhOJW2YZJgFKp7BpjLSjM7eVKbI5MK5sqQADYVULtCKxQOpBSma3JMnKwSCloSoAExUGqpAajQ5DKrq+o4IaxBahKppMGwnA8Bk4FqAmXrWK67qeiUOg+n6zhdIG3i+PEobylQEaRDEcSxvUCaEVkuSqKmRSkFR2hZpU1S1FkBZNC0ZCluWPRkNWgzDOmYyTGkzazPMmDtixqjdlsvb9tQg6HJu5zbqi04vG8HwLn8ALAqCEJQr8sLwqOVnIjutlwPuOJHgSRIQCS57kpS1K0gmD7Mk+L6clQH6IHyADsgrvH++BIABZlAdKUQGTlkFgEqADMcH4OqmrIWC2pciI0BKiAQZMbwwB8SyvDagIsyeLwADkAACx6heFe7YoeaBRTecCDQA3BUYDFYwg0JoNxjrQYg3cAtvCPPWpCCDA7irdtaSbUNkC7fth38GwbohOFSCgKa7wqXgLwgNq2pAA=="} -import { startsWith } from '@studiometa/js-toolkit/utils'; - -startsWith('string', 'str'); // true -startsWith('string', 'no'); // false -``` - -### Parameters - -- `string` (`string`): The string to test. -- `search` (`string`): The string to search for at the begining. - -### Return value - -- `boolean`: whether the string starts with search or not. diff --git a/packages/docs/utils/string/upperCase.md b/packages/docs/utils/string/upperCase.md deleted file mode 100644 index 2bc297ffe..000000000 --- a/packages/docs/utils/string/upperCase.md +++ /dev/null @@ -1,20 +0,0 @@ -# upperCase - -Transform a string to `UPPERCASE`. This function is an alias of `String.prototype.toUppercase()`. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"836fd959760e3e17da8011b74ad06a3ee621f69e5bf5ddbb91ed3afef488904f","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvQVhykAwlxiM4aUuzABzRL1Xqt3HXo2aAOmHYBbLBFJppssori4qUCCISIQ8ySTu8zLpqJrxoELwAqgAK0QCiAEryAIIAynEAdJTUzJpeyMggHGAA1tn4aGhYcIgA9LUAVnAAtOEQrCXsaBmqglASljBozBmwRLWC4qxwtcZaE44KShkVlqwgALobVKrMdkgAnFSsMFpo+IdUw6SaQ3gycs6uRRq4iAAMVCL4e8xiZIcAL4UdDYN4EYgAq50BjeFgcLh8B5OJQqEJaIzozSGYL6MwWay2ezIpYubLuTx4Xxgfz2IJzTRhCIxeJJNKZbLDPJIAovUrlSrVOqNFptDpdHpoPoDIYjMYTKYzBkLR7LVbrLY7a6wgCsRyKp0050uORud28JKe2WKbwATF8fqQ/jRyB9AdsQCJoOCrDYAsAHKqXLxAQJSBBLLwAOQAAV6/QjspFrQg7U6aAV7GmUYA3OZzJbUVHUoneKksbxqTQwGgo9wc7x6mWAPIAWTiZYAKgkAJIAOQA4pXm33O3FR9lBsMkKAYac4BIwHgmiBAYCgA=="} -import { upperCase } from '@studiometa/js-toolkit/utils'; - -upperCase('Some String Content'); // SOME STRING CONTENT -``` - -### Parameters - -- `string` (`string`): The string to transform. - -### Return value - -- `string`: The transformed string. diff --git a/packages/docs/utils/string/withLeadingCharacters.md b/packages/docs/utils/string/withLeadingCharacters.md deleted file mode 100644 index 5b990c38c..000000000 --- a/packages/docs/utils/string/withLeadingCharacters.md +++ /dev/null @@ -1,20 +0,0 @@ -# withLeadingCharacters - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"5cffbbf8b31b0e9f203bb2d90e814c714bcb863d38b3691f215b3a821a70eb7c","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO7s0+ADIxmUdmADmAYXzNSzMWTiM4aUmvWJeJsxoq8ROvQdJxL189zenzAHTDsAWywIUjQZOUVlVQ1tXX0aF0oQKAgRBEQQAEEoKF55GF51dhIpBzjnODyIPPwCk10wiH4agqKSq28NADoktGZ1dORkECw4gKT3DV4AFVqOm3Uq3gDodn4MHoBdCmHRvXGqMqcEytmCo/jDJZVctGr8joatnZBSGDRBUjBKMEFWVm2ww4YAA1kl8Gg0FhXAB6GEAKzgAFo7hBWCC5F0TIJVBAAu9mF1YEQYYJxKw4DDJuoYbJ5EoVOZYsdDF0IQFWCBNtsQPVQkgAJxUVgwDTyJAAJgAjFQ+qR1O88HTIoyYo5LolhWpcIgAAyHdXOQUAXwo6GwOoIxDIvToDAyLA4XD4yoZ0S0hpOxk6Fnm5jsFwqXgWnj9Gj8gWCoXC9KiTM9hiSKTSeGytzmbVF9gTLiWDz5jWaD0zUmpPVl/UGuzGEx9Mzm1KWK1U62e1f2SUDJ3r5xzlTuvBueYbcrQbde70+3wov3+gJAwLBVAhUNhCORqPRmOxuPxfSJMBJZPYFKpPtpETd8fKJzZaA5XJ5BaQAHYZQvRepxYhpRX5YqMldOM1RvRMtTAHUJQNUDyD1U1zRwPBCBIchZTtJg2E4HgYxVd1mQ1IxqWDf1sxg1ww3UUNqQjIIQjCIDVQ9Mik1SdIshyFpCmKLMuyuAd81HXgmk4ksKPLahKyQIYRhrKhGzOCim1WVsuRePZmAOEBeNzBTtP7aoh34kcnlU4Y3g+L4fj+AEXkXcFIWhRA4URFEIDRDExx3CQ90JYlSXJSlqQvWNGPwio7wfbk5NHJApQlAAWYVP2/X8JP/e0QAYvC+ySYEdQAZmgllYN1Y0eREaBLUjOjeGAHCrxA4rKmNARSDxXgAHIAAEvLxAl11c9y5H8k84A6gBuPw/Cy68msYDrqQ6uwOoAfRWjruHG3g4V4HwQDW6iQGmy9gKYubVpWxblrWjatp2vaDp9Pakh8pBQDtUU4Akb4MkREBjWNIA=="} -import { withLeadingCharacters } from '@studiometa/js-toolkit/utils'; - -withLeadingCharacters('string', '__'); // "__string" -withLeadingCharacters('__string', '__'); // "__string" -``` - -### Parameters - -- `string` (`string`): The string to modify. -- `characters` (`string`): The characters to add to the start of the string. - -### Return value - -- `string`: The modified string. diff --git a/packages/docs/utils/string/withLeadingSlash.md b/packages/docs/utils/string/withLeadingSlash.md deleted file mode 100644 index b4d074bf9..000000000 --- a/packages/docs/utils/string/withLeadingSlash.md +++ /dev/null @@ -1,19 +0,0 @@ -# withLeadingSlash - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"e739e48f533d6a4c805a6b31d85e57ecb9eec36c11dfc30d97a0b9d59205e9b2","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO7s0+ADIxmUdmADmAZVZd8jOGlJr1iXgaMbup88YA6YdgFssEUmhlzFy1Ru27KIFAQIgiIIACCUFC8zLys3sZmOnD4vGgQMWaGxgB0AWjM6qHIyCBYzKTMjgE2GrwAKvgwWRbqaRmO0Oz8GHkAuhSlpDBogqRgAY3NtW2y8pnxKolwyfj9gyAcYADWAfhoaFhwiAD0JwBWcAC06RCs23I5BoKqEI4jzDmwRCeC4qxwE4zE5zLxLXyrHL7RysEB9AYgAwVBiIACcVHiGnkSAAjAA2KgFUjqEZ4UFKcFaVYBLa4RAABioInwFWYYjISFRAF8KOhsHSCMQOYS6CiQCwOFw+OSEhDdPpshprIr1FYWnYHM5XO4ZZS/CkAkEQnhItFYosfG0Vrp2pkZnlCYViqVypVqlQZg0muq6uleJ1VD11kMRmMJlQpj7Zp4FrKrZC4RstrsqPtDsczpcbhA7g80E9Rq93gUvjAfn92ACgSqQZ4KZb9WtobD4R6iSi8QTNjAsfhcV2iSSxbqG9SMWo6QAmJksyrs8gMnl8nB4Qgkcgi+hMNicHgeeT14yNhWtZWtNUzexOFxufdg0f+KhG0IRKKxylJG1+2L2/JOpAlGUrLuoiKpetMYF+gG3S9ImIajOMkzep6oLvpan4pMGmxqCmBAHEcpwXNctz3I8zxFh8pblv8gLAiOR6Qs2cIIkibi4vSADsGI9uo2KIPijrEqSYT0XKBrjmAdIAMwzqy85IPSXIIiI0ACte2q8MAd6HmJqRcgIpBvLwADkAAC5ESMWzBEdmuZyL8NHGQA3PY9iiVS8rGTMxncE5vBnLwtggNWrRBW5dZxsexkhcYPl+QFQUxRoQUBFZSCgKKPZwBIExhJcIBclyQA==="} -import { withLeadingSlash } from '@studiometa/js-toolkit/utils'; - -withLeadingSlash('string'); // "/string" -withLeadingSlash('/string'); // "/string" -``` - -### Parameters - -- `string` (`string`): The string to modify. - -### Return value - -- `string`: The modified string. diff --git a/packages/docs/utils/string/withTrailingCharacters.md b/packages/docs/utils/string/withTrailingCharacters.md deleted file mode 100644 index 49574b20b..000000000 --- a/packages/docs/utils/string/withTrailingCharacters.md +++ /dev/null @@ -1,20 +0,0 @@ -# withTrailingCharacters - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"33f88b6ace6394f7dea3fbb04f30cd9a7d6620c2a5951e749fd38f8920793edd","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO7s0+ACqlm7DmADmAYXzNlYsnEZw0pdhsS9jpjRV4idemqTgWrZ9d1cn3AHTDsAWywIUjQZOUVlVXdtXWZ9Z0oQKAgRBEQQAEEoKF55GF51dhIpeziEuDyIPPwCmDBciH4agqKSy28NADoktGZ1dORkECw4gKS3DV4FWo7rdSreAOh2fgwegF0KYdHlcaoyxwNp2cP4p0q0auYcxfzeeqhN7ZBSGDRBUjBKMEFWVi2wzUAGskvg0GgsC4APTQgBWcAAtFcIKxgXIusZBFAJAF3swurAiNDBOJWHBoZN1NDZPIlCo1FoHOcDF1wQFWCANlsQMZdAxEABOKiserqeRIABMkqofVI6neeFpkQZMWZFSSalwiAADAd1U4kIKAL4UdDYbUEYhkXp0AUgFgcLh8ZX06IaWJHZxGTrqLzzWxnCr+9yeOa+fxBEJhV1RRmelmJKgpNJ4bK5e5tep2A3HK4tB4NXhNAtZqRUnqy/qDHZjCa+k4FKmLZY4tbPWt7JJBi6NnPlXv5m4Z6r3R4d17vT7fCi/f6AkAgsEQqGIWEI5EQVHotCYj44iB4vqEmDE0mqClUmkRN3x3PONloDlcnl80JIADsMsXYoliGlVbyoqGSxqqHr3ggIpmNq349jauqmuaOB4IQJDkLKdpMGwnA8OEdJxmqA4GD68whjY/Zei44YaGGVJ+IEwShHhKrukyRFJskqTpFktyZsU2Zwc4dyzI8xbNHx7QVr01ZIEMIx1lQzYzE2Db5q2qzrFyLy7Mw+wgIJlTKRRiaXNcvGjiJDQTm8HxfD8fwAi8S5UOCkIwvCSIomiGJYgeR4EkSJJkpevrXvhYFsZRj7PtyilygKACMkoAGwir++BSt+coKvaoGsQmGpQWA2oAMz6uxSA6saPIiNAloMdGvDAMxt6EZRvDGgIpCHrwADkAACvm4viHmbtuchBRevUANx+H4eV3uxhi9VSvW2L1AD6G29dw028LCvA+LyvpbUd803gR4FLYwK0ndt61bTte0HUdVKnSAST+UgoB2vUcASN8GQIiAxrGkAA="} -import { withTrailingCharacters } from '@studiometa/js-toolkit/utils'; - -withTrailingCharacters('string', '__'); // "string__" -withTrailingCharacters('string__', '__'); // "string__" -``` - -### Parameters - -- `string` (`string`): The string to modify. -- `characters` (`string`): The characters to add to the end of the string. - -### Return value - -- `string`: The modified string. diff --git a/packages/docs/utils/string/withTrailingSlash.md b/packages/docs/utils/string/withTrailingSlash.md deleted file mode 100644 index 853db49df..000000000 --- a/packages/docs/utils/string/withTrailingSlash.md +++ /dev/null @@ -1,19 +0,0 @@ -# withTrailingSlash - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"9b082e3d3584d7b1512746d7582195d3f23bd6a092049384b1c42bfc27f570c4","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO7s0+ACqlm7DmADmAZVZd8jOGlLsNiXgaMbup88fUAdMOwC2WCKTQy5i5atvbdlCBQECIIiCAAglBQvMy8hipq6mY6cPjxELFmhrYAdIFozOphyMggWMzKToE2GrwK+DDZFslomU7Q7PwY+QC6FGWkMGiCpGCBDU21ybLyWQm+dXCp+H0DIGoA1oH4aGhYcIgA9EcAVnAAtG0QrJtyuQaCUBJOw8y5sERHguKscEfTI6zbyJPwrXK7JysEC9fogAyVBiIACcVFYMA08iQAEYAOxUQqkdTDPDApSgjT+NKBNS4RAABioInwlWYYjISGRAF8KOhsHSCMQOQS6EiQCwOFw+GSfEkqXpptYcpYlS0HM5XO5PPJyYstCtAsFQngojE4gskildBkstN8gSiiUyhUqjVlclJs1bDaOs9umtBsNRuMqJ7ptr0ubZd7lroAxtjNsqLt9ocTucrhAbnc0A8Rs8IK9Ch8YF8fqp/oCZRT9XHIdDYVQEe4kAA2fEbDHqLGIPEOokk8LVvXymnGOkAJiZLOU7PIDJ5fJweEIJHIIvoTDYnB4Ed1cpW+ndqtsVi9GnVLjcHmHB4CVCNYUi0Xm0aWKxtcTtBUdSFK5VZaom3depGnPVp2k6f0YXWIYRjGCYwPDYFXxrK00njLYdj2A5jjOS5rlue5HgLIt3k+b5fkrd0gS8fcwTrNAoRhOFmyRbF6VRTtMXwHEO0JYkxVvBjqTRcckAAZmnVk5yQekuThERoAFDVr14YA9zfWs0l4LkBFIQteAAcgAARIl43nwzNszkSiKyMgBuBwHGEylDyM6YjO4BzeBOXg7HhGiApcuitPlRgPJoryfL8gLAQCwIyKQUBRQxOAJHGcJzhALkuSAA="} -import { withTrailingSlash } from '@studiometa/js-toolkit/utils'; - -withTrailingSlash('string'); // "string/" -withTrailingSlash('string/'); // "string/" -``` - -### Parameters - -- `string` (`string`): The string to modify. - -### Return value - -- `string`: The modified string. diff --git a/packages/docs/utils/string/withoutLeadingCharacters.md b/packages/docs/utils/string/withoutLeadingCharacters.md deleted file mode 100644 index 9cfac084e..000000000 --- a/packages/docs/utils/string/withoutLeadingCharacters.md +++ /dev/null @@ -1,20 +0,0 @@ -# withoutLeadingCharacters - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"b9f13cfbad80493a4b18ab1edf7b07068e58c79560553cb82927e30d8f33d468","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO7s0hQWgAyMZlHZgA5gGF8zUszFk4jOGlIbNiXmYtaKvEXoNHSca7cvcP5ywB0wdgBbLAhSNBk5BWVVdS1dfUMaN0oQKAgRBEQQACUYIOIYXnkizXYSKSdE1zgBUggg4vwis30IiH4m0vKYKU8tADpUtGZNLORkECxEoNT+zV4AFWabXy1iiF4C9X4MIYBdCknpg1mqKpdk2uWii6TjDd5SfMK6hq7VtoOjkGe0QVIYEoYEErFYh0mHDAAGtUvg0GgsO4APTIgBWcAAtGgIBBWNC5AMzIJ1A0YCMBrAiMjFOxWHBkfNkbJ5BBFCo1JYEpdjAN4UFWCB9ocQK1wkgAJxUVi9TTyJAAJgALFQRqRNOS8Czohy4jpnPcUtKNLhEAAGc4G1ySgC+FHQ2FNBEK5FVdAY2RYHC4fG1bJinPiVqupjWVlWdk0DjuNR8ke8Ef8gRCYQifvZsS5weMqXSmTweQKJA+ZQqjmzbjejRKn3CvA6JZ6fTDQ1Vo3GxxmczDSxW80e23Yu2+ndOqRjV17twrtRxTxexf49WrfbVaBHv3JAKBFBBYIhIChsKo8MRKPRWJxeIJ6+JpKC5OYlJg1Np9MZYeZUX9uqz1SufJoAKQoimKHoAOwqoesryogyptuqmrZOmAZ6tyhoIMaYCmgqlr/mQSBmnaDo4HghAkK61DukwbCcDwkSshmgb6vhbihpGcaWNGM6cVoCbzAEwShHWKG/kGrGYWkGRZLkC5FDWpa9OWElVh8YH1p0ClNomgzDO2SATFMXZUP2Nw6Qsc6DsOQo/CczBnCAE4PGZTmVnOzxFkUS7vDWYEbn827AqC4I/EecIIkiiCohi2K4vihJ3hID4UlSNLiO+TKiZm4k8m4gHAcKJlrkgACMADMFrQVosHwdQ+gah6IBZcx6E1KkUKmmVeG5YRNoiiI0BOkJqa8MADE6tlLG5bUNqqQA5AAAolZIjBesXXnIaV0nAc0ANwBAEzVoTOjBzQA+md8xzQ451nXN3C7bwqK8H4ophq9h3fkxx0SadV03Rd92Pc9r0CSAqTJcwSCgO6vRwBIQLZBiIA2jaQA==="} -import { withoutLeadingCharacters } from '@studiometa/js-toolkit/utils'; - -withoutLeadingCharacters('__string', '__'); // "string" -withoutLeadingCharacters('string', '__'); // "string" -``` - -### Parameters - -- `string` (`string`): The string to modify. -- `characters` (`string`): The characters to remove from the start of the string. - -### Return value - -- `string`: The modified string. diff --git a/packages/docs/utils/string/withoutLeadingCharactersRecursive.md b/packages/docs/utils/string/withoutLeadingCharactersRecursive.md deleted file mode 100644 index 102f332ef..000000000 --- a/packages/docs/utils/string/withoutLeadingCharactersRecursive.md +++ /dev/null @@ -1,21 +0,0 @@ -# withoutLeadingCharactersRecursive - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"350e34baa04ae6fae68c4151cdf963fb99e280cbe17b0c6911d3e16be722f957","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO7s0hQWgAyMZlHZgA5gGF8zUszFk4AJRgjBpOOxKM4aUhs2Je9x1oq8Reg0asu3J24AhycAHTB2AFssCFI0GTkFZVV1LV19QxorMwsrG1wqKAgRBEQQMyjiGF55Gs0CqW9MvzhaiFr8Gvt9BIh+TvrG11CtXlJzS2sSVgwAOkpqZk0y5GQQLEyoxcCxgBUukfdNdt4q9X55kABdCnXNg22qZt9stoOal6zjU7UoU7qI16C1u6wmaEsYEoYEErFYoJAHDAAGtFvg0GgsHBEAB6HEAKzgAFo0BAIKxkXI5vZBOoIFEYGhmHNYEQcYp2Kw4DjdpocbJ5BBFCo1E4Mq9jLkpgU5uioqwbrcQD14kgAJxUVgwLTyJAAZj1VCZpE0jLwAuSIrSOh83xyk3yJEWSNwiAADM9bX51QBfCjobCugjVchGugMcosDhcPgWoUpUXpL1vKWOmB2UbOI5OTxfVohY7BbNaCLRWLxRKC4WpMXJyUO6aFEDFUp4SrVQa8BokJp1qwAw4qvoDQHd7XFk4TPKN2YLI3LVb3LY7TO8D4T07ndiXEF3DbLz0tN5rw554+k3h/AfdY1oXdgxmQ6Gw+F7pGoqjozHYvGEklkikqRpOkGSZFkYDZDkuR5TN+SSeMrVrI962nGU5QVa4lSHJAAA5DURbVNF1RADXnE0zXKONq0TG1kPtVCnU1DRXQAJkPCVyHdP0AxwPBCBIUNqHDJg2E4HhK0tGskzo0wGwKDNjgLHMvD7bEJyLXlSxiOIEiohNrXFO1ZIYpsWzKCoYCqEhOzHXsZOvIEK36Gzhl5cY5JmK55xWJA1n3R4V2OE8byCi8tx3G49weZgnhAM8fnXeL+wvK8L0BId7xAcEnwoGE4QRd80QxLFcQJYlSXJSk72AiRQOZVl2XEaDeTgqt9KQjjjOlEhZTQeVFSobDEAARgAFhwzVCOI0ilnIiMQD0xDpM61NG2dZj9XYu0kDdbjqEDPiQ0WGh6BE6NxMWqTaJWjz015JSPBUmSHs0DTMy08tdPg6iDNU1aCkWMy20sjtR2GJK2jSwdb14ZywZ7Dcp26mBZ2OhdfKXALBtXdc3LC6BtyuBFotiiHgqezrfigf4oZvYFIofCFSChXKXwKjQPwIYqfzK/9KqAiEQMZeqIMazluRay6aMM1p/p69CBuVW8kBY4aAFZJp1fB9Xw41TXmqXfpkuWmxdJBRq270uKVERoCDMsdN4YAJIQq6ZZTW7eB9ARSHpXgAHIAAEavpYXeYqwC0DFrl/YAbgiCJDY6oyTcYf28Rg45/c8dP/e4WPeDxXgwiV44S8T772uWlPbrTgB9Bu695bOA4bvOC6LkvNJACu2qW66a5MtPm5ztv88LnFi9L8IQEWOqkFAcNtWsSQ8EJEAfR9IA="} -import { withoutLeadingCharactersRecursive } from '@studiometa/js-toolkit/utils'; - -withoutLeadingCharactersRecursive('///string', '/'); // "string" -withoutLeadingCharactersRecursive('____string', '__'); // "string" -withoutLeadingCharactersRecursive('string', '__'); // "string" -``` - -### Parameters - -- `string` (`string`): The string to modify. -- `characters` (`string`): The characters to recursively remove from the start of the string. - -### Return value - -- `string`: The modified string. diff --git a/packages/docs/utils/string/withoutLeadingSlash.md b/packages/docs/utils/string/withoutLeadingSlash.md deleted file mode 100644 index dfae7243f..000000000 --- a/packages/docs/utils/string/withoutLeadingSlash.md +++ /dev/null @@ -1,19 +0,0 @@ -# withoutLeadingSlash - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"45c9b51c8ef99395903cb63888d2adb9cd23b32766377873c6ed5ab0f598c42d","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO7s0hQWgAyMZlHZgA5gGVWXfIzhpSGzYl5GTW7ucumAOmHYBbLBFJoZchctXqtuvqUIFAQIgiIIABKMM7EMLzyCax+phZ6cPgCpBDOvMwWxqYAdMFozJoRyMggWMykzM7Bdlq8ACr4CS2aiRC8cer8GKUAuhQ1pDBogqRgwR1dRa2y8hCKvClqaXAZ+KPjIBxgANbB+GhoWHCIAPQ3AFZwALRoEBCsx3LFRoLquVPMYqwIg3RTsVhwG7dG4rHwqLYBXbFc7OVggEZjEBGeoMRAATioKS08iQAEYCdR6popnhYWtfAidLtgkdcIgAAxUET4erMMRkJB4gC+FHQ2DZBHi5CoNHoTDYnB4XlWinh/iZ+kMSzMhSsmhsuocTlc7k8dNVqURQSooXCeBicRIiU6G0tPR2+myuXyhq0pRlFSqNTqDSaVG67RdEde/Wg7CG+wmUxmcyoC19PXNnk26vS+kThw0pyo50u1zujxebw+Xx+f2cAKBMBBYIhUO1MO89LVpkCmWRaFR6Mx2I8SAAbBSiZoSYhyQHSNTcSAsz2rZkWRo2QAmLk8hr88gckVinB4QgkaXUOjLlgcLh8VduvsGbq2bUG7qOFxuDzKuHPsyNphBE0SxPEzrJG6eaZF6eQFN0/qUpUSDVLUvJhli2qRoseq9LGgzDOiByTNMszzFG2FZq6jIwXsxE1EcxYEBcVy3A8zyvO8nxoN80z1o2wKguIbbQk+jIvgOQ4YuG5RjnOpIAMyEjAxL4GSFJyUutJdhaElAYWYBsspIDcryh5IOyQqYiI0ASj+pq8MA/7doBnpCnBvAAOQAAJ1hIDblBxVbcXIwngnAXkANyOI44nqi+jBee2epedwUW8HcvD2Fheo5XFukMgluxJd0aUZVlOVfiAwSBcwSCgDeqlwBIcyRI8IBCkKQA="} -import { withoutLeadingSlash } from '@studiometa/js-toolkit/utils'; - -withoutLeadingSlash('/string'); // "string" -withoutLeadingSlash('string'); // "string" -``` - -### Parameters - -- `string` (`string`): The string to modify. - -### Return value - -- `string`: The modified string. diff --git a/packages/docs/utils/string/withoutTrailingCharacters.md b/packages/docs/utils/string/withoutTrailingCharacters.md deleted file mode 100644 index 9e9e1a7b9..000000000 --- a/packages/docs/utils/string/withoutTrailingCharacters.md +++ /dev/null @@ -1,20 +0,0 @@ -# withoutTrailingCharacters - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"745660500a65f3665a162f9c0cc091d1de7440ed6f0e6f8bfc91abd0b960e943","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO7s0hQWgAqpZuw5gA5gGF8zVWLJxGcNKXZbEvU+a0VeIvQZqk4Vmxc3d3ZzwB0wdgBbLAhSNBk5BWVVdU9dfWZDV0oQKAgRBEQQACUYIOIYXnkizXYSKUdE5LgBUggg4vwimDAoXgh+JtLy1utfLQA6VLRmTSzkZBAsRKDUjy1eJWb+201iiF4CqHZ+DGGAXQopmdU5qirnIyWVy6SXWrRN0nzCuobu3laoQ+OQF7QglIYEoYEErFYRymGgA1ql8Gg0Fg3AB6FEAKzgAFonhBWDC5INTIIdg0YKNBrAiCjFOo4CiFpoUbJ5BBFCo1BodE57kZBgigqwQAcjiBTPoGIgAJxUVitTTyJAAJgArFRRqRNOS8Czohy4loElcUrKLLhEAAGC485JIKUAXwo6Gw5oIhXI6rokpALA4XD4urZMU58RtDxMA00PjW9juNWjnm8q38gRCYQigfZsS5Rt5JrSGSyuVeJE+ZQqDjD1349UaJS+bQ6XXr5b6jOG6rGExOs3mkZuRUZGy20F2+2Ff1OzHOIDjDwHleq86evBeBVLNY+9e+vymAKBIIoYIhUJAsPhiORiDRmJxEDxBLQRMBpKC5OYlJg1NprHpjOZURBvqOZVq4/JoIKwqiuK4RIAA7GqZ7yoqiCqp2mratkmbBga3JLkYqQaOaSrWvh5CWo6zo4HghAkB61BekwbCcDwkSslmIaGqBxiMgmdiLsabjJloSaMgEwShOEbF6tmoZkQgVDpJkeB5OuRQtr0lTce8dYrN8TZlppwmaB21BdkgkzTL2VBDssg79iu2xjruVlnKkc7XHZAl5o8zwlkUm66S0bQufuwKguCkJ/OeVAIkiqIYtiuL4oSxKvu+n7fuIv4MpGAHsThIHyeBkEijZGqSgAjAAzCRSFaChaFmRh3rYcBcmCYRZpINVpHGkgFr2qKIjQK6EnprwwDSUBslcfJvD2jpvAAOQAAJpRIb6jIld4PnINLZXAy0ANwBAEbWzXhgmMMtjIAPp3ct9jLQ9y3cMdvBorwfhipGP3nYBHG4bmNQ3YyT0ra972fSi32/WsP2pFtzBIKAXqtHAEggtkmIgPa9pAA=="} -import { withoutTrailingCharacters } from '@studiometa/js-toolkit/utils'; - -withoutTrailingCharacters('string__', '__'); // "string" -withoutTrailingCharacters('string', '__'); // "string" -``` - -### Parameters - -- `string` (`string`): The string to modify. -- `characters` (`string`): The characters to remove from the end of the string. - -### Return value - -- `string`: The modified string. diff --git a/packages/docs/utils/string/withoutTrailingCharactersRecursive.md b/packages/docs/utils/string/withoutTrailingCharactersRecursive.md deleted file mode 100644 index 769d35f67..000000000 --- a/packages/docs/utils/string/withoutTrailingCharactersRecursive.md +++ /dev/null @@ -1,21 +0,0 @@ -# withoutTrailingCharactersRecursive - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"85535a2b2ff1cde6f7b01bf218bde2b534cd3f2ecb5f6b726cb75bb8a72db4db","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO7s0hQWgAqpZuw5gA5gGF8zVWLJwASjBGDScdiUZw0pdlsS87DrRV4i9BmpeevHTW5/e0CAHTB2AFssCFI0GTkFZVV1QN19ZkNLU3NLa1wqKAgRBEQQUyjiGF55Gs0CqS9M7LhaiFr8Grt9BIh+TvrGl1CtXlIzCysSVgwAOkpqZk0y5GQQLEyoxYCxpS6Rt0123iqodn55kABdCnXN1W2qZp8jXn2al6zfNrQO5igUBOdRGvQWt3WEzQFjAlDAglYrAhIA0AGtFvg0GgsHBEAB6PEAKzgAFo/hBWKi5HM7IJzhAojA0Mw5rAiHjFOo4Hjdpo8bJ5BBFCo1BodN5vkZclMCnNMVFWDdbiAevEkABOKisGBaeRIADMABYqMzSJomXgBckRWktBlXjlJvkSIsNLhEAAGZ4S7IagC+FHQ2HdBGq5BNdAY5WYYAwO1NUYAHMaUTrNHrEPr9Sb9OaoyArUK0AAZGAA9I+n7S52FFGOd0AJm9LV8SA9AaDODwhBI4eokaYbE4PESguFqTF9sljry0xgtlGmhCRw8X1ay8CwUO4UiMTiCUL49FFZbUqdc8WxVKeEq1UGvAaJCalbef3vqr6AxBj5127GE1nApZgWHMViQNYNi2eMjneA5eROM4LiuZEHmYJ4QDXH5YM+F9LBOAEgTfEEP3BO4QChGE4QRJEyLRDEsRxfEiVJclKWpWl6UZZlWRgdlOVYbleX5JIixtSdcJMc9ZXlRVrmVD8kAARkNTVU11fADRTU080tESj1tcVTxnGUXS1esDWbB02w7ahg27MNFhoehBw4Lg+EPFJjztCTqznBcjg3dxPAkwKglCiJolieJR2tCcTwdSTANMkArzKCoYCqEh7x/Z8jN+DpiITXh+my4Z4IAkyYGAxzllWe4oKoeCPj/Y430Qy5SPqx5Fkwt5mt6vC3wI4E4ITTryKZSiKHhRFkToqhMWxXECWJMkIApKk0BpaFOKZFk2Q5cQBJ5RdhLHTyDKnVpfOktAFSVRqEyQBtFIAdi1NMMyNHMzQtcoPLE+Lp0SyrXXMxAUwG6zlREaAQ0i/deGAGLRLi7y8purK/QEUgGV4AByAABDiJC45hmLWja5EOrl8YAbgiCIPNLct0YSzH53xoSCXxjx8bxfHuDp3gCV4MIVUXcWmb0i7xIxqSbC5xcAH1VeV3mCdVwXhdF8XeSlsAAbRwz2YVzneQ1/GtaFkW8TFiWjnFxYyaQUBIx1KxJDwYkQD9P0gA"} -import { withoutTrailingCharactersRecursive } from '@studiometa/js-toolkit/utils'; - -withoutLeadingCharactersRecursive('string///', '/'); // "string" -withoutTrailingCharactersRecursive('string____', '__'); // "string" -withoutTrailingCharactersRecursive('string', '__'); // "string" -``` - -### Parameters - -- `string` (`string`): The string to modify. -- `characters` (`string`): The characters to recursively remove from the end of the string. - -### Return value - -- `string`: The modified string. diff --git a/packages/docs/utils/string/withoutTrailingSlash.md b/packages/docs/utils/string/withoutTrailingSlash.md deleted file mode 100644 index c99725040..000000000 --- a/packages/docs/utils/string/withoutTrailingSlash.md +++ /dev/null @@ -1,19 +0,0 @@ -# withoutTrailingSlash - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"b47cab3a2c75439cab079ae13cb90b577f099e1246860dd2af42755832ca8d10","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvAO7s0hQWgAqpZuw5gA5gGVWXfIzhpS7LYl5GTW7ucunNAHTDsAtlgik0MuQuWr19rr6lCBQECIIiCAASjAuxDC88onGahqaFnpw+AKkEC68zBbG9gB0IWjMmpHIyCBYzKouIXZavEr4ia0ZaBC88VDs/BjlALoUdaQwaIKkYCEdXSVtsvIQikn+6Zn6YxMgGgDWIfhoaFhwiAD0VwBWcAC0vRCsh3KlRoKD+dPMpbBEK6KdRwK7dK6rXwqNKBLL4UqnFysECjcYgIyNBiIACcVFYMC08iQACYAAxUSqkTTTPCQ9Z+GFaILZEIaXCIckgET4RrMMRkJDYgC+FHQ2HZBAS5ApdCxIBYHC4fDpimhASZcMMy00tm1NmKVkczjcHi8KoZ6p0cJCYQieFi8RISU6m0ZGTgcNy+UKBrKFSqNTqDSaLW17Rd3SSfQGQxGKP2UxmcwWEbD5tdlp22T2dSOJzOF2ud0ez1e70+3xcv3+MEBwNYoPB5rV6WZ8MRyNRVAxniQAHZOfjCfgSZzKdS5c2trDgnjTOziVRubz+eQOSKxTg8IQSNLqLKmGxODxvGtVdONfotYbdYb9d0nK53J5T1CL1bZ6FwpEYnEEs6UnfLMcn4PICiKbpygpAMkFqepeWabsw0WX02l6fpoFjHMQETWZ5ioFDI3TVJMw9XZ41zUxjioU5zkuG57ieCAXjeNAPhmStqwBIFxAbMFtQhHx6RbGdsw7FE0R7LEAEZpIAVjxAlNCJRAyWgqkaSiKc3TbVl5yQABmJceVUVckFJIU0REaAJSfU1eGAV9hPfNteCFL0CgAcgAAQrCQq0qYsmJYuQeJBTyAG4nCcbTLTbRhPPBTzuAi3gbl4Bx0W1TKYqE88dM1RLtWS1L0syh8QBCALmCQUBZQJOAJHmKJ7hAIUhSAA=="} -import { withoutTrailingSlash } from '@studiometa/js-toolkit/utils'; - -withoutTrailingSlash('string/'); // "string" -withoutTrailingSlash('string'); // "string" -``` - -### Parameters - -- `string` (`string`): The string to modify. - -### Return value - -- `string`: The modified string. diff --git a/packages/docs/utils/throttle.md b/packages/docs/utils/throttle.md deleted file mode 100644 index 15a92ae13..000000000 --- a/packages/docs/utils/throttle.md +++ /dev/null @@ -1,25 +0,0 @@ -# throttle - -Limit the execution of a function one time for the given delay in milliseconds. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"5876abeb49d15811bf9d38bdc31c8032a4eb2e13385aee188a57dee0803eecbf","data":"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="} -import { throttle } from '@studiometa/js-toolkit/utils'; - -const throttledFn = throttle(() => { - console.log('Hello 👋'); -}, 500); - -throttledFn(); // Hello 👋 -``` - -### Parameters - -- `fn` (`Function`): the function to execute -- `delay` (`Number`): the delay in milliseconds - -### Return value - -A new function which will execute the given function at the given limited rate. diff --git a/packages/docs/utils/trapFocus.md b/packages/docs/utils/trapFocus.md deleted file mode 100644 index 9b0e104ce..000000000 --- a/packages/docs/utils/trapFocus.md +++ /dev/null @@ -1,37 +0,0 @@ -# trapFocus - -Trap the tab navigation inside a given element. - -::: tip -To understand the "tab trap" usage, read [Using JavaScript to trap focus in an element](https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element). -::: - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"c3e9a66d059cceec6a05173641a56af98cfb1f8bea5d9ea693ebd6178c95c4f7","data":"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"} -import { trapFocus, untrapFocus } from '@studiometa/js-toolkit/utils'; - -// Limit the tab navigation to focusable children of the document's body -document.addEventListener('keyup', (event) => { - trapFocus(document.body, event); -}); - -// Resume the trap and refocus the previously focused element -untrapFocus(); -``` - -## Parameters - -**trapFocus** - -- `element` (`HTMLElement`): the element in which to trap the focus -- `event` (`KeyboardEvent`): the `keyup` event object - -**untrapFocus** - -The `untrapFocus` function does not need any argument. - -## Return value - -Both functions return nothing. diff --git a/packages/docs/utils/tween.md b/packages/docs/utils/tween.md deleted file mode 100644 index 0c4e8475d..000000000 --- a/packages/docs/utils/tween.md +++ /dev/null @@ -1,168 +0,0 @@ -# tween - -Execute a function while tweening a value between 0 and 1. - -## Usage - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"e74fb4a0e961f4bef64339973e38d23e4f3d45f80a96a12b4288066d2d8fd0b7","data":"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"} -import { tween, easeInOutExpo } from '@studiometa/js-toolkit/utils'; - -const tw = tween( - (progress) => { - console.log(progress); // from 0 to 1 - }, - { - duration: 10, - easing: easeInOutExpo, - }, -); - -tw.start(); -``` - -### Parameters - -- `callback` (`(progress:number) => void`): the function called for each frame -- `options` (`Options`): options for the animation - -### Options - -- `duration` (`number`): The duration in seconds, defaults to `1` -- `delay` (`number`): The delay in seconds, defaults to `0` -- `easing` (`EasingFunction | BezierCurve`): The easing function or bezier curve, defaults to linear -- `smooth` (`true | number`): The smooth factor. Setting this disables the `duration` option. If `true`, uses default damping; if a number, uses that as damping factor -- `spring` (`true | number`): Enable spring transition. Setting this disables the `duration` option. If `true`, uses default stiffness of `0.1`; if a number, uses that as stiffness -- `mass` (`number`): When spring physics are enabled, the mass factor, defaults to `1` -- `precision` (`number`): The precision for when to consider the tween finished, defaults to `0.00001` -- `onStart` (`(progress: number) => void`): Callback executed on start -- `onProgress` (`(progress: number) => void`): Callback executed each frame -- `onFinish` (`(progress: number) => void`): Callback executed when finished - -### Return value - -The `tween` function returns an object with methods to control the animation: - -#### `start()` - -Use this method to start the animation which does not start automatically. - -#### `pause()` - -Use this method to pause an animation and commit its styles to the element. - -#### `play()` - -Use this method to unpause a paused animation. - -#### `finish()` - -Use this method to go to the end of the animation. This is an alias for `tween.progress(1)`. - -#### `progress(value)` - -Use this method to get or set the progress (`0–1` range) of the animation. - -```js twoslash -// @twoslash-cache: {"v":1,"hash":"32072d9d4c5bda13d17e5cd589eee5d2a612a0147b7ead214de14a264d021208","data":"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"} -import { tween } from '@studiometa/js-toolkit/utils'; - -const tw = tween((progress) => { - document.body.innerHTML = progress; -}); - -console.log(tw.progress()); // 0 -tw.progress(1); -console.log(tw.progress()); // 1 -console.log(document.body.innerHTML); // '1' -``` - -### Types - -```ts -type EasingFunction = (value: number) => number; -type BezierCurve = [number, number, number, number]; - -interface Options { - duration?: number; - delay?: number; - smooth?: true | number; - spring?: true | number; - mass?: number; - precision?: number; - easing?: EasingFunction | BezierCurve; - onStart?: (progress: number) => void; - onProgress?: (progress: number) => void; - onFinish?: (progress: number) => void; -} - -interface Tween { - start: () => void; - pause: () => void; - play: () => void; - finish: () => void; - progress: (value?: number) => number; -} - -function tween( - callback: (progress: number) => void, - options?: Options, -): Tween; -``` - -## Examples - -### Cubic bezier easing - -```js twoslash {8} -// @twoslash-cache: {"v":1,"hash":"d0d005ab7e33ae3ebe3462af589991fd1f6e8943fcadfb56ac5f7061b980cae2","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvNAHcYMMIxFtWAI2YiA1ol6MspCAHNS8ODrCCAtqrJ8AvAD5ewzZBlgKvCFnGS4Afh0AFTkFAHkfCTAeYNCwAB0wdkssCFI0aTjKECgIEQREEBD5KX4DS14ABmkIXgBGADpstGZDAuRkEA4wTWz8NDQsMwB6YYArOABaNAgIVk12NAa4NEEoCUsYFobYImHBcVY4YdkShv7LVhAAXWuqFeZ0pABOKlYFQzR8JABWKhbSIYtnhTgpst1cIhKlQRPhHhoaOREM8AL4UdDYSEEYhkZp0BiFER+DIwLgwKDFBSxErZB5PRAANjqbw+XyQdWh1EeQIJIFJcHJlLA4PYYEhACYYXDSAjcYy0RicHhCCRyP98Uw2JweJkSkoVOotDo9AZjKZzFYbKR7E4XG4PF5In5ArwhRFfNFuNSFIlkql0rqwVRcvk8EKBOUqjV6k1/q12p1ur0qP1BiNxlMZnMFksVmsNltmDsYHsDuwjic4uc0JcbncQHSCQB2AAsLLAn2+iD+XMBwMKoOFb1FEql8LEcrqqPR1ExypxauoGsKenhm0RfH0RhMcDMvAs1lx9wBBIAHG2uqyu6e433eVuzbuRWKkABmMcyidI18K2dKwoqkeS70HgzBgBgtInuylTvpeHZsogTa3jyeAwO8mxgAww4vogF6wuOiJIC2v6YP+2KqniIGFGBEHHo8BJ1Ix7adr8yH9g2mDvM+kJ4dKspInU4okXOAELpRvI0ZB9HsnUSFwSxyJsbyaAytE/BpJY3FER+/HsqewlkYBi40FRICrjK662LwD47nuB5WlJ9J1K+N7yQhrkAihhQ2aYWm4TpX5vtOipYkZ4lMFuODpBgfBuk60QNPyoqGC6ACiXDJQAYsIYhRLwAA+vAAEIwAAXuwZAAMKCKQJAFc4YCwPwI5QNkIYFEU+AwLwSUdgIOUel4pC8DY5VkLwIg1XVMzOAKDSJAAIjA/DMIIrBoHA0bMLwEKPD1GV9UIogerGHHSYgdQMhe7zwV2DJKahB2GH5cn4Z+hG4QZoVieqplEtEJJkhScTekOZ30uKlTMm5XYcg9hT8oKWTYZCTEgG9ulQl984Ub9vImt4ZCYLFVaNsaNq8EQEDsK1wZ5B1ADKJ7SF1galJGXzdTYhiikkHanY2SDioJzEIT2nnsYLKMyQFH2MSi9ZErAeB+mkGTAGzvAohGEAVAA5AAAnm6y64WGbTLM8yLPshxwHrADciSJP9Kz7QKwMlLwdhs4wiS8LoPm7hTwB+/7PXoQouacTADQqWBcDqaQFTewABnAyjvIwAAkwCB3AKLcCnjtSFrFChyHJf+71hg6MglQNFOnjMlUDTipK9R3KHaKJNwxeJIjHsKMsJ6ML32TrswSCgPiChwFEeATCAKIokAA==="} -import { tween } from '@studiometa/js-toolkit/utils'; - -const easedTween = tween( - (progress) => { - element.style.transform = `scale(${progress})`; - }, - { - easing: [0.19, 1, 0.22, 1], - }, -); - -easedTween.start(); -``` - -### Spring physics - -```js twoslash {7-10} -// @twoslash-cache: {"v":1,"hash":"db4fc5ceeb87f272e8eae06564f7c12193edb89e73b0a9e79385c33db318006c","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvNAHcYMMIxFtWAI2YiA1ol6MspCAHNS8ODrCCAtqrJ8AvAD5ewzZBlgKvCFnGS4Afh0AFTkFAHkfCTAeYNCwAB0wdkssCFI0aTjKECgIEQREEBD5KX4DS14ABmkIXgBGADpstGZDAuRkEA4wTWz8NDQsMwB6YYArOABaNAgIVk12NAa4NEEoCUsYFobYImHBcVY4YdkShv7LVhAAXWuqFeZ0pABOKlYFQzR8JABWKhbSIYtnhTgpst1cIhKlQRPhHhoaOREM8AL4UdDYSEEYhkZp0BiFER+DJwfTsMCGYoKWIlbIPJ6IABsdTeHy+SDqLOojyBBJApNI5MpWTe5MhACYYXDSAjcUy0RicHhCCRyP98Uw2JweJkSkoVOotDo9AZjKZzFYbKR7E4XG4PF5In5ArwqWAIr5otwaQpEslUuldWCqLl8ng3QJylUavUmv9Wu1Ot1elR+oMRuMpjM5gslis1hstswdjA9gd2EcTnFzmhLjc7vyAQSAOx/Lps76INsA3kgkVdMVISUgWHwsRy8WVBXUTHKnFq6gawp6eGbRF8fRGExwMy8CzWXH3JtIAAcbfeFPZiBP8cBwMKm7NO/Bg8QAGYpWPEUg39PMErChVQ9F3oPBmDADA6WPRA6kqAAWVlL07Ztb17QoYHeTYwAYUUwEhBCR2lWUkTgv9Z0A+c8VAwpwMgo9HgJTlhwvT5O27Hl70bDB3hfPCkAI0cZXHJE6nFMiAOxVUqL5WioIYjk6hvdskJeVDOLQGVon4NJLF4/DPyE78YJPcSsSAhcaGokAVxlNdbF4R9t13fcrTkhk6jfV5lNY081L5RzTD0/iDOIn9UXRGcJPM6SmE3HB0gwPg3Q9KI4GWMkKRdFyyF4AAfaRSEEGA8ucMBYH4MUoGyUMChAABRMBmFUd5eAFIUCvAuBFiiBpeAAZS2cQKWkfB2DgR1PRjAADDSiqmrxSF4ZheCm7LSHmmQK1YXh1jgJqWq+YqpqgQQZU9ebvE9BpEgASX4FbZpgKbPGW8rmEEVgSXEfh+DwncvHuyoGjqXhNtYbabGcOAYCgTx2Hu5bVstMh5rG3hDHYEgHUWUGtt4SHBGhqBeHJFYYGYKA40beSYMZc8OyQRk/LwNqKSCxAUMIr85VIiL/zMyj1Ssk1vDITAkriFK/AaSwuACC0D0W/LhHKyrqryWqAHV8AUVqMsMBz8AwLr8iWkxeAUfaYc8QnisO3hZf+y6ohjWXNDtnWvFUMYYDEXgdeYIh2BytJeA4Qx+jIXqABEYH4d7PvGmYVrqKaqfpRjnnplTEAIntOMdhBcMhJTBNC3PTLnKShb5IlohJfW3R9MA3IJcVxQ/byr05ZnClZ4VaWLjlhzL4SkCnPnyMk4DLL5EX4vF11qwz40bV4IgIHYKqQw1vA+qbEa7biSMIAqe2bAxsAkgpdPoI77OfK7XvqaeIeYJHoix/flEGyJWA8H9GkDIwAgxSBRCfCoAByAAAvmdYp8iyZmmLMeYix9iHDgJAgA3IkRIdcVh60FBSCMdhQGMESLwXQAUdxr2ABQyhFtMIKDzJgd4DQNKdW0qQCopCppwGUO8RgAASYA1C4Aom4FNHBUheBonoXQmRlD+46CBpKXgoxWrfV+qYehlDC46EaH8dRwwHZy3oXIsA3BpGJH7m6ZYTZGBWOyGuZgSBQD4gUF1SQeAJggBRCiIAA==="} -import { tween } from '@studiometa/js-toolkit/utils'; - -const springTween = tween( - (progress) => { - element.style.transform = `scale(${progress})`; - }, - { - spring: 0.2, // stiffness - mass: 1.5, // mass - }, -); - -springTween.start(); -``` - -### Smooth damping - -```js twoslash {7-9} -// @twoslash-cache: {"v":1,"hash":"4d7600b61f0ea79cf5ca6319e7206140f6ec3dba2c3dcb8d7daf49f70da1e944","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvNAHcYMMIxFtWAI2YiA1ol6MspCAHNS8ODrCCAtqrJ8AvAD5ewzZBlgKvCFnGS4Afh0AFTkFAHkfCTAeYNCwAB0wdkssCFI0aTjKECgIEQREEBD5KX4DS14ABmkIXgBGADpstGZDAuRkEA4wTWz8NDQsMwB6YYArOABaNAgIVk12NAa4NEEoCUsYFobYImHBcVY4YdkShv7LVhAAXWuqFeZ0pABOKlYFQzR8JABWKhbSIYtnhTgpst1cIhKlQRPhHhoaOREM8AL4UdDYSEEYhkZp0BiFER+DJwSyzL7FBSxErZB5PRAANjqbw+XyQdWZ1EeQIJIFJ5PwlLA4PYYEhACYYXDSAjcYy0RicHhCCRyP98Uw2JweJkSkoVOotDo9AZjKZzFYbKR7E4XG4PF5In5ArwhRFfNFuNSFIlkql0rqwVRcvk8EKBOUqjV6k1/q12p1ur0qP1BiNxlMZnMFksVmsNltmDsYHsDuwjic4uc0Jcbnc+QCCQB2P5dVnfRCtgE8kFZN6iiVS+FiOXiyoK6iY5U4tXUDWFPTwzaIvj6IwmOBmXgWay4+6NpAADlb7zAnw7h7jgOBhTXZs3IrFSAAzEOZSOkc+J5glYUVXu53oPBmDADBaQPRA6kqAAWFkzzZRAmyvHtChgd5NjABh+yfRBYJAWFh0RJBoO/Kc/xnPEgMKECwP3R4CQ5SU23gjsu25G8Gwwd5H0hPCCPfIjIPFUjf2xVVKN5GjwPo9k6kvZjzyQJCuWvXlvA0RZaK6AdiLfWUkTkkSsX/WcaCokBFxlZdbF4O8Ny3HcrWk+k6nFeTT0UxB5O7Di7NMHjdPw6V9KQNyjOncT1XMk1vDITA+DdJ1omWMkIC+F1HLIXgAB9pFIQQYBy5wwFgfgBygbIQwKIp8EK/k0vwAQETSBpeAAZS2cQz2kfB2DgR0PWjAADNB8pgIavFIXhmF4IbMtICaZHLVheHWOBmFUd4esKoaoEEGUPQm7wPVjBsZMgn5OQ8hCGWQjj6rZbDIWU/iQtw8LyMiwDeSJaISVSik4m9YU6Jc54rvbWS7t5B7BT7bScI5PSPyQcd0UnUSTIkpg1xwdIMASqs6TQY0bV4IgIHYCrgzyaq2sbbbA1KSMvkKmxDFFJIz1O4nQsqV8FIQtjVLwXmnqhoLCLlVyUXrIlYDwP00gyYAmd4FEIwgCoAHIAAE83WLXCwzaZZnmRZ9kOOBtYAbkSRJfpWXhYfDOwmcYRJeF0PzNzJ4BPa93g0JgDDc0wd4GnUkRNN4N2fbgO2pHVigA/9pOvdhnRKgaZleFGVbmBSUVDCasQ0gDtFEm4RPEhdonG0YavsmXZgkFAfEFDgKI8AmEAURRIA==="} -import { tween } from '@studiometa/js-toolkit/utils'; - -const smoothTween = tween( - (progress) => { - element.style.opacity = progress; - }, - { - smooth: 0.1, // damping factor - }, -); - -smoothTween.start(); -``` diff --git a/packages/docs/utils/useScheduler.md b/packages/docs/utils/useScheduler.md deleted file mode 100644 index 03dbb38df..000000000 --- a/packages/docs/utils/useScheduler.md +++ /dev/null @@ -1,36 +0,0 @@ -# useScheduler - -Use this function to generate a scheduler in order to group the execution of some tasks in the specified steps. - -This avoids layout thrashing when working with the DOM. Read this [web.dev article](https://web.dev/avoid-large-complex-layouts-and-layout-thrashing) for details. - -## Usage - -```js -import { useScheduler } from '@studiometa/js-toolkit/utils'; - -const { before, after } = useScheduler(['before', 'after']); - -after(() => console.log('after')); -before(() => console.log('before')); -before(() => console.log('before')); -after(() => console.log('after')); - -// Will output: -// before -// before -// after -// after -``` - -### Parameters - -- `steps` (`string[]`): the list of steps the generated scheduler should have - -### Return value - -This function returns a scheduler object with methods to add functions to execute on each given step. - -```ts -function useScheduler(steps:T[]):Record void) => void> -``` diff --git a/packages/docs/vite.config.ts b/packages/docs/vite.config.ts deleted file mode 100644 index 05d063b65..000000000 --- a/packages/docs/vite.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from 'vite'; -import tailwindcss from '@tailwindcss/vite'; -import llmstxt from 'vitepress-plugin-llms'; - -export default defineConfig({ - plugins: [tailwindcss(), llmstxt()], - // The code samples import the package by name and must compile against the - // sources, not a build that may not exist. The `typescript` condition of the - // `exports` map points at `src/`, which beats hand-written aliases: it cannot - // drift when the package tree moves. Both resolvers need it — VitePress builds - // a client bundle and an SSR bundle. - resolve: { - conditions: ['typescript'], - }, - ssr: { - resolve: { - conditions: ['typescript'], - }, - }, -}); diff --git a/packages/eslint-plugin/src/utils/ast.spec.ts b/packages/eslint-plugin/src/utils/ast.spec.ts index 49772553c..c842ba0cb 100644 --- a/packages/eslint-plugin/src/utils/ast.spec.ts +++ b/packages/eslint-plugin/src/utils/ast.spec.ts @@ -5,7 +5,7 @@ import { findComponentConfig, getProperty, hasDecorator, isComponentClass, walk * Decorators and type arguments cannot go through the RuleTester — its parser * is espree, which reads neither. The helpers reading them are unit tested * against hand-built nodes instead, and the rules using them are exercised - * end to end by `oxlint` over `packages/v4`, which parses both. + * end to end by `oxlint` over `packages/js-toolkit`, which parses both. */ const decorator = (name: string, called = false) => ({ diff --git a/packages/v4/DESIGN.md b/packages/js-toolkit/DESIGN.md similarity index 98% rename from packages/v4/DESIGN.md rename to packages/js-toolkit/DESIGN.md index f7f87188b..c0f6495dd 100644 --- a/packages/v4/DESIGN.md +++ b/packages/js-toolkit/DESIGN.md @@ -586,10 +586,10 @@ It derives the answer from the DOM. It keeps no registry of instances. ### Where the instances live -An element publishes its instances under `Symbol.for('@studiometa/js-toolkit-v4/instances')`. It is not public API; the four lookups are, and between them they express every read the map answers. In a console, read them with one line: +An element publishes its instances under `Symbol.for('@studiometa/js-toolkit/instances')`. It is not public API; the four lookups are, and between them they express every read the map answers. In a console, read them with one line: ```js -$0[Symbol.for('@studiometa/js-toolkit-v4/instances')]; +$0[Symbol.for('@studiometa/js-toolkit/instances')]; ``` The element overload `getInstances(el)` answers "what is here", in mount order. It reads the map directly and never the DOM, so it is the only form that reaches a **detached** element — the string form cannot, since `document.querySelectorAll()` does not see one. Pass the detached root as `root` when a name lookup has to reach inside it. @@ -981,7 +981,7 @@ This is the chain of `resolveStrategy()`. The manifest entry stands in the middl ### 11c. `registerManifest()` ```js -import { registerManifest } from '@studiometa/js-toolkit-v4'; +import { registerManifest } from '@studiometa/js-toolkit'; registerManifest({ Accordion: () => import('./Accordion.js'), @@ -1030,7 +1030,7 @@ The internal diagnostics module owns the dispatch and the `warn()` and `warnOnce Recovered load, mount, invalid-strategy and `Base` lifecycle failures report exactly once. Isolated signal, context subscription and teardown, attribute watcher, service, scheduler tick and task, DOM-update runner and extendable-event callbacks report and continue. A scheduled task also rejects its own promise with the same value. Direct caller-owned failures stay throws or rejections: decorator and manifest-adapter misuse, shared-runtime incompatibility, service startup rollback, caller-owned teardown, `viewTransition()` and `swap()`. ```ts -import { DIAGNOSTICS, EVENTS, type ToolkitDiagnosticDetail } from '@studiometa/js-toolkit-v4'; +import { DIAGNOSTICS, EVENTS, type ToolkitDiagnosticDetail } from '@studiometa/js-toolkit'; document.addEventListener(EVENTS.diagnostic, (rawEvent) => { const event = rawEvent as CustomEvent; @@ -1047,7 +1047,7 @@ document.addEventListener(EVENTS.diagnostic, (rawEvent) => { ### 11f. Further layers 1. **Manifest generation from a bundler glob — built.** `defineManifest({ modules, mountStrategy? })`, `fromMetaGlob()` and `fromWebpackContext()` add path-to-token derivation (`index.ts` falls back to the parent directory), a lazy and eager Vite glob guard, and a deferred webpack adapter with no bundler dependency. The package-wide `mountStrategy` emits entry wrappers only when it is not `eager`. Duplicate tokens give a warning and keep the first path. -2. **A cross-copy shared runtime — built.** `shared-runtime.ts` owns `globalThis[Symbol.for('@studiometa/js-toolkit-v4/runtime')]` and gives each subsystem a typed slot with a revision. Duplicate copies reuse the canonical `defaultScheduler`, the registry maps and controllers, the DOM mutation observer and queue, the root-context state, the breakpoint state and every built-in service cache. `Base` carries a separate inherited `Symbol.for` brand on its constructor, so family and imported-module resolution recognise a component from another copy. The slots stay lazy and keep the reference-counted teardown. An incompatible root or slot revision throws. This is same-realm coordination only. A `createService()` or `perTarget()` call of a consumer stays owned by that consumer. +2. **A cross-copy shared runtime — built.** `shared-runtime.ts` owns `globalThis[Symbol.for('@studiometa/js-toolkit/runtime')]` and gives each subsystem a typed slot with a revision. Duplicate copies reuse the canonical `defaultScheduler`, the registry maps and controllers, the DOM mutation observer and queue, the root-context state, the breakpoint state and every built-in service cache. `Base` carries a separate inherited `Symbol.for` brand on its constructor, so family and imported-module resolution recognise a component from another copy. The slots stay lazy and keep the reference-counted teardown. An incompatible root or slot revision throws. This is same-realm coordination only. A `createService()` or `perTarget()` call of a consumer stays owned by that consumer. 3. **Composing and overriding manifests.** v4 is first-wins-and-warn, as `customElements.define` is. An `{ override: true }` option is about five lines, but the decision is the expensive part. 4. **A scoped `root`.** The registry is document-wide by construction. This would change `scanName()`, `scan()` and the target of the observer. No consumer has asked. 5. **Informational manifest metadata** (`packageName`, `subpath`, `exportName`, `group`, `styles`, `integrations`). It belongs in the output type of the generator, not in core. @@ -1071,7 +1071,7 @@ See [RATIONALE.md — 12. Storage](./RATIONALE.md#12-storage). ## 13. Testing — the `/test` subpath -`@studiometa/js-toolkit-v4/test` ships the nine helpers a test of a component cannot write for itself: `mount(html)`, `settle()`, `frames(count?)`, `countRequestedFrames(during)`, `waitFor(predicate, options?)`, `resetDom()`, `captureDiagnostics(target?)`, `recordEvents(target, ...types)` and `resetRegistry()`. +`@studiometa/js-toolkit/test` ships the nine helpers a test of a component cannot write for itself: `mount(html)`, `settle()`, `frames(count?)`, `countRequestedFrames(during)`, `waitFor(predicate, options?)`, `resetDom()`, `captureDiagnostics(target?)`, `recordEvents(target, ...types)` and `resetRegistry()`. - **The subpath exists because the timing recipe is not derivable.** "Has this component mounted and finished its writes?" is answered by five rounds of a 10ms timer followed by `defaultScheduler.whenIdle()`, and those two numbers encode the mount observer's delivery latency and the scheduler's lane order. Neither half works alone: `whenIdle()` can resolve before the observer has reported the element, and a timer can return between two lanes. `defaultScheduler` and `nextFrame` were already public, so the pieces shipped and the recipe did not. - **It depends on no test framework.** Nothing in the module imports a runner, an assertion library or a spy; it reads the DOM and the scheduler only, so it runs under Vitest, under Playwright and on a plain browser page. That is also why it is not on the root barrel: a page has no use for it, and the root export count stays what it was. diff --git a/packages/v4/RATIONALE.md b/packages/js-toolkit/RATIONALE.md similarity index 99% rename from packages/v4/RATIONALE.md rename to packages/js-toolkit/RATIONALE.md index 7016a1f37..19b2332c1 100644 --- a/packages/v4/RATIONALE.md +++ b/packages/js-toolkit/RATIONALE.md @@ -335,7 +335,7 @@ The element form is the only one that reaches a detached element. `document.quer ### Why the instances live under a symbol -v3 stores `Map` under `el.__base__`. v4 stored `Map` under the same name. Two versions in one document then read the map of the other as their own: the teardown of v4 called `$unmount()` on the instances of v3 and on the `'terminated'` string that v3 leaves behind, which is a `TypeError`, while the child resolution of v3 accepted a v4 instance as one of its children. That blocked any migration page by page. `src/coexistence.spec.ts` mounts both versions in one document and holds the line. +v3 stores `Map` under `el.__base__`. v4 stored `Map` under the same name. Two versions in one document then read the map of the other as their own: the teardown of v4 called `$unmount()` on the instances of v3 and on the `'terminated'` string that v3 leaves behind, which is a `TypeError`, while the child resolution of v3 accepted a v4 instance as one of its children. That blocked any migration page by page. `src/coexistence.spec.ts` mounted both versions in one document and held the line; it moved to the `3.x` branch with v3's sources when 4.x took this package over, since it is the only spec that needs both versions installed at once. `Symbol.for` and not a module-local `Symbol()`: the key is global to the realm, so two evaluated copies of v4 still agree on it, which is the one property of the string that had to survive. diff --git a/packages/js-toolkit/README.md b/packages/js-toolkit/README.md index 25072ed53..7ad04db4c 100644 --- a/packages/js-toolkit/README.md +++ b/packages/js-toolkit/README.md @@ -1,138 +1,63 @@ # @studiometa/js-toolkit -[![NPM Version](https://img.shields.io/npm/v/@studiometa/js-toolkit.svg?style=flat&colorB=3e63dd&colorA=414853)](https://www.npmjs.com/package/@studiometa/js-toolkit/) +[![NPM Version](https://img.shields.io/npm/v/@studiometa/js-toolkit/next.svg?style=flat&colorB=3e63dd&colorA=414853)](https://www.npmjs.com/package/@studiometa/js-toolkit/v/next) [![Downloads](https://img.shields.io/npm/dm/@studiometa/js-toolkit?style=flat&colorB=3e63dd&colorA=414853)](https://www.npmjs.com/package/@studiometa/js-toolkit/) -[![Size](https://img.shields.io/bundlephobia/minzip/@studiometa/js-toolkit?style=flat&colorB=3e63dd&colorA=414853&label=size)](https://bundlephobia.com/package/@studiometa/js-toolkit) -[![Dependency Status](https://img.shields.io/librariesio/release/npm/@studiometa/js-toolkit?style=flat&colorB=3e63dd&colorA=414853)](https://david-dm.org/studiometa/js-toolkit) -![Codecov](https://img.shields.io/codecov/c/github/studiometa/js-toolkit?style=flat&colorB=3e63dd&colorA=414853) +[![License](https://img.shields.io/npm/l/@studiometa/js-toolkit?style=flat&colorB=3e63dd&colorA=414853)](./LICENSE) > A JavaScript data-attributes driven micro-framework shipped with plenty of useful utility functions to boost your project. -## Installation +> [!WARNING] +> **This is the 4.0 alpha.** It is published under the `next` dist-tag, and it is a breaking major: `latest` still installs 3.x. The API is stable and documented, but the version is an alpha because it has not yet been run on a production project. Expect the occasional break until 4.0.0 ships. +> +> For 3.x, install `@studiometa/js-toolkit@latest` and read [js-toolkit.studiometa.dev](https://js-toolkit.studiometa.dev). -Install the latest version via NPM: +## Installation ```bash -npm install @studiometa/js-toolkit +npm install @studiometa/js-toolkit@next ``` ## What is it? -This project is a JavaScript micro-framework (along with its utility functions) whose main objectives are: - -- Enforcing best-practice and consistency between projects -- Using elements from the DOM easily -- Enabling custom behaviours on component initialization or other user events -- Disabling custom behaviours on component destruction or other user events -- Initializing components in the right place at the right time -- Defining dependencies between components - -Visit [js-toolkit.studiometa.dev](https://js-toolkit.studiometa.dev) to learn more, jump directly to [ui.studiometa.dev](https://ui.studiometa.dev) to discover existing components, or open [the playground](https://ui.studiometa.dev/-/play/) to test it live. - -## Linting +Write components as classes and bind them to the DOM with `data-…` attributes. A component declares the elements it needs, and the framework mounts it wherever it appears in the page — including elements added later. -The [`@studiometa/eslint-plugin-js-toolkit`](https://www.npmjs.com/package/@studiometa/eslint-plugin-js-toolkit) package provides an Oxlint/ESLint plugin that enforces best practices when writing components with this framework. - -```bash -npm install --save-dev @studiometa/eslint-plugin-js-toolkit +```html +
    + + 0 +
    ``` -See the [plugin README](https://github.com/studiometa/js-toolkit/blob/main/packages/eslint-plugin/README.md) or the [linting guide](https://js-toolkit.studiometa.dev/guide/going-further/linting.html) for configuration details. - -## Quick overview - -This framework lets you define components as classes, and bind them to the DOM with `data-…` attributes. For example, here is how a `Counter` component would be defined in JavaScript: - ```js -import { Base } from '@studiometa/js-toolkit'; +import { Base, registerComponent } from '@studiometa/js-toolkit'; -export default class Counter extends Base { +class Counter extends Base { static config = { name: 'Counter', - refs: ['add', 'remove', 'count'], + refs: ['add', 'count'], + options: { step: { type: Number, default: 1 } }, }; - get counter() { - return this.$refs.count.valueAsNumber; - } - - set counter(value) { - this.$refs.count.value = value; - } - onAddClick() { - this.counter += 1; - } - - onRemoveClick() { - this.counter -= 1; + this.$refs.count.textContent = Number(this.$refs.count.textContent) + this.$options.step; } } -``` - -And its accompanying HTML would be sprinkled with `data-…` attributes to bind elements from the DOM to the JavaScript class. - -```html -
    - - - -
    -``` -You can define options that can be specified with `data-option-...` attributes as well. First in JavaScript: - -```diff - class Counter extends Base { - static config = { - name: 'Counter', - refs: ['add', 'remove', 'count'], -+ options: { -+ step: { -+ type: Number, -+ default: 1, -+ }, -+ }, - }; - - onAddClick() { -- this.counter += 1; -+ this.counter += this.$options.step; - } - - onRemoveClick() { -- this.counter -= 1; -+ this.counter -= this.$options.step; - } - } -``` - -And then adjust it as you wish in your HTML: - -```diff --
    -+
    - - - -
    +registerComponent(Counter); ``` -Like Web Components, components based on the `Base` class can be registered. Any matching component found in the DOM from the moment it is registered to any future change will be mounted. +There is no build step to adopt: the same class runs from a ` +``` + +Write the class, and register it: + +```js twoslash +// @twoslash-cache: {"v":1,"hash":"4f272d9eb668a2e5a4b5ff441ee160a6cc605e60ccc990e71d92e9e92a6853ca","data":"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"} +import { Base, registerComponent } from '@studiometa/js-toolkit'; + +class Hello extends Base { + static config = { + name: 'Hello', + refs: ['btn'], + }; + + onBtnClick() { + alert('Hello, world!'); + } +} + +registerComponent(Hello); +``` + +That is the whole setup. `registerComponent()` puts the name in the registry, and every `[data-component="Hello"]` element in the document gets an instance — including the elements added to the page afterwards, by a template, a `fetch` or another component. + +## The four things to know + +### 1. Mount and unmount follow the element + +The element enters the document, the instance mounts. The element leaves, the instance unmounts and stays on its element, ready for a re-insertion. A **move** is one unmount and one mount of the same instance, exactly like `disconnectedCallback` and `connectedCallback` on a custom element. + +There is no third state. A component never declares that its work is over. + +```js twoslash +// @twoslash-cache: {"v":1,"hash":"0051d8ff6f45f4c1c3f297af3abc7559d82e1827464b43739eef9b69595bc487","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQhp+GAKFwRMCSkGAIQ1hBgMGD28lFKAHROaMwA5u7IyCAcYADWTvhoaNqIAPQlAFZwALRoEBCsOexoVUQALPFwaACuUOxhMMnxsEQlzFjsJSAAulNUncx2SACcVKxRKWj4SK1UyaQpA3gquKvskUgADFT8+AvM/DTkiEsAvhTo2LgehEFJ8niCYS8ADyYH4JxA80WiAArDssutNttdgsDgwPKDwU5sl8AEzXW6ke6PJAANjeHxweB+ZD+9CYbE4PF8QOOMjk9DiygMmm0vD0x0M2jMFnCdgcEJcbjwXh8gP8ciCIX4YRskWiHIUCSSqXSmWyeSoBSKcFKFWqtXqjWabQ63V6/UGw1G40mMzme3RpIA7KtEVtEPC9mijhJsWc8QS7g9aYgAIyvd7UT7U4i03b/DyMLC8siYPiYmDxFVgABm7BSiF4wHMvDrvDAzEsMCrnVIZxSAG5zC8nFD0QAOADMfrAGwDpJR+0OHhL5ZS4fOiBHIBu0ZJzwpyap3zT5Az9KzOa0eYwfEbzdbaHbY77nuW8LWY6RganIY8F4hOKQK7XRJjTy4hcW6YDuBB7nS6IgNmuZ2GeIJgkWtxwAAMhAzCwFAVYAEZ1GszBgHeCzonGcYrk+47LG+M4EFwaEYTAUCLl8MJRv+G64iBKa7r8B5QYwzabNABaIfElgQF00SMYw3BVkQEDsExVBSu4IAoewpYwPwGCCD4hAQDkFC8M2BH2LUvDYT4e7tlAsBgPEvAALLMCEpADF0pBgLwzC+DABFdFgvClpJDx9GA5iMLY3leQsRIhBApa8JsMCWHwmzMPYpCSSIERJd4DbyLwAAGAAkkniZJaAyUVvCACgEvBwBgYK8LY5hcE1/CIOYtb1u1zUVVJUAydWPX1qEYCdA1FaNqw/LeQA7swTR5ewcDxCVZzlFpVUAMr9AAwhEND0Nw3ZeWNvBud0nlTSkM0dF02FwPw7aWYwjBEGwXQwHwOjGNWvCAGQEvAvKdo0g91YAAIKhOE6oxJyigdt5xnsLQZyXe5nkiPNtz2MtsSKCIbARCkvDzU0+C8E0cDmBA81gEZGMESEkSdB2XXheddYDTQQ18DW3P1ldHlecgcABWQYkSYNMlGcNf0A8DLxTGdY29h6xFIGRrEIs+Aa+tQqI0bzjHMUght/sSsacUmoFfOBvHUJm0HHjgcEieC8TIfRmE4XhfmEZr0JxqSVx65RzzUVBPvoZh5uIAObHW08ZFcWBNL7s7h6u7B+YIV7scMVhFkBwRRHQriQ6GxRL4rEb04x3Rcdm6cS5xuHVsAcsKvXNADtWDY4rABKINBZoli8AA5AAAp0PR9IJzDmjUeHWlPZ3mPKIiFpqXKj4LdbzGg7D8ON85zSPn5VlPhZTyDm/nUXmFzaWbCqI/PMy3zw2H/WGm8EYJsVa3tm7Fz4CLTyat6xlCBnlHw81bA5DyhlYyXRJpZS8hEcEvB3ZyDWM2aI4NgFrWfoxOa15vrQJeD2JwS8kCgEJnAMKeBKggBeC8IAA==="} +import { Base } from '@studiometa/js-toolkit'; + +class Once extends Base { + static config = { name: 'Once' }; + + hasLoaded = false; + + mounted() { + if (this.hasLoaded) return; + // … the work that must run once per element + this.hasLoaded = true; + } +} +``` + +Read more in [Lifecycle](/guide/introduction/lifecycle-hooks.html). + +### 2. Refs are live, and handlers are delegated + +Each `$refs` property reads the DOM on access, so markup that arrives later is found with no refresh and no `$update()`. `on` handlers are delegated from the root element, so a ref that appears later needs no new binding. + +```js twoslash +// @twoslash-cache: {"v":1,"hash":"b302cf57c1d43962fe801961c7e4d742f9cdccb9af822e3d47307ddc6193de22","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQhp+GAKFwRMCSkGAIQ1hBgMGD28lFKAHROaMwA5u7IyCAcYADWTvhoaNqIAPQlAFZwALRoEBCsOexoVUQALPFwaACuUOxhMMnxsEQlzFjsJSAAulNUncx2SACcVKxRKWj4SK1UyaQpA3gquKvskUgADFT8+AvM/DTkiEsAvhTo2LgehEFJ8niCYS8AAy7E6Tnmi0QAFYdll1pttrsFgcGB5QeDTudEAAma63Uj3R5IABsbw+ODwPzIf3oTDYnB4viBxxkcnocWUBk02l4emOhm0Zgs4TsDhOzlc7k83mZ/jkQRC/DCNki0XZCgSSVS6Uy2TyVAKRTgpQq1Vq9UazTaHW6vX6g2Go3Gkxmcz2aJJAHZVgitog4XtUUcJE5sl88SAbncHjTEABGV7vaifKnEGm7f4eRhYHlkTB8DFoeLKsAAM3YKUQvGA5l49d4YGYlhg1c6pDOKQA3HWG6QYGWTbx253kFMe2AXhCPUgABwAZl9YA2/pJyP2hw8pYrKTDZy+i6jBKJcaTFK+BHT5EzdOzua0+YwfCbLbbaA7y+nCzRS1nS5XSLUCim7gM2ErhoB0aErGTytOSKaUt8V60miIA5nmdhPrw/aDm+H4pGOX5QvG8ZrvCy6IgG67Bh4OEIFiXzQviMbEgG8GYIhl6/DeqGMC2mzQIWYLFhEACSNCWHAADCHD8DkjDALwZywLQvAvNWtZgA2SmKHQ1bMGAGATi83DVkQEDsFARFojiFxXORAEJpGQYgWJEnSbJBpZPuc7MdBrE4uxqZIdx1BZmhWB3PxZB8Mpem8AZGDWUgOLxkxDmUelLmoXFtB7tif5Hixcbxl6QWcdS15hbeIBEAsoRgHA9StrwUkRE1azJbi872WsFH+j6QEbqhpYdeBPnPH5J6weVF6VShTD8YQUB8G1jXNfErAQCkjDxHtUDMMk+mGWOpm8OZllOC4bh4F4PgAFT3QABqNG1bTt3BPY9w7JGg7D8LwS3QLwEBdEUYMiMwgPwHAqQ+LUvCbD4r1rPE5jmMgACyAAiAByvAAEoDmQUT8DAUyMEaxRlMMMBbTgpDxJYEAAF7sKwQjxLYKQlNdcAlAA6jAABGJQAIJqKJJQozAJTvQA+vMf38NwXU4vOhV9Y5h7ZXg735V8KxFf5JWBcmHFzchPFMJFhLRaQsW6bQx1Je634pdCmt+kgWXATlTsG8sU0wUg86BbMUbQBeVg2GKinHGpvBlpoli8AA5AAAp0PR9PxzBmjUdQNE0acTuYgLykWGqcuKNa9kr/0NTufJ11pDYvi1adFmnFC9vWdHVsgadNDAkljmnsy8GUiOyk9Y5PUpIi2/YEBljPPiHe+7DC2DLUHckVQ4TopggCPY9TCfvYvGXbduaPHn/fJim5WpfCadpMubdtjAvZ5MBQEpCSvAAAkwBcovCetwCc9YXjmCnFQPOSBQCxEan0MAeBKggBeC8IAA"} +import { Base } from '@studiometa/js-toolkit'; + +class List extends Base { + static config = { + name: 'List', + refs: ['items[]'], // the `[]` is part of the attribute: data-ref="items[]" + }; + + onItemsClick({ index }) { + console.log(`clicked item ${index}`); + } +} +``` + +Read more in [Refs](/guide/introduction/managing-refs.html). + +### 3. Options are a read-only view over the attributes + +An option is an **input**, never a store. Every property of `$options` is a getter that derives its value from the element and the viewport on each access. + +```html +
    +``` + +```js twoslash +// @twoslash-cache: {"v":1,"hash":"28f6b127d8a5806775c302289187078ba149445b2e7ae14f701f8ba6848b97cd","data":"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"} +import { Base } from '@studiometa/js-toolkit'; + +class Grid extends Base { + static config = { + name: 'Grid', + options: { + columns: { type: Number, default: 1 }, + }, + }; + + mounted() { + console.log(this.$options.columns); // 1, or 4 from the `l` breakpoint up + } +} +``` + +Every option is responsive with no flag to declare, and to change one you write the attribute. Read more in [Options](/guide/introduction/managing-options.html). + +### 4. Children announce themselves, parents listen + +A child never reaches for its parent. It emits, and the parent hears it through the `on` convention, resolved against the names in `config.components`: + +```ts twoslash +// @twoslash-cache: {"v":1,"hash":"665df98a7ed69c47a6df93b9d64111ca11fa6a5a094bd33ae071012c3efb4588","data":"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"} +import { Base, type DelegatedEvent } from '@studiometa/js-toolkit'; + +class SliderItem extends Base<{ $emits: { select: { index: number } } }> { + static config = { name: 'SliderItem' }; + + onClick() { + this.$emit('select', { index: 0 }); + } +} + +class Slider extends Base { + static config = { + name: 'Slider', + components: { SliderItem }, + }; + + onSliderItemSelect({ payload }: DelegatedEvent) { + console.log(payload.index); + } +} +``` + +`$emit()` dispatches a real, bubbling `CustomEvent`, so a plain listener hears it too. + +::: tip A handler named by convention is not typed by convention +The `on` name is resolved at runtime, so TypeScript cannot infer the parameter for you. Annotate it with `DelegatedEvent`, `RefEvent` or `GlobalEvent`. The [`@on` decorator](/api/decorators/on.html) does not remove the annotation either — it checks it against a real target. +::: + +Read more in [Events](/guide/introduction/working-with-events.html). + +## Where to go next + +- [Installation](/guide/introduction/installation.html) — build tools, CDN and the subpath layout. +- [Components](/guide/introduction/managing-components.html) — declaring, registering and nesting components. +- [Philosophy](/guide/concepts/philosophy.html) — why one registry, and what was removed to get it. +- [Migrating from v3](/guide/migration/v3-to-v4.html) — every breaking change, with the replacement for each. diff --git a/packages/v4/docs/guide/introduction/installation.md b/packages/js-toolkit/docs/guide/introduction/installation.md similarity index 76% rename from packages/v4/docs/guide/introduction/installation.md rename to packages/js-toolkit/docs/guide/introduction/installation.md index 9bdc2f45b..479b4c161 100644 --- a/packages/v4/docs/guide/introduction/installation.md +++ b/packages/js-toolkit/docs/guide/introduction/installation.md @@ -1,11 +1,11 @@ # Installation ```bash -npm install @studiometa/js-toolkit +npm install @studiometa/js-toolkit@next ``` -::: info The package name in this documentation -v4 ships as `@studiometa/js-toolkit` 4.0. While it is in development it lives in the monorepo as `@studiometa/js-toolkit-v4`, and the code samples on this site import that name so their types resolve against the package that exists today. Read every `@studiometa/js-toolkit-v4` as `@studiometa/js-toolkit` in your own project. +::: warning The `next` tag is not optional yet +4.0 is still a prerelease, so it publishes to the `next` dist-tag. Plain `npm install @studiometa/js-toolkit` installs 3.x, which is a different framework — the tag is what selects this one. `next` becomes `latest` when 4.0.0 ships. ::: ## Importing @@ -13,22 +13,22 @@ v4 ships as `@studiometa/js-toolkit` 4.0. While it is in development it lives in The root barrel carries everything a page normally needs: ```js twoslash -// @twoslash-cache: {"v":1,"hash":"851d62f7e927be689418d216f09a0e43d9f86dd5004bd503dd5f31f3fa89bef0","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQhp+GAKFwRMCSkGAIQ1hBgMGD28lFKAHROaMwA5u7IyCAcYADWTvhoaNqIAPQlAFZwALRoEBCsOexoVUQALPFwaACuUOxhMMnxsEQlzFjsJSAAulNUncx2SACcVKxRKWj4SK1UyaQpA3gquKvskUgADFT8+AvM/DTkiEsAvhTo2LgehEFJ8kxsTg8XgAMy6YAefTAvFIMBS7E6ZAAwmEbJFoowUeF0WgkX44IgHDAUWBOqQug9bNxCUQIOwoOYrDY7DC4QjHli0VEGFQXG48AAlNmI0i8ZihbHcsWKXhNESWMgHKCg5iWdisDAUXibKK8OD8ZjQyzMNA3M4pORrBXRODxczmLw+MCqnz8foiEGaSza7y8BX7GDKt1gEHsFJajg5Hw62Wk5IQmAAchEAAMACT0lPS5U68wpgCSADkAMrSACChaRAFFi1njVheFGQk1eFgugAjDhwbwiOUwVgg3jg2CkQniuAdwTCXgAd3w7BucnocREzHMbsl0VnTXwS7QpHFwdDFsNypBtgOaBEtVZzoVs4gXVYyogOtIM4RPlh8JF5mHZF4FN/1DSIoCzM5EWYF9BzdVgOF6MALQ/TYfSdF1ZXsM5vFIJpA0SXZUnSTJsjyKgCiKAkykqGo6gaJoWnaToej6BVBmGUZxhKb92WCLjhQ5VEIm5eICksVhplmEB5kWRAAEYAFZVnWTYkFkgB2AiAwYDxuJFTkhOiJxsi+K4QBuO4HjIVT5JeSS3VgPAmVsexgCJLVdIEzd7BeUEvV4RMAAEmN6fpkgqapanqRpmjaRMAG4nFY5gkFAWJSShPBKhAF4XiAA"} -import { Base, registerComponent } from '@studiometa/js-toolkit-v4'; +// @twoslash-cache: {"v":1,"hash":"e758326ba00abde243c78e6daa032f3a35c7f1d07885b8fb902464d586b64936","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQhp+GAKFwRMCSkGAIQ1hBgMGD28lFKAHROaMwA5u7IyCAcYADWTvhoaNqIAPQlAFZwALRoEBCsOexoVUQALPFwaACuUOxhMMnxsEQlzFjsJSAAulNUncx2SACcVKxRKWj4SK1UyaQpA3gquKvskUgADFT8+AvM/DTkiEsAvhTo2LgehEFJ8kxsTg8XgAMy6YAefTAvFIMBS7E6ZAAwmEbJFoowUeF0WgkX44IgHDAUWBOqQug9bNxCUQIOwoOYrDY7DC4QjHli0VEGFQXG48AAlNmI0i8ZihbHcsWKXhNESWMgHKCg5iWdisDAUXibKK8OD8ZjQyzMNA3M4pORrBXRODxczmLw+MCqnz8foiEGaSza7y8BX7GDKt1gEHsFJajg5Hw62Wk5IQmAAchEAAMACT0lPS5U68wpgCSADkAMrSACChaRAFFi1njVheFGQk1eFgugAjDhwbwiOUwVgg3jg2CkQniuAdwTCXgAd3w7BucnocREzHMbsl0VnTXwS7QpHFwdDFsNypBtgOaBEtVZzoVs4gXVYyogOtIM4RPlh8JF5mHZF4FN/1DSIoCzM5EWYF9BzdVgOF6MALQ/TYfSdF1ZXsM5vFIJpA0SXZUnSTJsjyKgCiKAkykqGo6gaJoWnaToej6BVBmGUZxhKb92WCLjhQ5VEIm5eICksVhplmEB5kWRAAEYAFZVnWTYkFkgB2AiAwYDxuJFTkhOiJxsi+K4QBuO4HjIVT5JeSS3VgPAmVsexgCJLVdIEzd7BeUEvV4RMAAEmN6fpkgqapanqRo0ETABuJxWOYJBQFiUkoTwSoQBeF4gA=="} +import { Base, registerComponent } from '@studiometa/js-toolkit'; ``` Utilities live on `/utils`: ```js twoslash -// @twoslash-cache: {"v":1,"hash":"e8542dd4f7991c82b8c468c8c64fda77b44231f2052d484a46ef84984b53f33b","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvEa2YBbLIyJtBMRLzCC5AIzIVec9mHWadeg81omtu0t2tnSAHTDsFEUmmmyFlEFAgRBEQQAGEfLF5mXmVWVV4jKN4Ac3YSKVJmMGSYADo/NGZk4ORkEA4wAGs/fDQ0LDhEAHomgCs4AFo0CAhWSvY0DqIAFly4NEEoCTkYQtzYIibBcVY4JrlmNHxc2rlWAGIZeSwQAF1TqnHmTyQATipWGGytpABWKkLSHIYQo98Hoy4RAABioInw12YYjIdwAvhR0NggQRiDCPnQfiAWBwuHwhKJxJJeFBjoxPt8AGoqNQaGzmESCUikJ5oKlxGmmWz6fhQ7qkBxc3gwWQNGBQAXmLDMkTsOASMAAfgldmVLjcWA8XhJ/38gWCIAASrNGVItjANBjeOIZh1tFwxcTjg7YvEslBeHAwMxIgB3Ab4RIAAylMBlcskgfyHyKJTKFWqVFq9UaLXaXR6fQGQ1G40m01mzHmMEWy3Yq3WEEJYB2aD2+21J3Ol0+PwAjAA2B5PZIvRDDaNfWZ4Bt+CpA0EgcGQ6HkRAd2EXSfQZHqzW8YDeY76Bu8WECUgQOS8ADkAAFc1NDwW2p1ur1+oMRksVnBjwBuPwzQpIUAYp7hsA8HaEBYVhIA==="} -import { clamp, damp } from '@studiometa/js-toolkit-v4/utils'; +// @twoslash-cache: {"v":1,"hash":"7070ec6349867bc2a1b06e7152793423c378cbfd3a3cf4c7456eaa290f6388c7","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvEa2YBbLIyJtBMRLzCC5AIzIVec9mHWadeg81omtu0t2tnSAHTDsFEUmmmyFlEFAgRBEQQAGEfLF5mXmVWVV4jKN4Ac3YSKVJmMGSYADo/NGZk4ORkEA4wAGs/fDQ0LDhEAHomgCs4AFo0CAhWSvY0DqIAFly4NEEoCTkYQtzYIibBcVY4JrlmNHxc2rlWAGIZeSwQAF1TqnHmTyQATipWGGytpABWKkLSHIYQo98Hoy4RAABioInw12YYjIdwAvhR0NggQRiDCPnQfiAWBwuHwhKJxJJeFBjoxPt8AGoqNQaGzmESCUikJ5oKlxGmmWz6fhQ7qkBxc3gwWQNGBQAXmLDMkTsOASMAAfgldmVLjcWA8XhJ/38gWCIAASrNGVItjANBjeOIZh1tFwxcTjg7YvEslBeHAwMxIgB3Ab4RIAAylMBlcskgfyHyKJTKFWqVFq9UaLXaXR6fQGQ1G40m01mzHmMEWy3Yq3WEEJYB2aD2+21J3Ol0+PwAjAA2B5PZIvRDDaNfWZ4Bt+CpA0EgcGQ6HkRAd2EXSfQZHqzW8YDeY76Bu8WECUgQOS8ADkAAFc1NDwW2p1ur1+mglis4MeANx+GaFJCgDFPcNgPB2hAWFYSAA"} +import { clamp, damp } from '@studiometa/js-toolkit/utils'; ``` Test helpers live on `/test`: ```js twoslash -// @twoslash-cache: {"v":1,"hash":"23384ec030fd02d878d3fa20e009031e76a900cad0898c4ef482225d7a4f1524","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvALYRhaRvjTTWiXnDSl2YAObc1ABVIRp7ODAA8ACQAqAWQAyAUVYxpMMGgB8AHTDtpLAhSNBk5T0oQKAgRBEQQACUPWFIZZlIAa0EsXm00CF5mXgB3UmYsHFSAAyh2IiqKQork3ND83jR8GF5okUF3T0KwKBLmdlD+YL9O7pETILAPNDhcsDh2WFaOgoAjbtl5GBHmYfUYNDRXKAA6Pz8bLt5Sc8FSRZGYVwHQsw7H0vKlUaixIqRmaUy2QA5CsIMUpMYIGg1ONcitmH4NMwdq5ePgTlBcZNqgBHQRkDAAZU+MDEwUY3CqvBEbFY6NOqIyMBgWHRAjKOm+vAg/DOoLYmPYOO0OhWxWCGRl114SWYInwAmCvCq1347FIGhcbiWAGF8OxWFAmcUulJwXNApIljDhfC/DShb8bcw2o8aBpeIsjnBbmA/FUI8s/HM1qFEaEALyFYpjUIHTyMKEWWpEHo+5gAWgdCyWCZ8IBN4RopHLXgsAHoc14odwANzRyQB5BzQ6kAC6vCTOnOAElYycRPALJXe15MzPPGQoY1423wxHIliQkgAJxUVy6TpIACsVDQ6WHDHi6YY++0uEQAAYqOr0mrq7uAL4UdDYB8EYgyEiGh6CYNhOB4ARhDECQpHMC5XAZQxjFMcwLCICANl8fxHRCM4ENwKhejiEAAHVU14eQLV4GBQQwXgcGGGUwnkIYPjo9R1SOQQrhKLQaDxLheFYAkjlDe5HjAfo9gNQpnkDJE5J2cYylIeiCTk7pIFCHRyTgOBsSJFC/m6ORlg2GBlQAQQ7R1FkGG8Vn4YyiiqOxBHPcRJAAeR2cxSFBJkWVYVgdjVDJGhtdh1RM3gdmMYp/L8WAOFBWEpHGWF4U4rooB47oyhmMF8SkSRYtMERjHPOAMj+H0mkY2ARhmd0viWVtYvlTJYuLJ1BhmKQyRgPS0R6Mp7xGHZ6PBOAuLy1xUm0PwRMWYVSBSRoNKKFb9mYeihvJVZ2nBRZ6GFRZlUpApFnGLpUnxVhRTMd1IEEHQNTYJ01CKML5KqG0PBHQkYAZIKTieeAIFYEg4pgYlunBCA/LIUFBJWWiPD8Z4ghCI5Yo9JZNtOH70gRgIyGZcHnjQV4pD2NBim5O15WEk54GVAAxOoYCx8IoFhUVy1cX1ugxwZWAgCAchpt5GgGsaxjtR5Zty/KaxAZlANSIob2mfFQhZWbmFgFY8gKdULSgZ4wEabQACtaS8tY2N4AARby7D48Z2buMAHl+X5wS0d62kl1hNVSct7XmPqfhWbIXcyr3/U0nonXLZURzQPxA/+YxdG2KGI8KDoyjWcZYJdFosQEwAUAjObo/GAAABDgwFqvwU3GDmpjAT8/GuTdz23RAAEYADZ9w8HQj0QSfqAvc48Hgy5CJANuH2fEBXzKMQgLH8fPz7F9oH/AIcdCYAWM8RoV9xT9+RMXgoWbjRBFqExzmYes7bgAt8ihoqNABYiAABZ6z+jQFCVskR3DniQKAOgNBy6SDwL/EAn5PxAA="} -import { mount, settle } from '@studiometa/js-toolkit-v4/test'; +// @twoslash-cache: {"v":1,"hash":"bed011f8d337b03e1953da786de393a2f4346c5ec180b0f4533e15bfd01d7750","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIAzAK5gAxmnYQwvALYRhaRvjTTWiXnDSl2YAObc1ABVIRp7ODAA8ACQAqAWQAyAUVYxpMMGgB8AHTDtpLAhSNBk5T0oQKAgRBEQQACUPWFIZZlIAa0EsXm00CF5mXgB3UmYsHFSAAyh2IiqKQork3ND83jR8GF5okUF3T0KwKBLmdlD+YL9O7pETILAPNDhcsDh2WFaOgoAjbtl5GBHmYfUYNDRXKAA6Pz8bLt5Sc8FSRZGYVwHQsw7H0vKlUaixIqRmaUy2QA5CsIMUpMYIGg1ONcitmH4NMwdq5ePgTlBcZNqgBHQRkDAAZU+MDEwUY3CqvBEbFY6NOqIyMBgWHRAjKOm+vAg/DOoLYmPYOO0OhWxWCGRl114SWYInwAmCvCq1347FIGhcbiWAGF8OxWFAmcUulJwXNApIljDhfC/DShb8bcw2o8aBpeIsjnBbmA/FUI8s/HM1qFEaEALyFYpjUIHTyMKEWWpEHo+5gAWgdCyWCZ8IBN4RopHLXgsAHoc14odwANzRyQB5BzQ6kAC6vCTOnOAElYycRPALJXe15MzPPGQoY1423wxHIliQkgAJxUVy6TpIACsVDQ6WHDHi6YY++0uEQAAYqOr0mrq7uAL4UdDYB8EYgyEiGh6CYNhOB4ARhDECQpHMC5XAZQxjFMcwLCICANl8fxHRCM4ENwKhejiEAAHVU14eQLV4GBQQwXgcGGGUwnkIYPjo9R1SOQQrhKLQaDxLheFYAkjlDe5HjAfo9gNQpnkDJE5J2cYylIeiCTk7pIFCHRyTgOBsSJFC/m6ORlg2GBlQAQQ7R1FkGG8Vn4YyiiqOxBHPcRJAAeR2cxSFBJkWVYVgdjVDJGhtdh1RM3gdmMYp/L8WAOFBWEpHGWF4U4rooB47oyhmMF8SkSRYtMERjHPOAMj+H0mkY2ARhmd0viWVtYvlTJYuLJ1BhmKQyRgPS0R6Mp7xGHZ6PBOAuLy1xUm0PwRMWYVSBSRoNKKFb9mYeihvJVZ2nBRZ6GFRZlUpApFnGLpUnxVhRTMd1IEEHQNTYJ01CKML5KqG0PBHQkYAZIKTieeAIFYEg4pgYlunBCA/LIUFBJWWiPD8Z4ghCI5Yo9JZNtOH70gRgIyGZcHnjQV4pD2NBim5O15WEk54GVAAxOoYCx8IoFhUVy1cX1ugxwZWAgCAchpt5GgGsaxjtR5Zty/KaxAZlANSIob2mfFQhZWbmFgFY8gKdULSgZ4wEabQACtaS8tY2N4AARby7D48Z2buMAHl+X5wS0d62kl1hNVSct7XmPqfhWbIXcyr3/U0nonXLZURzQPxA/+YxdG2KGI8KDoyjWcZYJdFosQEwAUAjObo/GAAABDgwFqvwU3GDmpjAT8/GuTdz23RAAEYADZ9w8HQj0QSfqAvc48Hgy5CJANuH2fEBXzKMQgLH8fPz7F9oH/AIcdCYAWM8RoV9xT9+RMXgoWbjRBFqExzmYes7bgAt8ihoqNA9Z/RoChK2SI7hzxIFAHQGg5dJB4F/iAT8n4gA"} +import { mount, settle } from '@studiometa/js-toolkit/test'; ``` ### One subpath per export @@ -36,10 +36,10 @@ import { mount, settle } from '@studiometa/js-toolkit-v4/test'; Every public export also has a subpath of its own — 197 of them. The barrel is convenient; the subpath is precise: ```js twoslash -// @twoslash-cache: {"v":1,"hash":"aa2332fe2c0e8ce4761969447fca35981151b9105fadb4bbf7ce2d526ec68458","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQhp+GAKFwRMCSkGAIQ1hBgMGD28lFKAHROaMwA5u7IyCAcYADWTvhoaNqIAPQlAFZwALRoEBCsOexoVUQALPFwaACuUOxhMMnxsEQlzFjsJSAAulNUncx2SACcVKxRKWj4SK1UyaQpA3gquKvskUgADFT8+AvM/DTkiEsAvhTo2LgehEFJ8kxsTg8XgAMy6YAefTAvC6qgAyvxNKxWIw9gc0AB+RC8BFI1jSBbo7jYuFkIjsfhSXH1ViGbRmCzhOww+GImlOFxuPAAVVUvAiPjgbORvFUpHJlN4OFIvDRA3ivAAIjAQcwuqw0CJarLvLwAO5nFx6xK7VLpTLZPJUApFOClCrVWr1RrNNodbq9fqDYajcYlMUS+AlWEwanI+IFSysaazEDzRaIABsOyy602y1N+0OHhDYejp3OiAAjNdbqR7o9lm8Pjg8D8yH96ACOFw+GCIWgob5mNZGEQ2F0YNiwF1LAAjMgUXiWM7D0cT0hTyzMWhz8dkYm8Efr0jmKw2ZmCHtYDmudwgADCQmsvGYvH7rEHvDOt94KXYJGh5bABxN1DNSAZFkZxWgQhTFGUlQ1HUDRNC07SdD0fSWAMzBDIEwadqwcAlMumwRmgUYAMRHtYMZzHsDDFgATCsqY/umiAAKyZuieCkSeBZfNRpZ3A8DbPC8sb8NAXwgPutj2MADg+C8oKaJYvAAOQAAKIZ6KHJA60HOnBbQlMcSkANx7kyUksqGwqsLwckggpylqR6yGodpTqwa6rTBqyeLGaZB7mRxNnyWEDnqc5WlQW5LrwZh7DYSUHHGU4mnMEgoCxGAcBQnglQgC8LxAA==="} -import { Base } from '@studiometa/js-toolkit-v4/Base'; -import { useScroll } from '@studiometa/js-toolkit-v4/useScroll'; -import { clamp } from '@studiometa/js-toolkit-v4/utils/clamp'; +// @twoslash-cache: {"v":1,"hash":"927af6dca86d2630abb2ccaa0581588f6c37b88d0a3950bef59a36e86a8db688","data":"N4Igdg9gJgpgziAXAbVAFwJ4AcZJACwgDcYAnEAGhDRgA808AKAQwBsBLZuASgAIBjVlzi8AQlxgAeACq86NMFBHi4MAAqkIWEQF4xEjVrgA+ADph2AWywRSafasogoEfgkQhp+GAKFwRMCSkGAIQ1hBgMGD28lFKAHROaMwA5u7IyCAcYADWTvhoaNqIAPQlAFZwALRoEBCsOexoVUQALPFwaACuUOxhMMnxsEQlzFjsJSAAulNUncx2SACcVKxRKWj4SK1UyaQpA3gquKvskUgADFT8+AvM/DTkiEsAvhTo2LgehEFJ8kxsTg8XgAMy6YAefTAvC6qgAyvxNKxWIw9gc0AB+RC8BFI1jSBbo7jYuFkIjsfhSXH1ViGbRmCzhOww+GImlOFxuPAAVVUvAiPjgbORvFUpHJlN4OFIvDRA3ivAAIjAQcwuqw0CJarLvLwAO5nFx6xK7VLpTLZPJUApFOClCrVWr1RrNNodbq9fqDYajcYlMUS+AlWEwanI+IFSysaazEDzRaIABsAEZVutNstTftDh4Q2Ho6dzohUyAbncHmRlm8Pjg8D9K7t/h4WBwuHwwRC0FDfMxrIwiGwujBsWAupYAEZkCi8SxnEdjyekaeWZi0ecTsjE3ijjekcxWGzMwS9rAc1zuEAAYSE1l4zF4A9YQ94ZzvvBS7BI0NIzDABxN1BmkgGRZGcVoEIUxRlJUNR1A0TQtO0nQ9H0lgDMwQyBMGXasHAJQrpsEZoFGADEx7WDGcx7AwxYAEwAMxpn+GaIAArFm6J4ORp6Fl8tHXLcP4Vk8ryxvw0BfCAB62PYwAOD4Lygpoli8AA5AAAshnpockDqwc6TQlMcqkANz7kysksqGwqsLwikgspamaR6qHoXpTrwWgwasnipnmYelncXZSlhE5WmubpMEeS62HsLhJTcaZTg6cwSCgLEYBwFCeCVCALwvEAA==="} +import { Base } from '@studiometa/js-toolkit/Base'; +import { useScroll } from '@studiometa/js-toolkit/useScroll'; +import { clamp } from '@studiometa/js-toolkit/utils/clamp'; ``` Which one to reach for depends on how the code is delivered: @@ -55,8 +55,8 @@ v4 needs no compiler. Every decorator is sugar over a function that works withou ```html - -