From e578f9c7caeb176919222841e55b9dbcbafcb4dd Mon Sep 17 00:00:00 2001 From: jderochervlk Date: Mon, 23 Feb 2026 12:48:49 -0500 Subject: [PATCH] ci: add Playwright and run tests during CI --- .github/workflows/deploy.yml | 93 +- .gitignore | 9 +- .prettierignore | 4 + e2e/DocsPage.test.res | 69 + e2e/LandingPage.test.res | 63 + functions/yoga.wasm | Bin 0 -> 63301 bytes package.json | 8 + playwright.config.mjs | 116 ++ rescript.json | 5 + src/bindings/Playwright.res | 518 ++++++ src/bindings/playwright-shim.mjs | 60 + yarn.lock | 2507 +++++++++++++++++++++++++++++- 12 files changed, 3408 insertions(+), 44 deletions(-) create mode 100644 e2e/DocsPage.test.res create mode 100644 e2e/LandingPage.test.res create mode 100644 functions/yoga.wasm create mode 100644 playwright.config.mjs create mode 100644 src/bindings/Playwright.res create mode 100644 src/bindings/playwright-shim.mjs diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ce4f66a11..bbb0615cc 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -20,6 +20,9 @@ jobs: contents: read deployments: write pull-requests: write + outputs: + deployment-url: ${{ steps.set-url.outputs.deployment-url }} + is-pr: ${{ github.event_name == 'pull_request' }} steps: - uses: actions/checkout@v4 - name: Setup yarn @@ -38,11 +41,12 @@ jobs: if [[ "$RAW_BRANCH" == "master" ]]; then echo "VITE_DEPLOYMENT_URL=" >> "$GITHUB_ENV" + echo "SAFE_BRANCH=" >> "$GITHUB_ENV" else SAFE_BRANCH="${RAW_BRANCH//\//-}" - + SAFE_BRANCH=$(echo "$SAFE_BRANCH" | tr '[:upper:]' '[:lower:]') - + echo "SAFE_BRANCH=$SAFE_BRANCH" >> "$GITHUB_ENV" echo "VITE_DEPLOYMENT_URL=https://${SAFE_BRANCH}.rescript-lang.pages.dev" >> "$GITHUB_ENV" fi @@ -61,6 +65,15 @@ jobs: wranglerVersion: 4.63.0 env: FORCE_COLOR: 0 + - name: Set deployment URL output + id: set-url + shell: bash + run: | + if [[ "${{ github.ref_name }}" == "master" ]]; then + echo "deployment-url=https://rescript-lang.org" >> "$GITHUB_OUTPUT" + else + echo "deployment-url=${{ env.VITE_DEPLOYMENT_URL }}" >> "$GITHUB_OUTPUT" + fi - name: Comment PR with deployment link uses: marocchino/sticky-pull-request-comment@v2 with: @@ -72,3 +85,79 @@ jobs: Deployment Environment: ${{ steps.deploy.outputs.pages-environment }} ${{ steps.deploy.outputs.command-output }} + + e2e: + name: E2E Tests + runs-on: ubuntu-latest + needs: [deploy] + # Only run E2E on pull requests from non-fork branches; push-to-master runs + # are excluded here since production smoke tests are a separate concern. + if: ${{ github.event_name == 'pull_request' && needs.deploy.outputs.deployment-url != '' }} + permissions: + contents: read + pull-requests: write + steps: + - uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version-file: ".node-version" + cache: yarn + + - name: Install dependencies + run: yarn install + + # The e2e test files are written in ReScript and must be compiled to .jsx + # before Playwright can discover and run them. + - name: Build ReScript (includes e2e tests) + run: yarn build:res + + - name: Install Playwright browsers (Chromium only) + run: yarn playwright install chromium --with-deps + + - name: Run Playwright E2E tests + run: yarn e2e + env: + PLAYWRIGHT_BASE_URL: ${{ needs.deploy.outputs.deployment-url }} + CI: true + + - name: Run Chromatic visual regression + # Always run Chromatic even when Playwright tests fail so that visual + # diffs are still captured and surfaced on the PR. + if: ${{ always() && needs.deploy.outputs.deployment-url != '' }} + run: yarn e2e:chromatic --exit-zero-on-changes + env: + CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} + PLAYWRIGHT_BASE_URL: ${{ needs.deploy.outputs.deployment-url }} + + - name: Upload Playwright report + if: ${{ !cancelled() }} + uses: actions/upload-artifact@v4 + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 + + - name: Upload test results (traces / screenshots / videos) + if: ${{ failure() }} + uses: actions/upload-artifact@v4 + with: + name: test-results + path: test-results/ + retention-days: 7 + + - name: Comment PR with Playwright report link + if: ${{ failure() }} + uses: marocchino/sticky-pull-request-comment@v2 + with: + recreate: true + header: e2e-report + message: | + ## E2E Test Failures + + One or more Playwright tests failed against the preview deployment. + + **Preview URL:** ${{ needs.deploy.outputs.deployment-url }} + + Download the full HTML report from the [workflow run artifacts](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}). diff --git a/.gitignore b/.gitignore index bba900005..6fab8c2f2 100644 --- a/.gitignore +++ b/.gitignore @@ -50,8 +50,11 @@ functions/**/*.mjs functions/**/*.jsx __tests__/**/*.mjs __tests__/**/*.jsx +e2e/**/*.mjs +e2e/**/*.jsx !_shims.mjs !_shims.jsx +!src/bindings/playwright-shim.mjs # Yarn .yarn/* @@ -72,4 +75,8 @@ _scripts # Vitest screenshots !__tests__/__screenshots__/**/* -.vitest-attachments \ No newline at end of file +.vitest-attachments + +# Playwright artifacts +playwright-report/ +test-results/ diff --git a/.prettierignore b/.prettierignore index 07a2ecfba..8072b2cce 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,7 @@ +e2e/**/*.mjs +e2e/**/*.jsx +playwright-report/ +test-results/ !_shims.mjs !public/_redirects .DS_Store diff --git a/e2e/DocsPage.test.res b/e2e/DocsPage.test.res new file mode 100644 index 000000000..536f443fc --- /dev/null +++ b/e2e/DocsPage.test.res @@ -0,0 +1,69 @@ +open Playwright + +describe("Docs Page", () => { + test("has the correct page title", async ({page}) => { + let _ = await page->goto("/docs") + await page->expect->toHaveTitle("ReScript Documentation") + }) + + test("renders the docs overview heading", async ({page}) => { + let _ = await page->goto("/docs") + let heading = page->getByRole("heading", ~options={name: "Documentation"}) + await heading->expect->toBeVisible + }) + + test("docs navigation sidebar is present on the introduction page", async ({page}) => { + let _ = await page->goto("/docs/manual/latest/introduction") + let sidebar = page->getByRole("navigation") + await sidebar->expect->toBeVisible + }) + + test("can navigate from the overview to the introduction", async ({page}) => { + let _ = await page->goto("/docs") + let introLink = page->getByRole("link", ~options={name: "Introduction"}) + await introLink->first->click + await page->expect->toHaveURL("/docs/manual/latest/introduction") + }) + + test("introduction page renders main content with h1", async ({page}) => { + let _ = await page->goto("/docs/manual/latest/introduction") + let mainContent = page->locator("main") + await mainContent->expect->toBeVisible + let heading = page->getByRole("heading", ~options={name: "Introduction", level: 1}) + await heading->expect->toBeVisible + }) + + test("syntax lookup page loads with heading", async ({page}) => { + let _ = await page->goto("/syntax-lookup") + let heading = page->getByRole("heading", ~options={name: "Syntax Lookup"}) + await heading->expect->toBeVisible + }) + + test("packages page loads", async ({page}) => { + let _ = await page->goto("/packages") + let heading = page->getByRole("heading", ~options={name: "Packages"}) + await heading->expect->toBeVisible + }) + + test("has no accessibility violations on the docs overview", async ({page}) => { + let _ = await page->goto("/docs") + await page->assertNoA11yViolations + }) + + test("has no accessibility violations on the introduction page", async ({page}) => { + let _ = await page->goto("/docs/manual/latest/introduction") + await page->assertNoA11yViolations + }) + + test("visual snapshot — docs overview", async ({page}) => { + let _ = await page->goto("/docs") + await page->waitForLoadState("networkidle") + await takeSnapshot(page, "Docs Overview") + }) + + test("visual snapshot — introduction page", async ({page}) => { + let _ = await page->goto("/docs/manual/latest/introduction") + await page->waitForLoadState("networkidle") + await takeSnapshot(page, "Docs Introduction") + }) +}) diff --git a/e2e/LandingPage.test.res b/e2e/LandingPage.test.res new file mode 100644 index 000000000..c2dd670d8 --- /dev/null +++ b/e2e/LandingPage.test.res @@ -0,0 +1,63 @@ +open Playwright + +describe("Landing Page", () => { + test("has the correct page title", async ({page}) => { + let _ = await page->goto("/") + await page + ->expect + ->toHaveTitle( + "ReScript - A robustly typed language that compiles to efficient and human-readable JavaScript.", + ) + }) + + test("renders the hero section heading", async ({page}) => { + let _ = await page->goto("/") + let hero = + page->getByRole( + "heading", + ~options={name: "Fast, Simple, Fully Typed JavaScript from the Future"}, + ) + await hero->expect->toBeVisible + }) + + test("primary navigation links are present and visible", async ({page}) => { + let _ = await page->goto("/") + + await page->getByRole("link", ~options={name: "Docs"})->expect->toBeVisible + await page->getByRole("link", ~options={name: "Playground"})->expect->toBeVisible + await page->getByRole("link", ~options={name: "Blog"})->expect->toBeVisible + await page->getByRole("link", ~options={name: "Community"})->expect->toBeVisible + }) + + test("Get Started link navigates to the introduction", async ({page}) => { + let _ = await page->goto("/") + + let getStarted = page->getByRole("link", ~options={name: "Get Started"}) + await getStarted->first->click + + await page->expect->toHaveURL("/docs/manual/latest/introduction") + }) + + test("GitHub social link is present", async ({page}) => { + let _ = await page->goto("/") + let githubLink = page->getByRole("link", ~options={name: "GitHub"}) + await githubLink->expect->toBeVisible + }) + + test("has no accessibility violations", async ({page}) => { + let _ = await page->goto("/") + await page->assertNoA11yViolations + }) + + test("visual snapshot — desktop", async ({page}) => { + let _ = await page->goto("/") + await page->waitForLoadState("networkidle") + await takeSnapshot(page, "Landing Page — Desktop") + }) + + test("visual snapshot — mobile", async ({page}) => { + let _ = await page->goto("/") + await page->waitForLoadState("networkidle") + await takeSnapshot(page, "Landing Page — Mobile") + }) +}) diff --git a/functions/yoga.wasm b/functions/yoga.wasm new file mode 100644 index 0000000000000000000000000000000000000000..7da77dea1875dd382443c1ab17b8423e5ec4a77b GIT binary patch literal 63301 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 bKb-Bd7i5Y7@ZFeG<+YP019-~FC7b^b@Ys>) literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 34f375558..5f3f5ea29 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,9 @@ "build": "yarn build:res && yarn build:scripts && yarn build:update-index && yarn build:vite", "ci:format": "prettier . --check --experimental-cli", "ci:test": "yarn vitest --run --browser.headless --update", + "e2e": "playwright test", + "e2e:chromatic": "chromatic --playwright", + "e2e:report": "playwright show-report", "clean:res": "rescript clean", "convert-images": "auto-convert-images", "dev:res": "rescript watch", @@ -77,10 +80,15 @@ "remark-gfm": "^4.0.1", "remark-validate-links": "^13.1.0", "rescript": "^12.0.0", + "satori": "^0.19.2", + "shiki": "^3.22.0", "unified": "^11.0.5", "vfile-matter": "^5.0.0" }, "devDependencies": { + "@axe-core/playwright": "^4.11.1", + "@chromatic-com/playwright": "^0.12.8", + "@playwright/test": "^1.58.2", "@prettier/plugin-oxc": "^0.0.4", "@react-router/dev": "^7.8.1", "@tailwindcss/vite": "^4.1.13", diff --git a/playwright.config.mjs b/playwright.config.mjs new file mode 100644 index 000000000..05e687d68 --- /dev/null +++ b/playwright.config.mjs @@ -0,0 +1,116 @@ +import { defineConfig, devices } from "@playwright/test"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +/** + * The base URL for all page.goto('/') calls in tests. + * + * • CI (PR preview): set to the Cloudflare Pages preview URL, e.g. + * https://my-feature-branch.rescript-lang.pages.dev + * • Local: not set — Playwright starts Wrangler automatically and points + * tests at http://localhost:8788. + */ +const baseURL = process.env.PLAYWRIGHT_BASE_URL ?? "http://localhost:8788"; + +/** + * Whether we should let Playwright manage the local dev server. + * We only do this when there is no external URL to point at (i.e. local runs). + */ +const useLocalServer = !process.env.PLAYWRIGHT_BASE_URL; + +export default defineConfig({ + /** + * Start Wrangler Pages dev server automatically for local runs so that + * `yarn e2e` works after `yarn build` with zero extra setup. + * + * The server is NOT started in CI because `PLAYWRIGHT_BASE_URL` is always + * set there to the Cloudflare preview URL. + * + * `reuseExistingServer` lets you keep a Wrangler process running in another + * terminal and have Playwright attach to it rather than spawning a new one. + */ + webServer: useLocalServer + ? { + command: `yarn wrangler pages dev ${path.join(__dirname, "out")} --port 8788`, + url: "http://localhost:8788", + reuseExistingServer: true, + stdout: "pipe", + stderr: "pipe", + timeout: 60_000, + } + : undefined, + + testDir: "./e2e", + + /** + * Include compiled ReScript output (.jsx) as well as plain .js / .ts files. + * ReScript compiles *.res → *.jsx (in-source), so Playwright must discover + * those generated files. + */ + testMatch: "**/*.test.{js,jsx,ts,tsx}", + + /** Run each test file in parallel. */ + fullyParallel: true, + + /** + * Fail the suite immediately when a test.only() call is left in source — + * this is enforced only in CI so local debugging is unaffected. + */ + forbidOnly: !!process.env.CI, + + /** Retry flaky tests twice in CI; never locally so failures are obvious. */ + retries: process.env.CI ? 2 : 0, + + /** Limit parallelism in CI to avoid overwhelming the preview deployment. */ + workers: process.env.CI ? 2 : undefined, + + reporter: process.env.CI + ? [ + ["github"], // Annotate PR checks with inline failure messages. + ["html", { open: "never", outputFolder: "playwright-report" }], + ["json", { outputFile: "test-results/results.json" }], + ] + : [["html", { open: "on-failure" }]], + + use: { + baseURL, + + /** + * Collect a Playwright trace on the first retry so failures can be + * inspected in the Playwright trace viewer without slowing down the + * initial run. + */ + trace: "on-first-retry", + + /** + * Capture a screenshot automatically on test failure. + */ + screenshot: "only-on-failure", + + /** + * Record a video on the first retry alongside the trace. + */ + video: "on-first-retry", + }, + + projects: [ + { + name: "chromium", + use: { + ...devices["Desktop Chrome"], + viewport: { width: 1440, height: 900 }, + }, + }, + { + name: "mobile-chrome", + use: { + ...devices["Pixel 5"], + }, + }, + ], + + /** Where Playwright writes screenshots, traces, and videos. */ + outputDir: "test-results", +}); diff --git a/rescript.json b/rescript.json index 9214ceafd..9b50b9b33 100644 --- a/rescript.json +++ b/rescript.json @@ -13,6 +13,11 @@ "subdirs": true, "type": "dev" }, + { + "dir": "e2e", + "subdirs": true, + "type": "dev" + }, { "dir": "app", "subdirs": true diff --git a/src/bindings/Playwright.res b/src/bindings/Playwright.res new file mode 100644 index 000000000..d9a2b9ebf --- /dev/null +++ b/src/bindings/Playwright.res @@ -0,0 +1,518 @@ +/** + * ───────────────────────────────────────────────────────────────────────────── + * Core types + * ───────────────────────────────────────────────────────────────────────────── + */ +type page +type locator +type response +type browserContext +type keyboard +type mouse + +type fixtures = { + page: page, + context: browserContext, +} + +/** Access the BrowserContext that owns this page. */ +@send +external context: page => browserContext = "context" + +/** + * ───────────────────────────────────────────────────────────────────────────── + * @chromatic-com/playwright — test, expect, takeSnapshot + * + * Using Chromatic's wrapped `test` means snapshot collection is wired up + * automatically when CHROMATIC_PROJECT_TOKEN is present in the environment; + * when the token is absent every `takeSnapshot` call is a no-op so the suite + * still runs as ordinary Playwright tests. + * ───────────────────────────────────────────────────────────────────────────── + */ +@module("./playwright-shim.mjs") +external test: (string, fixtures => promise) => unit = "test" + +/** Group related tests under a shared label. */ +@module("./playwright-shim.mjs") @scope("test") +external describe: (string, unit => unit) => unit = "describe" + +/** Run a hook before every test in the current scope. */ +@module("./playwright-shim.mjs") @scope("test") +external beforeEach: (fixtures => promise) => unit = "beforeEach" + +/** Run a hook after every test in the current scope. */ +@module("./playwright-shim.mjs") @scope("test") +external afterEach: (fixtures => promise) => unit = "afterEach" + +/** Run a hook once before all tests in the current scope (worker-level). */ +@module("./playwright-shim.mjs") @scope("test") +external beforeAll: (fixtures => promise) => unit = "beforeAll" + +/** Run a hook once after all tests in the current scope (worker-level). */ +@module("./playwright-shim.mjs") @scope("test") +external afterAll: (fixtures => promise) => unit = "afterAll" + +/** + * Mark a test as the only one that should run in this file while debugging. + * Tests decorated with `only` must not be committed — set `forbidOnly: true` + * in playwright.config.mjs to enforce this in CI. + */ +@module("./playwright-shim.mjs") @scope("test") +external only: (string, fixtures => promise) => unit = "only" + +/** Skip a test unconditionally. */ +@module("./playwright-shim.mjs") @scope("test") +external skip: (string, fixtures => promise) => unit = "skip" + +/** + * Capture a Chromatic visual snapshot of the current page state. + * Call this at the point in your test where the UI is in the state you want + * to visually compare across builds. + */ +@module("./playwright-shim.mjs") +external takeSnapshot: (page, string) => promise = "takeSnapshot" + +/** + * ───────────────────────────────────────────────────────────────────────────── + * Assertions (expect) + * ───────────────────────────────────────────────────────────────────────────── + */ +type expect + +/** + * Works for both Locator-based and Page-based assertions, as well as plain + * value assertions (e.g. array length checks). + */ +@module("@chromatic-com/playwright") +external expect: 'a => expect = "expect" + +/** Negate the following matcher. */ +@send +external not_: expect => expect = "not" + +// ── Locator assertions (async) ──────────────────────────────────────────────── +// +// Each assertion comes in two forms: +// • Plain — `toBeVisible` — no options, works cleanly in pipe chains. +// • WithOptions — `toBeVisibleWith` — accepts a record of options when you +// need e.g. a custom timeout. +// +// The split is necessary because ReScript's pipe operator (`->`) combined with +// `()` does not compose well with optional labelled arguments. + +@send +external toBeVisible: expect => promise = "toBeVisible" + +type toBeVisibleOptions = {timeout?: int} +@send +external toBeVisibleWith: (expect, toBeVisibleOptions) => promise = "toBeVisible" + +@send +external toBeHidden: expect => promise = "toBeHidden" + +@send +external toBeHiddenWith: (expect, toBeVisibleOptions) => promise = "toBeHidden" + +@send +external toBeEnabled: expect => promise = "toBeEnabled" + +@send +external toBeDisabled: expect => promise = "toBeDisabled" + +@send +external toBeChecked: expect => promise = "toBeChecked" + +@send +external toBeFocused: expect => promise = "toBeFocused" + +@send +external toHaveText: (expect, string) => promise = "toHaveText" + +type toHaveTextOptions = {ignoreCase?: bool, useInnerText?: bool, timeout?: int} +@send +external toHaveTextWith: (expect, string, toHaveTextOptions) => promise = "toHaveText" + +@send +external toContainText: (expect, string) => promise = "toContainText" + +type toContainTextOptions = {ignoreCase?: bool, useInnerText?: bool, timeout?: int} +@send +external toContainTextWith: (expect, string, toContainTextOptions) => promise = + "toContainText" + +@send +external toHaveValue: (expect, string) => promise = "toHaveValue" + +@send +external toHaveAttribute: (expect, string, string) => promise = "toHaveAttribute" + +@send +external toHaveClass: (expect, string) => promise = "toHaveClass" + +@send +external toHaveCount: (expect, int) => promise = "toHaveCount" + +// ── Page-level assertions (async) ───────────────────────────────────────────── + +@send +external toHaveURL: (expect, string) => promise = "toHaveURL" + +type toHaveURLOptions = {timeout?: int} +@send +external toHaveURLWith: (expect, string, toHaveURLOptions) => promise = "toHaveURL" + +@send +external toHaveTitle: (expect, string) => promise = "toHaveTitle" + +type toHaveTitleOptions = {timeout?: int} +@send +external toHaveTitleWith: (expect, string, toHaveTitleOptions) => promise = "toHaveTitle" + +// ── Plain value assertions (sync) ───────────────────────────────────────────── + +@send external toEqual: (expect, 'a) => unit = "toEqual" +@send external toBe: (expect, 'a) => unit = "toBe" +@send external toHaveLength: (expect, int) => unit = "toHaveLength" +@send external toBeGreaterThan: (expect, int) => unit = "toBeGreaterThan" +@send external toContain: (expect, 'a) => unit = "toContain" + +/** + * ───────────────────────────────────────────────────────────────────────────── + * Page navigation and state + * ───────────────────────────────────────────────────────────────────────────── + */ +type gotoOptions = { + waitUntil?: string, + timeout?: int, + referer?: string, +} + +/** Navigate to a URL. Resolves when the page load event fires (by default). */ +@send +external goto: (page, string, ~options: gotoOptions=?) => promise> = "goto" + +/** Wait for a load state: `"load"`, `"domcontentloaded"`, or `"networkidle"`. */ +@send +external waitForLoadState: (page, string) => promise = "waitForLoadState" + +/** Return the page's `` text. */ +@send +external title: page => promise<string> = "title" + +/** Return the current URL. */ +@send +external url: page => string = "url" + +/** Reload the current page. */ +@send +external reload: page => promise<Nullable.t<response>> = "reload" + +/** Press a key or key-chord on the keyboard, e.g. `"Enter"`, `"Control+a"`. */ +@send +external press: (page, string) => promise<unit> = "press" + +/** Take a full-page screenshot. Returns raw PNG bytes. */ +type screenshotOptions = { + path?: string, + fullPage?: bool, + clip?: {x: float, y: float, width: float, height: float}, +} + +@send +external screenshot: (page, ~options: screenshotOptions=?) => promise<array<int>> = "screenshot" + +/** + * ───────────────────────────────────────────────────────────────────────────── + * Locator queries on Page + * ───────────────────────────────────────────────────────────────────────────── + */ +type getByRoleOptions = { + name?: string, + exact?: bool, + hidden?: bool, + checked?: bool, + disabled?: bool, + expanded?: bool, + pressed?: bool, + level?: int, +} + +type getByTextOptions = {exact?: bool} +type getByLabelOptions = {exact?: bool} +type getByPlaceholderOptions = {exact?: bool} + +/** Find elements by their ARIA role (e.g. `"heading"`, `"button"`, `"link"`). */ +@send +external getByRole: (page, string, ~options: getByRoleOptions=?) => locator = "getByRole" + +/** Find elements by visible text content. */ +@send +external getByText: (page, string, ~options: getByTextOptions=?) => locator = "getByText" + +/** Find form elements by their associated `<label>` text. */ +@send +external getByLabel: (page, string, ~options: getByLabelOptions=?) => locator = "getByLabel" + +/** Find elements by `data-testid` attribute. */ +@send +external getByTestId: (page, string) => locator = "getByTestId" + +/** Find input elements by their placeholder text. */ +@send +external getByPlaceholder: (page, string, ~options: getByPlaceholderOptions=?) => locator = + "getByPlaceholder" + +/** Find elements by `alt` text (images, etc.). */ +@send +external getByAltText: (page, string) => locator = "getByAltText" + +/** Find elements by their `title` attribute. */ +@send +external getByTitle: (page, string) => locator = "getByTitle" + +/** Select elements using a CSS or XPath selector. */ +@send +external locator: (page, string) => locator = "locator" + +// ── Locator action types ────────────────────────────────────────────────────── +// +// Same plain / WithOptions split as assertions — `->click` works in pipes +// while `->clickWith(opts)` is available when you need extra options. + +/** + * ───────────────────────────────────────────────────────────────────────────── + * Locator actions + * ───────────────────────────────────────────────────────────────────────────── + */ +type clickOptions = { + button?: string, + clickCount?: int, + delay?: int, + force?: bool, + timeout?: int, +} + +type fillOptions = {force?: bool, timeout?: int} +type hoverOptions = {force?: bool, timeout?: int} +type selectOptionOptions = {force?: bool, timeout?: int} + +@send +external click: locator => promise<unit> = "click" + +@send +external clickWith: (locator, clickOptions) => promise<unit> = "click" + +@send +external dblclick: locator => promise<unit> = "dblclick" + +@send +external dblclickWith: (locator, clickOptions) => promise<unit> = "dblclick" + +@send +external fill: (locator, string) => promise<unit> = "fill" + +@send +external fillWith: (locator, string, fillOptions) => promise<unit> = "fill" + +@send +external clear: locator => promise<unit> = "clear" + +@send +external clearWith: (locator, fillOptions) => promise<unit> = "clear" + +@send +external hover: locator => promise<unit> = "hover" + +@send +external hoverWith: (locator, hoverOptions) => promise<unit> = "hover" + +@send +external selectOption: (locator, string) => promise<unit> = "selectOption" + +@send +external selectOptionWith: (locator, string, selectOptionOptions) => promise<unit> = "selectOption" + +@send +external focus: locator => promise<unit> = "focus" + +@send +external blur: locator => promise<unit> = "blur" + +@send +external tap: locator => promise<unit> = "tap" + +/** Read the element's text content. */ +@send +external innerText: locator => promise<string> = "innerText" + +/** Read an element attribute value. */ +@send +external getAttribute: (locator, string) => promise<Nullable.t<string>> = "getAttribute" + +/** Read the element's `textContent`. */ +@send +external textContent: locator => promise<Nullable.t<string>> = "textContent" + +/** Returns `true` when the element is visible right now (no auto-waiting). */ +@send +external isVisible: locator => promise<bool> = "isVisible" + +/** Returns `true` when the element is enabled right now. */ +@send +external isEnabled: locator => promise<bool> = "isEnabled" + +type waitForOptions = {state?: string, timeout?: int} + +/** Wait for the element to reach a particular state (`"visible"`, `"hidden"`, `"attached"`, `"detached"`). */ +@send +external waitFor: (locator, ~options: waitForOptions=?) => promise<unit> = "waitFor" + +/** Narrow a locator set to a specific index (zero-based). */ +@send +external nth: (locator, int) => locator = "nth" + +/** Narrow to the first matching element. */ +@send +external first: locator => locator = "first" + +/** Narrow to the last matching element. */ +@send +external last: locator => locator = "last" + +/** Count how many elements the locator matches right now. */ +@send +external count: locator => promise<int> = "count" + +/** Return all matching elements as an array of locators. */ +@send +external all: locator => promise<array<locator>> = "all" + +/** Scope a child locator query inside this locator. */ +@send +external locatorWithin: (locator, string) => locator = "locator" + +/** + * ───────────────────────────────────────────────────────────────────────────── + * Locator queries on Locator + * These mirror the Page-level query helpers so that queries can be scoped + * within an already-found element. + * ───────────────────────────────────────────────────────────────────────────── + */ +@send +external locatorGetByRole: (locator, string, ~options: getByRoleOptions=?) => locator = "getByRole" + +@send +external locatorGetByText: (locator, string, ~options: getByTextOptions=?) => locator = "getByText" + +@send +external locatorGetByLabel: (locator, string, ~options: getByLabelOptions=?) => locator = + "getByLabel" + +@send +external locatorGetByTestId: (locator, string) => locator = "getByTestId" + +@send +external locatorGetByPlaceholder: ( + locator, + string, + ~options: getByPlaceholderOptions=?, +) => locator = "getByPlaceholder" + +/** + * ───────────────────────────────────────────────────────────────────────────── + * @axe-core/playwright — accessibility scanning + * ───────────────────────────────────────────────────────────────────────────── + */ +type axeBuilder + +type axeViolation = { + id: string, + impact: Nullable.t<string>, + description: string, + help: string, + helpUrl: string, + tags: array<string>, +} + +type axeResults = { + violations: array<axeViolation>, + passes: array<JSON.t>, + incomplete: array<JSON.t>, + inapplicable: array<JSON.t>, +} + +type axeBuilderOptions = {page: page} + +/** + * Create an AxeBuilder instance bound to the given page. + * + * ```res + * let results = await makeAxeBuilder({page})->analyze + * expect(results.violations)->toHaveLength(0) + * ``` + */ +@module("@axe-core/playwright") @new +external makeAxeBuilder: axeBuilderOptions => axeBuilder = "AxeBuilder" + +/** Restrict scanning to a list of WCAG / best-practice tag names, e.g. `["wcag2a", "wcag2aa"]`. */ +@send +external withTags: (axeBuilder, array<string>) => axeBuilder = "withTags" + +/** Exclude one or more CSS selectors from the scan. */ +@send +external exclude: (axeBuilder, string) => axeBuilder = "exclude" + +/** Include only the listed CSS selectors in the scan. */ +@send +external include_: (axeBuilder, string) => axeBuilder = "include" + +/** Disable a specific axe rule by id. */ +@send +external disableRules: (axeBuilder, array<string>) => axeBuilder = "disableRules" + +/** Run the accessibility scan and resolve with the full results object. */ +@send +external analyze: axeBuilder => promise<axeResults> = "analyze" + +/** + * ───────────────────────────────────────────────────────────────────────────── + * Helpers + * ───────────────────────────────────────────────────────────────────────────── + */ +/** + * Format axe violations into a readable multi-line string suitable for use in + * assertion failure messages. + */ +let formatViolations = (violations: array<axeViolation>) => + violations + ->Array.map(v => { + let impact = v.impact->Nullable.toOption->Option.getOr("unknown") + `[${v.id}] (${impact}) ${v.description}\n ${v.helpUrl}` + }) + ->Array.join("\n") + +/** + * Assert that a page has no axe violations and format a helpful failure message + * when violations are found. + * + * ```res + * test("has no a11y violations", async ({page}) => { + * let _ = await page->goto("/") + * await page->assertNoA11yViolations + * }) + * ``` + * + * Optionally restrict the scan to specific WCAG tags: + * + * ```res + * await makeAxeBuilder({page})->withTags(["wcag2a", "wcag2aa"])->analyze->... + * ``` + */ +let assertNoA11yViolations = async (page: page) => { + let results = await makeAxeBuilder({page: page})->analyze + let violations = results.violations + if Array.length(violations) > 0 { + let msg = `\nAccessibility violations found:\n${formatViolations(violations)}` + JsError.throwWithMessage(msg) + } +} diff --git a/src/bindings/playwright-shim.mjs b/src/bindings/playwright-shim.mjs new file mode 100644 index 000000000..3602a1de9 --- /dev/null +++ b/src/bindings/playwright-shim.mjs @@ -0,0 +1,60 @@ +/** + * playwright-shim.mjs + * + * Playwright's fixture-injection system inspects the source of the callback + * passed to `test()` and requires the first parameter to use object + * destructuring syntax, e.g. `async ({ page }) => {}`. + * + * ReScript always compiles record-destructuring arguments to the non- + * destructuring form `async param => { let page = param.page; … }`, which + * Playwright rejects with "First argument must use the object destructuring + * pattern". + * + * This shim sits between the ReScript bindings and `@chromatic-com/playwright`. + * Every function that accepts a `fixtures` callback is wrapped so that the + * outer function Playwright sees uses real destructuring syntax, and the inner + * ReScript-compiled callback is called with the same object. + * + * The ReScript `Playwright.res` bindings point at this file via + * `@module("./playwright-shim.mjs")` instead of pointing directly at + * `@chromatic-com/playwright`. + */ + +import { test as _test, expect, takeSnapshot } from "@chromatic-com/playwright"; + +/** Wrap a ReScript fixtures-callback so Playwright sees destructuring syntax. */ +function wrapFn(fn) { + return async ({ page, context }) => fn({ page, context }); +} + +/** + * `test(name, fn)` — register a single test. + * Attach the same helper methods that Playwright's `test` object exposes so + * that `@scope("test")` bindings in ReScript continue to work correctly. + */ +export function test(name, fn) { + return _test(name, wrapFn(fn)); +} + +/** `test.describe(name, fn)` — group tests; no fixture injection needed. */ +test.describe = (name, fn) => _test.describe(name, fn); + +/** `test.only(name, fn)` — run only this test while debugging. */ +test.only = (name, fn) => _test.only(name, wrapFn(fn)); + +/** `test.skip(name, fn)` — unconditionally skip a test. */ +test.skip = (name, fn) => _test.skip(name, wrapFn(fn)); + +/** `test.beforeEach(fn)` — run before every test in the current scope. */ +test.beforeEach = (fn) => _test.beforeEach(wrapFn(fn)); + +/** `test.afterEach(fn)` — run after every test in the current scope. */ +test.afterEach = (fn) => _test.afterEach(wrapFn(fn)); + +/** `test.beforeAll(fn)` — run once before all tests in the current scope. */ +test.beforeAll = (fn) => _test.beforeAll(wrapFn(fn)); + +/** `test.afterAll(fn)` — run once after all tests in the current scope. */ +test.afterAll = (fn) => _test.afterAll(wrapFn(fn)); + +export { expect, takeSnapshot }; diff --git a/yarn.lock b/yarn.lock index 3e1dab845..7cbf57eac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -256,6 +256,28 @@ __metadata: languageName: node linkType: hard +"@axe-core/playwright@npm:^4.11.1": + version: 4.11.1 + resolution: "@axe-core/playwright@npm:4.11.1" + dependencies: + axe-core: "npm:~4.11.1" + peerDependencies: + playwright-core: ">= 1.0.0" + checksum: 10c0/8c916cd2dd831d91f8c2ab9e3a07ef19837415bb41d40439e4acb88ed0009af2479696b865670199b13ccad984a247868610fbb34d520fca9f7c02de0f7a9439 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.7": + version: 7.29.0 + resolution: "@babel/code-frame@npm:7.29.0" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.28.5" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10c0/d34cc504e7765dfb576a663d97067afb614525806b5cad1a5cc1a7183b916fec8ff57fa233585e3926fd5a9e6b31aae6df91aa81ae9775fb7a28f658d3346f0d + languageName: node + linkType: hard + "@babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.27.1": version: 7.27.1 resolution: "@babel/code-frame@npm:7.27.1" @@ -556,6 +578,13 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.17.8": + version: 7.28.6 + resolution: "@babel/runtime@npm:7.28.6" + checksum: 10c0/358cf2429992ac1c466df1a21c1601d595c46930a13c1d4662fde908d44ee78ec3c183aaff513ecb01ef8c55c3624afe0309eeeb34715672dbfadb7feedb2c0d + languageName: node + linkType: hard + "@babel/template@npm:^7.27.2": version: 7.27.2 resolution: "@babel/template@npm:7.27.2" @@ -592,6 +621,36 @@ __metadata: languageName: node linkType: hard +"@chromatic-com/playwright@npm:^0.12.8": + version: 0.12.8 + resolution: "@chromatic-com/playwright@npm:0.12.8" + dependencies: + "@chromaui/rrweb-snapshot": "npm:2.0.0-alpha.18-noAbsolute" + "@segment/analytics-node": "npm:2.1.3" + "@storybook/addon-essentials": "npm:~8.5.8" + "@storybook/csf": "npm:^0.1.0" + "@storybook/manager-api": "npm:~8.5.8" + "@storybook/server-webpack5": "npm:~8.5.8" + storybook: "npm:~8.5.8" + ts-dedent: "npm:^2.2.0" + peerDependencies: + "@playwright/test": ^1.0.0 + bin: + archive-storybook: dist/bin/archive-storybook.js + build-archive-storybook: dist/bin/build-archive-storybook.js + checksum: 10c0/5de4489b69efab6cfd6ec3f5c4a8e285f6d96e1198641e157324e197b718f7df469efb4ee9d6a682cbffe030c17ece532b967b47d40e6c2f4db7af7b3b22a0b2 + languageName: node + linkType: hard + +"@chromaui/rrweb-snapshot@npm:2.0.0-alpha.18-noAbsolute": + version: 2.0.0-alpha.18-noAbsolute + resolution: "@chromaui/rrweb-snapshot@npm:2.0.0-alpha.18-noAbsolute" + dependencies: + postcss: "npm:^8.4.38" + checksum: 10c0/a405c6cf4229bc06a1d0e6fe56ceb3ac9bdf73df57f6a95704586b87059bf05a8954ecbf479a6d02059e7e9eb04f789982ce323432fd937bb79e4735929c1ec8 + languageName: node + linkType: hard + "@cloudflare/kv-asset-handler@npm:0.4.2": version: 0.4.2 resolution: "@cloudflare/kv-asset-handler@npm:0.4.2" @@ -1926,6 +1985,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.11 + resolution: "@jridgewell/source-map@npm:0.3.11" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + checksum: 10c0/50a4fdafe0b8f655cb2877e59fe81320272eaa4ccdbe6b9b87f10614b2220399ae3e05c16137a59db1f189523b42c7f88bd097ee991dbd7bc0e01113c583e844 + languageName: node + linkType: hard + "@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5": version: 1.5.5 resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" @@ -1943,7 +2012,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.28": +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": version: 0.3.31 resolution: "@jridgewell/trace-mapping@npm:0.3.31" dependencies: @@ -1989,6 +2058,13 @@ __metadata: languageName: node linkType: hard +"@lukeed/csprng@npm:^1.1.0": + version: 1.1.0 + resolution: "@lukeed/csprng@npm:1.1.0" + checksum: 10c0/5d6dcf478af732972083ab2889c294b57f1028fa13c2c240d7a4aaa079c2c75df7ef0dcbdda5419147fc6704b4adf96b2de92f1a9a72ac21c6350c4014fffe6c + languageName: node + linkType: hard + "@lukeed/ms@npm:^2.0.2": version: 2.0.2 resolution: "@lukeed/ms@npm:2.0.2" @@ -1996,6 +2072,15 @@ __metadata: languageName: node linkType: hard +"@lukeed/uuid@npm:^2.0.0": + version: 2.0.1 + resolution: "@lukeed/uuid@npm:2.0.1" + dependencies: + "@lukeed/csprng": "npm:^1.1.0" + checksum: 10c0/f9cc0385021f352f444d96dd101afd2a0efd3b2e85a61ac67deb8220409f75a6a426ed6525d297d97746f7931e3079ac6218777551a7c82686de7d292220cb1f + languageName: node + linkType: hard + "@marijn/find-cluster-break@npm:^1.0.0": version: 1.0.2 resolution: "@marijn/find-cluster-break@npm:1.0.2" @@ -2036,7 +2121,7 @@ __metadata: languageName: node linkType: hard -"@mdx-js/react@npm:^3.1.0": +"@mdx-js/react@npm:^3.0.0, @mdx-js/react@npm:^3.1.0": version: 3.1.1 resolution: "@mdx-js/react@npm:3.1.1" dependencies: @@ -2433,6 +2518,17 @@ __metadata: languageName: node linkType: hard +"@playwright/test@npm:^1.58.2": + version: 1.58.2 + resolution: "@playwright/test@npm:1.58.2" + dependencies: + playwright: "npm:1.58.2" + bin: + playwright: cli.js + checksum: 10c0/2164c03ad97c3653ff02e8818a71f3b2bbc344ac07924c9d8e31cd57505d6d37596015a41f51396b3ed8de6840f59143eaa9c21bf65515963da20740119811da + languageName: node + linkType: hard + "@polka/url@npm:^1.0.0-next.24": version: 1.0.0-next.29 resolution: "@polka/url@npm:1.0.0-next.29" @@ -2876,6 +2972,122 @@ __metadata: languageName: node linkType: hard +"@segment/analytics-core@npm:1.7.0": + version: 1.7.0 + resolution: "@segment/analytics-core@npm:1.7.0" + dependencies: + "@lukeed/uuid": "npm:^2.0.0" + "@segment/analytics-generic-utils": "npm:1.2.0" + dset: "npm:^3.1.4" + tslib: "npm:^2.4.1" + checksum: 10c0/5757daa2a16d2b457ce68c50139cccd71063fc75e0eb0e960a9ffbe865b158434301bf9a11658ad1fac5f53fc5fddad36924fea5a8ff787d583a11c521ea8982 + languageName: node + linkType: hard + +"@segment/analytics-generic-utils@npm:1.2.0": + version: 1.2.0 + resolution: "@segment/analytics-generic-utils@npm:1.2.0" + dependencies: + tslib: "npm:^2.4.1" + checksum: 10c0/2f9aebc1027ed2d1afcb02338ed4971f774ce25250c499cac6c1c0020a7376e05b56411d38d36ee1cf0cec49cfdb82e68cd3f5d868b47b9e61b3b668bd27e122 + languageName: node + linkType: hard + +"@segment/analytics-node@npm:2.1.3": + version: 2.1.3 + resolution: "@segment/analytics-node@npm:2.1.3" + dependencies: + "@lukeed/uuid": "npm:^2.0.0" + "@segment/analytics-core": "npm:1.7.0" + "@segment/analytics-generic-utils": "npm:1.2.0" + buffer: "npm:^6.0.3" + jose: "npm:^5.1.0" + node-fetch: "npm:^2.6.7" + tslib: "npm:^2.4.1" + checksum: 10c0/2b39ac7f6ee8eae99ea91b6d0c8632cd7d11e6c97f0127b48704acf5f9cc5bf9c99d8c2f5a2b7bfda6e755346d960afdaf8285a2d31326cc1735233b07f2fab4 + languageName: node + linkType: hard + +"@shikijs/core@npm:3.22.0": + version: 3.22.0 + resolution: "@shikijs/core@npm:3.22.0" + dependencies: + "@shikijs/types": "npm:3.22.0" + "@shikijs/vscode-textmate": "npm:^10.0.2" + "@types/hast": "npm:^3.0.4" + hast-util-to-html: "npm:^9.0.5" + checksum: 10c0/4df376f5fa0afaeaa458ba08db1d8a6ad15cb11c7351edc4cabf7e87453a1b1859ded083fdfe8020ac697a47f9a180fd655783be33d2602c9dbaa4cc950b8e13 + languageName: node + linkType: hard + +"@shikijs/engine-javascript@npm:3.22.0": + version: 3.22.0 + resolution: "@shikijs/engine-javascript@npm:3.22.0" + dependencies: + "@shikijs/types": "npm:3.22.0" + "@shikijs/vscode-textmate": "npm:^10.0.2" + oniguruma-to-es: "npm:^4.3.4" + checksum: 10c0/344dee8fd866743ecb762d3f954414d3dec17e31a6c2c5b778abdff320b8c68ff87ef661a46969c1fb34d84c2f55a696159cde2f64576407419664b9fa8dd97b + languageName: node + linkType: hard + +"@shikijs/engine-oniguruma@npm:3.22.0": + version: 3.22.0 + resolution: "@shikijs/engine-oniguruma@npm:3.22.0" + dependencies: + "@shikijs/types": "npm:3.22.0" + "@shikijs/vscode-textmate": "npm:^10.0.2" + checksum: 10c0/21007cc1f2c714f37a53e163e1d604e6696d310f9e252970a828fe5450e4daa9f1f369b7ceffd1cb9cde348d9ca17e8a4d14180749ac052c74d104cab86834ea + languageName: node + linkType: hard + +"@shikijs/langs@npm:3.22.0": + version: 3.22.0 + resolution: "@shikijs/langs@npm:3.22.0" + dependencies: + "@shikijs/types": "npm:3.22.0" + checksum: 10c0/68bb7b10a4b8d78540d0518b80b4c57e42ac232e84a5f74a91d6335de80af730008cf269b4c3da46a2fd3c4a59cd427ab1e6f5934c884335f9f648f8c0c0a912 + languageName: node + linkType: hard + +"@shikijs/themes@npm:3.22.0": + version: 3.22.0 + resolution: "@shikijs/themes@npm:3.22.0" + dependencies: + "@shikijs/types": "npm:3.22.0" + checksum: 10c0/f662648e346e0133d84dee058f24db6434eb7e511ffe8e34e9632f1168d46b219fbddcca245166f98200b13549fc3256baf8d2a0df7c23e856c9933c0bd444f9 + languageName: node + linkType: hard + +"@shikijs/types@npm:3.22.0": + version: 3.22.0 + resolution: "@shikijs/types@npm:3.22.0" + dependencies: + "@shikijs/vscode-textmate": "npm:^10.0.2" + "@types/hast": "npm:^3.0.4" + checksum: 10c0/68e5bb1827609fc026cba5a88442f41dd948f68fc4f23de0912ef2498944116471b543a5f40ab4ff2c2056399873c755fe717185fd4f8c928002fba934bd3a7b + languageName: node + linkType: hard + +"@shikijs/vscode-textmate@npm:^10.0.2": + version: 10.0.2 + resolution: "@shikijs/vscode-textmate@npm:10.0.2" + checksum: 10c0/36b682d691088ec244de292dc8f91b808f95c89466af421cf84cbab92230f03c8348649c14b3251991b10ce632b0c715e416e992dd5f28ff3221dc2693fd9462 + languageName: node + linkType: hard + +"@shuding/opentype.js@npm:1.4.0-beta.0": + version: 1.4.0-beta.0 + resolution: "@shuding/opentype.js@npm:1.4.0-beta.0" + dependencies: + fflate: "npm:^0.7.3" + string.prototype.codepointat: "npm:^0.2.1" + bin: + ot: bin/ot + checksum: 10c0/4827ce9268c1628b35f55adde7de19ed3656bd8a79f6b6467ea2b089724061056a58fe58ecd477cd65d46998194920c1f93042beeeb3dd29bfb9b4e078fde20e + languageName: node + linkType: hard + "@sindresorhus/is@npm:^7.0.2": version: 7.1.1 resolution: "@sindresorhus/is@npm:7.1.1" @@ -2897,6 +3109,371 @@ __metadata: languageName: node linkType: hard +"@storybook/addon-actions@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/addon-actions@npm:8.5.8" + dependencies: + "@storybook/global": "npm:^5.0.0" + "@types/uuid": "npm:^9.0.1" + dequal: "npm:^2.0.2" + polished: "npm:^4.2.2" + uuid: "npm:^9.0.0" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/6d83052e7746b79efb72593c29b61d18def896216d0d4559038c7d18cd46403a88bcdd41dfa14405671203a626d37221fd91f8a45316fa6c2073e5e1de9ca9d5 + languageName: node + linkType: hard + +"@storybook/addon-backgrounds@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/addon-backgrounds@npm:8.5.8" + dependencies: + "@storybook/global": "npm:^5.0.0" + memoizerific: "npm:^1.11.3" + ts-dedent: "npm:^2.0.0" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/7f852c73a4116755097a0fefd848a74d9907c4ce88bbcf18c1db8aed0254943c028626c440c75353f3102931f6f34795615a2eda3f5fd1a2bb620a7cff9fb035 + languageName: node + linkType: hard + +"@storybook/addon-controls@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/addon-controls@npm:8.5.8" + dependencies: + "@storybook/global": "npm:^5.0.0" + dequal: "npm:^2.0.2" + ts-dedent: "npm:^2.0.0" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/0d6a61148067d5015029322cb2beedc635cf9e1342357e1eda6b1b44abb9af44709772e29d144e280f7f91d3251c53abe43af711f552a08e52d2a47c9f8f2aea + languageName: node + linkType: hard + +"@storybook/addon-docs@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/addon-docs@npm:8.5.8" + dependencies: + "@mdx-js/react": "npm:^3.0.0" + "@storybook/blocks": "npm:8.5.8" + "@storybook/csf-plugin": "npm:8.5.8" + "@storybook/react-dom-shim": "npm:8.5.8" + react: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + react-dom: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + ts-dedent: "npm:^2.0.0" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/f480e265a450f2de6e379c480e1f470bcdd17869721d57b3e96843b365f40b9ef2e38d7c6103ce976e575bb34a5400d39758b4a2ed5846a779f2a53bdd9184ea + languageName: node + linkType: hard + +"@storybook/addon-essentials@npm:~8.5.8": + version: 8.5.8 + resolution: "@storybook/addon-essentials@npm:8.5.8" + dependencies: + "@storybook/addon-actions": "npm:8.5.8" + "@storybook/addon-backgrounds": "npm:8.5.8" + "@storybook/addon-controls": "npm:8.5.8" + "@storybook/addon-docs": "npm:8.5.8" + "@storybook/addon-highlight": "npm:8.5.8" + "@storybook/addon-measure": "npm:8.5.8" + "@storybook/addon-outline": "npm:8.5.8" + "@storybook/addon-toolbars": "npm:8.5.8" + "@storybook/addon-viewport": "npm:8.5.8" + ts-dedent: "npm:^2.0.0" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/9dd3a3d79cce807a615a238e45f62f1519308a777730f199468b859337763502a442c555234d6c54535d8aea4aee8f4561840338bd310384f3340d8499592a5d + languageName: node + linkType: hard + +"@storybook/addon-highlight@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/addon-highlight@npm:8.5.8" + dependencies: + "@storybook/global": "npm:^5.0.0" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/80c4fd899cf0c11e75994617713cc69e156db64d46ea61b855356b7a2766925d2a8db470e27544664932ce96875c85e84f52d7b9e5f3d6a3e8e4c8cdb6ba393b + languageName: node + linkType: hard + +"@storybook/addon-measure@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/addon-measure@npm:8.5.8" + dependencies: + "@storybook/global": "npm:^5.0.0" + tiny-invariant: "npm:^1.3.1" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/1de801b44b09402249dea38f463bc6a3ee49aeaaa1329ea2581da175b9a961316f3e01ce70311d277c99975ffe2aa19fbd39ab1565564e6569ac156542aab08f + languageName: node + linkType: hard + +"@storybook/addon-outline@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/addon-outline@npm:8.5.8" + dependencies: + "@storybook/global": "npm:^5.0.0" + ts-dedent: "npm:^2.0.0" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/15b0251ad2ca46437a52d7ace4bdcaae068c40d3f3f56046637bb106336a64635eb59883c7561f71465f7ece5b8061f0a5ae22904324e55a6f0e65596220c659 + languageName: node + linkType: hard + +"@storybook/addon-toolbars@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/addon-toolbars@npm:8.5.8" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/961a2bf7c415b91dc0aa1703369d6350481ecc249a972a20282d275466ed92af29615516e198dd8ef001833febe36991640659cc6d852f25cf4e31fb955aac1d + languageName: node + linkType: hard + +"@storybook/addon-viewport@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/addon-viewport@npm:8.5.8" + dependencies: + memoizerific: "npm:^1.11.3" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/9c9fa6332e81a6e83e75468d5365b8cd5fcd9e40abeca138f8c0e3abefc1a56addc92f97bd79e317b366db0d87d80c29c775a05fc810f7fa7b387044784b4737 + languageName: node + linkType: hard + +"@storybook/blocks@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/blocks@npm:8.5.8" + dependencies: + "@storybook/csf": "npm:0.1.12" + "@storybook/icons": "npm:^1.2.12" + ts-dedent: "npm:^2.0.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^8.5.8 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + checksum: 10c0/842c8d239c34dfee2d9e6fd7eb68a9b1fb7e5656617271e1fef17064973416b13d870636bc11a0516dae490dd91774ca15043bd66740d5fb9886b9efb01b8043 + languageName: node + linkType: hard + +"@storybook/builder-webpack5@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/builder-webpack5@npm:8.5.8" + dependencies: + "@storybook/core-webpack": "npm:8.5.8" + "@types/semver": "npm:^7.3.4" + browser-assert: "npm:^1.2.1" + case-sensitive-paths-webpack-plugin: "npm:^2.4.0" + cjs-module-lexer: "npm:^1.2.3" + constants-browserify: "npm:^1.0.0" + css-loader: "npm:^6.7.1" + es-module-lexer: "npm:^1.5.0" + fork-ts-checker-webpack-plugin: "npm:^8.0.0" + html-webpack-plugin: "npm:^5.5.0" + magic-string: "npm:^0.30.5" + path-browserify: "npm:^1.0.1" + process: "npm:^0.11.10" + semver: "npm:^7.3.7" + style-loader: "npm:^3.3.1" + terser-webpack-plugin: "npm:^5.3.1" + ts-dedent: "npm:^2.0.0" + url: "npm:^0.11.0" + util: "npm:^0.12.4" + util-deprecate: "npm:^1.0.2" + webpack: "npm:5" + webpack-dev-middleware: "npm:^6.1.2" + webpack-hot-middleware: "npm:^2.25.1" + webpack-virtual-modules: "npm:^0.6.0" + peerDependencies: + storybook: ^8.5.8 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/8c013e9f62409f169c212cca69bc0193a636a22a5280f6d30751b5561ec726c1ee7521245693f5e6ceeec16f31794560fc4cbefef33c227fce112187d4d489c6 + languageName: node + linkType: hard + +"@storybook/components@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/components@npm:8.5.8" + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 10c0/dde5ac41f60a4561095a15fb8de99344b26f8887a93fd4947ea7f378c2be71cc0421a9a46be57c9521e5e2fc6c42d222e8138ca2b3390a4eb7c1b7fa299fd0d6 + languageName: node + linkType: hard + +"@storybook/core-webpack@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/core-webpack@npm:8.5.8" + dependencies: + ts-dedent: "npm:^2.0.0" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/9fdecb169595f125ab797ea8638c077e10e7514d6afaafc2de1c5d2e3520b42e21beb6830af0cc612dfc44d2be9afd4c497e8863cf5b09d41a371d9978a3fcea + languageName: node + linkType: hard + +"@storybook/core@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/core@npm:8.5.8" + dependencies: + "@storybook/csf": "npm:0.1.12" + better-opn: "npm:^3.0.2" + browser-assert: "npm:^1.2.1" + esbuild: "npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0" + esbuild-register: "npm:^3.5.0" + jsdoc-type-pratt-parser: "npm:^4.0.0" + process: "npm:^0.11.10" + recast: "npm:^0.23.5" + semver: "npm:^7.6.2" + util: "npm:^0.12.5" + ws: "npm:^8.2.3" + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + checksum: 10c0/bf883e32827668e50dd90bb52ee8f2b419b1beaba3213695ec21afe39f6b880feb107c96768021388222519c4bab8870bba5971415f68a426912a3cb7f5e3d80 + languageName: node + linkType: hard + +"@storybook/csf-plugin@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/csf-plugin@npm:8.5.8" + dependencies: + unplugin: "npm:^1.3.1" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/27d51f0ba97971826bbf3276e568427a1c39c8a7b6ea308ac833e797c1e39a6b3171231513c6ff9880c4677197cb2b18b33e69fce0cfcf294e74e5b1bee6d7c3 + languageName: node + linkType: hard + +"@storybook/csf@npm:0.1.12": + version: 0.1.12 + resolution: "@storybook/csf@npm:0.1.12" + dependencies: + type-fest: "npm:^2.19.0" + checksum: 10c0/3d96a976ada67eb683279338d1eb6aa730b228107d4c4f6616ea7b94061899c1fdc11957a756e7bc0708d18cb39af0010c865d124efd84559cd82dcb2d8bc959 + languageName: node + linkType: hard + +"@storybook/csf@npm:^0.1.0": + version: 0.1.13 + resolution: "@storybook/csf@npm:0.1.13" + dependencies: + type-fest: "npm:^2.19.0" + checksum: 10c0/7c57b531ac95ca45239f498d419483d675e58cd8d549e0bac623519cc1ef4f3c9c6b75ec3873aa51cc2872728012db5dd5e1f2c2d8085014241eb4b896480996 + languageName: node + linkType: hard + +"@storybook/global@npm:^5.0.0": + version: 5.0.0 + resolution: "@storybook/global@npm:5.0.0" + checksum: 10c0/8f1b61dcdd3a89584540896e659af2ecc700bc740c16909a7be24ac19127ea213324de144a141f7caf8affaed017d064fea0618d453afbe027cf60f54b4a6d0b + languageName: node + linkType: hard + +"@storybook/icons@npm:^1.2.12": + version: 1.6.0 + resolution: "@storybook/icons@npm:1.6.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + checksum: 10c0/bbec9201a78a730195f9cf377b15856dc414a54d04e30d16c379d062425cc617bfd0d6586ba1716012cfbdab461f0c9693a6a52920f9bd09c7b4291fb116f59c + languageName: node + linkType: hard + +"@storybook/manager-api@npm:8.5.8, @storybook/manager-api@npm:~8.5.8": + version: 8.5.8 + resolution: "@storybook/manager-api@npm:8.5.8" + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 10c0/4045257c2169cef88508cef8087d177faea481fa6bf403ea92d531f6c27291c06107d786bf0bd7bb380631f86a2d87819e60f84598bd7eefdc6c12c85e97b4ab + languageName: node + linkType: hard + +"@storybook/preset-server-webpack@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/preset-server-webpack@npm:8.5.8" + dependencies: + "@storybook/core-webpack": "npm:8.5.8" + "@storybook/global": "npm:^5.0.0" + "@storybook/server": "npm:8.5.8" + safe-identifier: "npm:^0.4.1" + ts-dedent: "npm:^2.0.0" + yaml-loader: "npm:^0.8.0" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/b44683d167dfead5e583746ae802ce94b6b72b1ed133ad63035231885f5457de91f5a85158fc349e25d74f2cf610a8c491b23e49a5b8e8e95e4ef57fa474f14d + languageName: node + linkType: hard + +"@storybook/preview-api@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/preview-api@npm:8.5.8" + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 10c0/278dff2940ba93c366a2a83a347f8e17dc80d087e0aa44eb868e4fe95f76a23e12d740867f3fd8e65142c47a73e5a66a628847179ce10b5ae22c4b1645910c2c + languageName: node + linkType: hard + +"@storybook/react-dom-shim@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/react-dom-shim@npm:8.5.8" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.5.8 + checksum: 10c0/0d6a7f24bb0ae168dfb7f984e2defd16e15d65dd07b1f9c4251c23e1abe88c11fa58d716125c536199e689266eca371cd054f5514c952ab76863946406fbeedd + languageName: node + linkType: hard + +"@storybook/server-webpack5@npm:~8.5.8": + version: 8.5.8 + resolution: "@storybook/server-webpack5@npm:8.5.8" + dependencies: + "@storybook/builder-webpack5": "npm:8.5.8" + "@storybook/preset-server-webpack": "npm:8.5.8" + "@storybook/server": "npm:8.5.8" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/c0414165812234fa5f5c847f6c6a759412b75c5fbb12eaeb3351fea14e15e2bbf1e2620ca1bb85baa2b2afadd83c42af68b9f10224bbfa2359781c9b93b2340c + languageName: node + linkType: hard + +"@storybook/server@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/server@npm:8.5.8" + dependencies: + "@storybook/components": "npm:8.5.8" + "@storybook/csf": "npm:0.1.12" + "@storybook/global": "npm:^5.0.0" + "@storybook/manager-api": "npm:8.5.8" + "@storybook/preview-api": "npm:8.5.8" + "@storybook/theming": "npm:8.5.8" + ts-dedent: "npm:^2.0.0" + yaml: "npm:^2.3.1" + peerDependencies: + storybook: ^8.5.8 + checksum: 10c0/7f5ebbc0c557f36a925ee82e453c8af7fd9acaf09ccec86b464ebacad76176bf863e7eab5bc76dc4c1152bcfa42920573b8ee24c9a30973db59d04d4ada15512 + languageName: node + linkType: hard + +"@storybook/theming@npm:8.5.8": + version: 8.5.8 + resolution: "@storybook/theming@npm:8.5.8" + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: 10c0/6a3083fb2f3166a86fd177a24974149cea71d31e44cac1730c5c17b04f22cb17de41f65ead2984adb26a272fdf7bcab6d6ebda791c2ce5a21671e90a07a7d8a9 + languageName: node + linkType: hard + "@swc/helpers@npm:^0.5.0": version: 0.5.17 resolution: "@swc/helpers@npm:0.5.17" @@ -3185,6 +3762,26 @@ __metadata: languageName: node linkType: hard +"@types/eslint-scope@npm:^3.7.7": + version: 3.7.7 + resolution: "@types/eslint-scope@npm:3.7.7" + dependencies: + "@types/eslint": "npm:*" + "@types/estree": "npm:*" + checksum: 10c0/a0ecbdf2f03912679440550817ff77ef39a30fa8bfdacaf6372b88b1f931828aec392f52283240f0d648cf3055c5ddc564544a626bcf245f3d09fcb099ebe3cc + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e + languageName: node + linkType: hard + "@types/estree-jsx@npm:^1.0.0": version: 1.0.5 resolution: "@types/estree-jsx@npm:1.0.5" @@ -3194,14 +3791,14 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:1.0.8, @types/estree@npm:^1.0.0": +"@types/estree@npm:*, @types/estree@npm:1.0.8, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.8": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 languageName: node linkType: hard -"@types/hast@npm:^3.0.0": +"@types/hast@npm:^3.0.0, @types/hast@npm:^3.0.4": version: 3.0.4 resolution: "@types/hast@npm:3.0.4" dependencies: @@ -3217,6 +3814,13 @@ __metadata: languageName: node linkType: hard +"@types/html-minifier-terser@npm:^6.0.0": + version: 6.1.0 + resolution: "@types/html-minifier-terser@npm:6.1.0" + checksum: 10c0/a62fb8588e2f3818d82a2d7b953ad60a4a52fd767ae04671de1c16f5788bd72f1ed3a6109ed63fd190c06a37d919e3c39d8adbc1793a005def76c15a3f5f5dab + languageName: node + linkType: hard + "@types/is-empty@npm:^1.0.0": version: 1.2.3 resolution: "@types/is-empty@npm:1.2.3" @@ -3224,6 +3828,13 @@ __metadata: languageName: node linkType: hard +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + "@types/mdast@npm:^4.0.0": version: 4.0.4 resolution: "@types/mdast@npm:4.0.4" @@ -3265,8 +3876,15 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^19.2.2": - version: 19.2.7 +"@types/parse-json@npm:^4.0.0": + version: 4.0.2 + resolution: "@types/parse-json@npm:4.0.2" + checksum: 10c0/b1b863ac34a2c2172fbe0807a1ec4d5cb684e48d422d15ec95980b81475fac4fdb3768a8b13eef39130203a7c04340fc167bae057c7ebcafd7dec9fe6c36aeb1 + languageName: node + linkType: hard + +"@types/react@npm:^19.2.2": + version: 19.2.7 resolution: "@types/react@npm:19.2.7" dependencies: csstype: "npm:^3.2.2" @@ -3274,6 +3892,13 @@ __metadata: languageName: node linkType: hard +"@types/semver@npm:^7.3.4": + version: 7.7.1 + resolution: "@types/semver@npm:7.7.1" + checksum: 10c0/c938aef3bf79a73f0f3f6037c16e2e759ff40c54122ddf0b2583703393d8d3127130823facb880e694caa324eb6845628186aac1997ee8b31dc2d18fafe26268 + languageName: node + linkType: hard + "@types/supports-color@npm:^8.0.0": version: 8.1.3 resolution: "@types/supports-color@npm:8.1.3" @@ -3309,6 +3934,13 @@ __metadata: languageName: node linkType: hard +"@types/uuid@npm:^9.0.1": + version: 9.0.8 + resolution: "@types/uuid@npm:9.0.8" + checksum: 10c0/b411b93054cb1d4361919579ef3508a1f12bf15b5fdd97337d3d351bece6c921b52b6daeef89b62340fd73fd60da407878432a1af777f40648cbe53a01723489 + languageName: node + linkType: hard + "@ungap/structured-clone@npm:^1.0.0": version: 1.3.0 resolution: "@ungap/structured-clone@npm:1.3.0" @@ -3454,6 +4086,171 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" + dependencies: + "@webassemblyjs/helper-numbers": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + checksum: 10c0/67a59be8ed50ddd33fbb2e09daa5193ac215bf7f40a9371be9a0d9797a114d0d1196316d2f3943efdb923a3d809175e1563a3cb80c814fb8edccd1e77494972b + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: 10c0/0e88bdb8b50507d9938be64df0867f00396b55eba9df7d3546eb5dc0ca64d62e06f8d881ec4a6153f2127d0f4c11d102b6e7d17aec2f26bb5ff95a5e60652412 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 10c0/31be497f996ed30aae4c08cac3cce50c8dcd5b29660383c0155fce1753804fc55d47fcba74e10141c7dd2899033164e117b3bcfcda23a6b043e4ded4f1003dfb + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: 10c0/0d54105dc373c0fe6287f1091e41e3a02e36cdc05e8cf8533cdc16c59ff05a646355415893449d3768cda588af451c274f13263300a251dc11a575bc4c9bd210 + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" + dependencies: + "@webassemblyjs/floating-point-hex-parser": "npm:1.13.2" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/9c46852f31b234a8fb5a5a9d3f027bc542392a0d4de32f1a9c0075d5e8684aa073cb5929b56df565500b3f9cc0a2ab983b650314295b9bf208d1a1651bfc825a + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 10c0/c4355d14f369b30cf3cbdd3acfafc7d0488e086be6d578e3c9780bd1b512932352246be96e034e2a7fcfba4f540ec813352f312bfcbbfe5bcfbf694f82ccc682 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + checksum: 10c0/1f9b33731c3c6dbac3a9c483269562fa00d1b6a4e7133217f40e83e975e636fd0f8736e53abd9a47b06b66082ecc976c7384391ab0a68e12d509ea4e4b948d64 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" + dependencies: + "@xtuc/ieee754": "npm:^1.2.0" + checksum: 10c0/2e732ca78c6fbae3c9b112f4915d85caecdab285c0b337954b180460290ccd0fb00d2b1dc4bb69df3504abead5191e0d28d0d17dfd6c9d2f30acac8c4961c8a7 + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" + dependencies: + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/dad5ef9e383c8ab523ce432dfd80098384bf01c45f70eb179d594f85ce5db2f80fa8c9cba03adafd85684e6d6310f0d3969a882538975989919329ac4c984659 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 10c0/d3fac9130b0e3e5a1a7f2886124a278e9323827c87a2b971e6d0da22a2ba1278ac9f66a4f2e363ecd9fac8da42e6941b22df061a119e5c0335f81006de9ee799 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/helper-wasm-section": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-opt": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + "@webassemblyjs/wast-printer": "npm:1.14.1" + checksum: 10c0/5ac4781086a2ca4b320bdbfd965a209655fe8a208ca38d89197148f8597e587c9a2c94fb6bd6f1a7dbd4527c49c6844fcdc2af981f8d793a97bf63a016aa86d2 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/d678810d7f3f8fecb2e2bdadfb9afad2ec1d2bc79f59e4711ab49c81cec578371e22732d4966f59067abe5fba8e9c54923b57060a729d28d408e608beef67b10 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + checksum: 10c0/515bfb15277ee99ba6b11d2232ddbf22aed32aad6d0956fe8a0a0a004a1b5a3a277a71d9a3a38365d0538ac40d1b7b7243b1a244ad6cd6dece1c1bb2eb5de7ee + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/95427b9e5addbd0f647939bd28e3e06b8deefdbdadcf892385b5edc70091bf9b92fa5faac3fce8333554437c5d85835afef8c8a7d9d27ab6ba01ffab954db8c6 + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/8d7768608996a052545251e896eac079c98e0401842af8dd4de78fba8d90bd505efb6c537e909cd6dae96e09db3fa2e765a6f26492553a675da56e2db51f9d24 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: 10c0/a8565d29d135039bd99ae4b2220d3e167d22cf53f867e491ed479b3f84f895742d0097f935b19aab90265a23d5d46711e4204f14c479ae3637fbf06c4666882f + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 10c0/8582cbc69c79ad2d31568c412129bf23d2b1210a1dfb60c82d5a1df93334da4ee51f3057051658569e2c196d8dc33bc05ae6b974a711d0d16e801e1d0647ccd1 + languageName: node + linkType: hard + "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -3505,6 +4302,15 @@ __metadata: languageName: node linkType: hard +"acorn-import-phases@npm:^1.0.3": + version: 1.0.4 + resolution: "acorn-import-phases@npm:1.0.4" + peerDependencies: + acorn: ^8.14.0 + checksum: 10c0/338eb46fc1aed5544f628344cb9af189450b401d152ceadbf1f5746901a5d923016cd0e7740d5606062d374fdf6941c29bb515d2bd133c4f4242d5d4cd73a3c7 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.0.0": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -3523,6 +4329,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.14.0, acorn@npm:^8.15.0": + version: 8.16.0 + resolution: "acorn@npm:8.16.0" + bin: + acorn: bin/acorn + checksum: 10c0/c9c52697227661b68d0debaf972222d4f622aa06b185824164e153438afa7b08273432ca43ea792cadb24dada1d46f6f6bb1ef8de9956979288cc1b96bf9914e + languageName: node + linkType: hard + "agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": version: 7.1.4 resolution: "agent-base@npm:7.1.4" @@ -3544,6 +4359,20 @@ __metadata: languageName: node linkType: hard +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 + languageName: node + linkType: hard + "ajv-formats@npm:^3.0.1": version: 3.0.1 resolution: "ajv-formats@npm:3.0.1" @@ -3558,6 +4387,38 @@ __metadata: languageName: node linkType: hard +"ajv-keywords@npm:^3.5.2": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 10c0/0c57a47cbd656e8cdfd99d7c2264de5868918ffa207c8d7a72a7f63379d4333254b2ba03d69e3c035e996a3fd3eb6d5725d7a1597cca10694296e32510546360 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + peerDependencies: + ajv: ^8.8.2 + checksum: 10c0/18bec51f0171b83123ba1d8883c126e60c6f420cef885250898bf77a8d3e65e3bfb9e8564f497e30bdbe762a83e0d144a36931328616a973ee669dc74d4a9590 + languageName: node + linkType: hard + +"ajv@npm:^6.12.5": + version: 6.14.0 + resolution: "ajv@npm:6.14.0" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/a2bc39b0555dc9802c899f86990eb8eed6e366cddbf65be43d5aa7e4f3c4e1a199d5460fd7ca4fb3d864000dbbc049253b72faa83b3b30e641ca52cb29a68c22 + languageName: node + linkType: hard + "ajv@npm:^8.0.0, ajv@npm:^8.12.0": version: 8.17.1 resolution: "ajv@npm:8.17.1" @@ -3570,6 +4431,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.9.0": + version: 8.18.0 + resolution: "ajv@npm:8.18.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/e7517c426173513a07391be951879932bdf3348feaebd2199f5b901c20f99d60db8cd1591502d4d551dc82f594e82a05c4fe1c70139b15b8937f7afeaed9532f + languageName: node + linkType: hard + "algoliasearch@npm:^5.28.0": version: 5.45.0 resolution: "algoliasearch@npm:5.45.0" @@ -3601,6 +4474,15 @@ __metadata: languageName: node linkType: hard +"ansi-html-community@npm:0.0.8": + version: 0.0.8 + resolution: "ansi-html-community@npm:0.0.8" + bin: + ansi-html: bin/ansi-html + checksum: 10c0/45d3a6f0b4f10b04fdd44bef62972e2470bfd917bf00439471fa7473d92d7cbe31369c73db863cc45dda115cb42527f39e232e9256115534b8ee5806b0caeed4 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -3615,7 +4497,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^4.0.0": +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -3696,6 +4578,15 @@ __metadata: languageName: node linkType: hard +"ast-types@npm:^0.16.1": + version: 0.16.1 + resolution: "ast-types@npm:0.16.1" + dependencies: + tslib: "npm:^2.0.1" + checksum: 10c0/abcc49e42eb921a7ebc013d5bec1154651fb6dbc3f497541d488859e681256901b2990b954d530ba0da4d0851271d484f7057d5eff5e07cb73e8b10909f711bf + languageName: node + linkType: hard + "astring@npm:^1.8.0": version: 1.9.0 resolution: "astring@npm:1.9.0" @@ -3767,6 +4658,13 @@ __metadata: languageName: node linkType: hard +"axe-core@npm:~4.11.1": + version: 4.11.1 + resolution: "axe-core@npm:4.11.1" + checksum: 10c0/1e6997454b61c7c9a4d740f395952835dcf87f2c04fd81577217d68634d197d602c224f9e8f17b22815db4c117a2519980cfc8911fc0027c54a6d8ebca47c6a7 + languageName: node + linkType: hard + "babel-dead-code-elimination@npm:^1.0.6": version: 1.0.10 resolution: "babel-dead-code-elimination@npm:1.0.10" @@ -3793,6 +4691,13 @@ __metadata: languageName: node linkType: hard +"base64-js@npm:0.0.8": + version: 0.0.8 + resolution: "base64-js@npm:0.0.8" + checksum: 10c0/60f02a9fdbbbb251c0a1064834d4062f5a3c4237edd9f0313282d75980a80ce303316795f7a80c8e240e524169644d88445ec0697b03f81ab9f4458090979375 + languageName: node + linkType: hard + "base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -3809,6 +4714,15 @@ __metadata: languageName: node linkType: hard +"baseline-browser-mapping@npm:^2.9.0": + version: 2.10.0 + resolution: "baseline-browser-mapping@npm:2.10.0" + bin: + baseline-browser-mapping: dist/cli.cjs + checksum: 10c0/da9c3ec0fcd7f325226a47d2142794d41706b6e0a405718a2c15410bbdb72aacadd65738bedef558c6f1b106ed19458cb25b06f63b66df2c284799905dbbd003 + languageName: node + linkType: hard + "batch@npm:0.6.1": version: 0.6.1 resolution: "batch@npm:0.6.1" @@ -3816,6 +4730,22 @@ __metadata: languageName: node linkType: hard +"better-opn@npm:^3.0.2": + version: 3.0.2 + resolution: "better-opn@npm:3.0.2" + dependencies: + open: "npm:^8.0.4" + checksum: 10c0/911ef25d44da75aabfd2444ce7a4294a8000ebcac73068c04a60298b0f7c7506b60421aa4cd02ac82502fb42baaff7e4892234b51e6923eded44c5a11185f2f5 + languageName: node + linkType: hard + +"big.js@npm:^5.2.2": + version: 5.2.2 + resolution: "big.js@npm:5.2.2" + checksum: 10c0/230520f1ff920b2d2ce3e372d77a33faa4fa60d802fe01ca4ffbc321ee06023fe9a741ac02793ee778040a16b7e497f7d60c504d1c402b8fdab6f03bb785a25f + languageName: node + linkType: hard + "binary-extensions@npm:^2.0.0": version: 2.3.0 resolution: "binary-extensions@npm:2.3.0" @@ -3850,6 +4780,13 @@ __metadata: languageName: node linkType: hard +"boolbase@npm:^1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 10c0/e4b53deb4f2b85c52be0e21a273f2045c7b6a6ea002b0e139c744cb6f95e9ec044439a52883b0d74dedd1ff3da55ed140cfdddfed7fb0cccbed373de5dce1bcf + languageName: node + linkType: hard + "boxen@npm:8.0.1": version: 8.0.1 resolution: "boxen@npm:8.0.1" @@ -3894,6 +4831,13 @@ __metadata: languageName: node linkType: hard +"browser-assert@npm:^1.2.1": + version: 1.2.1 + resolution: "browser-assert@npm:1.2.1" + checksum: 10c0/902abf999f92c9c951fdb6d7352c09eea9a84706258699655f7e7906e42daa06a1ae286398a755872740e05a6a71c43c5d1a0c0431d67a8cdb66e5d859a3fc0c + languageName: node + linkType: hard + "browserslist@npm:^4.24.0": version: 4.28.0 resolution: "browserslist@npm:4.28.0" @@ -3909,6 +4853,21 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.28.1": + version: 4.28.1 + resolution: "browserslist@npm:4.28.1" + dependencies: + baseline-browser-mapping: "npm:^2.9.0" + caniuse-lite: "npm:^1.0.30001759" + electron-to-chromium: "npm:^1.5.263" + node-releases: "npm:^2.0.27" + update-browserslist-db: "npm:^1.2.0" + bin: + browserslist: cli.js + checksum: 10c0/545a5fa9d7234e3777a7177ec1e9134bb2ba60a69e6b95683f6982b1473aad347c77c1264ccf2ac5dea609a9731fbfbda6b85782bdca70f80f86e28a402504bd + languageName: node + linkType: hard + "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" @@ -4000,6 +4959,23 @@ __metadata: languageName: node linkType: hard +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"camel-case@npm:^4.1.2": + version: 4.1.2 + resolution: "camel-case@npm:4.1.2" + dependencies: + pascal-case: "npm:^3.1.2" + tslib: "npm:^2.0.3" + checksum: 10c0/bf9eefaee1f20edbed2e9a442a226793bc72336e2b99e5e48c6b7252b6f70b080fc46d8246ab91939e2af91c36cdd422e0af35161e58dd089590f302f8f64c8a + languageName: node + linkType: hard + "camelcase@npm:^8.0.0": version: 8.0.0 resolution: "camelcase@npm:8.0.0" @@ -4007,6 +4983,13 @@ __metadata: languageName: node linkType: hard +"camelize@npm:^1.0.0": + version: 1.0.1 + resolution: "camelize@npm:1.0.1" + checksum: 10c0/4c9ac55efd356d37ac483bad3093758236ab686192751d1c9daa43188cc5a07b09bd431eb7458a4efd9ca22424bba23253e7b353feb35d7c749ba040de2385fb + languageName: node + linkType: hard + "caniuse-lite@npm:^1.0.30001754": version: 1.0.30001757 resolution: "caniuse-lite@npm:1.0.30001757" @@ -4014,6 +4997,20 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001759": + version: 1.0.30001774 + resolution: "caniuse-lite@npm:1.0.30001774" + checksum: 10c0/cc6a340a5421b9a67d8fa80889065ee27b2839ad62993571dded5296e18f02bbf685ce7094e93fe908cddc9fefdfad35d6c010b724cc3d22a6479b0d0b679f8c + languageName: node + linkType: hard + +"case-sensitive-paths-webpack-plugin@npm:^2.4.0": + version: 2.4.0 + resolution: "case-sensitive-paths-webpack-plugin@npm:2.4.0" + checksum: 10c0/310dab619b661a7fa44ed773870be6d6d7373faff6953ad92720f9553e2579e46dda5b9a79eae6d25ff3733cc15aa466b96e5811af16213f23c115aa220b4ab4 + languageName: node + linkType: hard + "ccount@npm:^2.0.0": version: 2.0.1 resolution: "ccount@npm:2.0.1" @@ -4028,6 +5025,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + "chalk@npm:^5.0.0, chalk@npm:^5.3.0": version: 5.6.2 resolution: "chalk@npm:5.6.2" @@ -4063,7 +5070,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.0.0": +"chokidar@npm:^3.0.0, chokidar@npm:^3.5.3": version: 3.6.0 resolution: "chokidar@npm:3.6.0" dependencies: @@ -4098,6 +5105,13 @@ __metadata: languageName: node linkType: hard +"chrome-trace-event@npm:^1.0.2": + version: 1.0.4 + resolution: "chrome-trace-event@npm:1.0.4" + checksum: 10c0/3058da7a5f4934b87cf6a90ef5fb68ebc5f7d06f143ed5a4650208e5d7acae47bc03ec844b29fbf5ba7e46e8daa6acecc878f7983a4f4bb7271593da91e61ff5 + languageName: node + linkType: hard + "ci-info@npm:^4.0.0": version: 4.3.1 resolution: "ci-info@npm:4.3.1" @@ -4105,6 +5119,22 @@ __metadata: languageName: node linkType: hard +"cjs-module-lexer@npm:^1.2.3": + version: 1.4.3 + resolution: "cjs-module-lexer@npm:1.4.3" + checksum: 10c0/076b3af85adc4d65dbdab1b5b240fe5b45d44fcf0ef9d429044dd94d19be5589376805c44fb2d4b3e684e5fe6a9b7cf3e426476a6507c45283c5fc6ff95240be + languageName: node + linkType: hard + +"clean-css@npm:^5.2.2": + version: 5.3.3 + resolution: "clean-css@npm:5.3.3" + dependencies: + source-map: "npm:~0.6.0" + checksum: 10c0/381de7523e23f3762eb180e327dcc0cedafaf8cb1cd8c26b7cc1fc56e0829a92e734729c4f955394d65ed72fb62f82d8baf78af34b33b8a7d41ebad2accdd6fb + languageName: node + linkType: hard + "cli-boxes@npm:^3.0.0": version: 3.0.0 resolution: "cli-boxes@npm:3.0.0" @@ -4171,14 +5201,14 @@ __metadata: languageName: node linkType: hard -"color-name@npm:~1.1.4": +"color-name@npm:^1.1.4, color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 languageName: node linkType: hard -"colorette@npm:^2.0.7": +"colorette@npm:^2.0.10, colorette@npm:^2.0.7": version: 2.0.20 resolution: "colorette@npm:2.0.20" checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 @@ -4199,13 +5229,20 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.15.1": +"commander@npm:^2.15.1, commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 languageName: node linkType: hard +"commander@npm:^8.3.0": + version: 8.3.0 + resolution: "commander@npm:8.3.0" + checksum: 10c0/8b043bb8322ea1c39664a1598a95e0495bfe4ca2fad0d84a92d7d1d8d213e2a155b441d2470c8e08de7c4a28cf2bc6e169211c49e1b21d9f7edc6ae4d9356060 + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -4225,6 +5262,13 @@ __metadata: languageName: node linkType: hard +"constants-browserify@npm:^1.0.0": + version: 1.0.0 + resolution: "constants-browserify@npm:1.0.0" + checksum: 10c0/ab49b1d59a433ed77c964d90d19e08b2f77213fb823da4729c0baead55e3c597f8f97ebccfdfc47bd896d43854a117d114c849a6f659d9986420e97da0f83ac5 + languageName: node + linkType: hard + "content-disposition@npm:0.5.4, content-disposition@npm:^0.5.4": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" @@ -4283,6 +5327,19 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^7.0.1": + version: 7.1.0 + resolution: "cosmiconfig@npm:7.1.0" + dependencies: + "@types/parse-json": "npm:^4.0.0" + import-fresh: "npm:^3.2.1" + parse-json: "npm:^5.0.0" + path-type: "npm:^4.0.0" + yaml: "npm:^1.10.0" + checksum: 10c0/b923ff6af581638128e5f074a5450ba12c0300b71302398ea38dbeabd33bbcaa0245ca9adbedfcf284a07da50f99ede5658c80bb3e39e2ce770a99d28a21ef03 + languageName: node + linkType: hard + "crelt@npm:^1.0.5, crelt@npm:^1.0.6": version: 1.0.6 resolution: "crelt@npm:1.0.6" @@ -4301,6 +5358,98 @@ __metadata: languageName: node linkType: hard +"css-background-parser@npm:^0.1.0": + version: 0.1.0 + resolution: "css-background-parser@npm:0.1.0" + checksum: 10c0/1065f975b766db95a81599e4e0559abb6c2ddbeb57eeff0de92851cd7e614a832185e81acb92115279c2bd437e8095d7b3cd07d0e1178ddc85f46418cf40a53f + languageName: node + linkType: hard + +"css-box-shadow@npm:1.0.0-3": + version: 1.0.0-3 + resolution: "css-box-shadow@npm:1.0.0-3" + checksum: 10c0/320e90230d66cad98b4a9858b5704765f7eecfe4e7dc8198903634653384ba182fbe2d2ce689ed574812d4107c9f7f0ec68b3d58074bd9450dc5d5c81105c170 + languageName: node + linkType: hard + +"css-color-keywords@npm:^1.0.0": + version: 1.0.0 + resolution: "css-color-keywords@npm:1.0.0" + checksum: 10c0/af205a86c68e0051846ed91eb3e30b4517e1904aac040013ff1d742019b3f9369ba5658ba40901dbbc121186fc4bf0e75a814321cc3e3182fbb2feb81c6d9cb7 + languageName: node + linkType: hard + +"css-gradient-parser@npm:^0.0.17": + version: 0.0.17 + resolution: "css-gradient-parser@npm:0.0.17" + checksum: 10c0/24e2694562aa54bee238391d3bd2fdfe3b865bb2c4e7f71f68a4a78733387ccfc6bc11fd8017f67e2813b67c051b5ab322dab95754a92c333ba8308771538bc8 + languageName: node + linkType: hard + +"css-loader@npm:^6.7.1": + version: 6.11.0 + resolution: "css-loader@npm:6.11.0" + dependencies: + icss-utils: "npm:^5.1.0" + postcss: "npm:^8.4.33" + postcss-modules-extract-imports: "npm:^3.1.0" + postcss-modules-local-by-default: "npm:^4.0.5" + postcss-modules-scope: "npm:^3.2.0" + postcss-modules-values: "npm:^4.0.0" + postcss-value-parser: "npm:^4.2.0" + semver: "npm:^7.5.4" + peerDependencies: + "@rspack/core": 0.x || 1.x + webpack: ^5.0.0 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: 10c0/bb52434138085fed06a33e2ffbdae9ee9014ad23bf60f59d6b7ee67f28f26c6b1764024d3030bd19fd884d6ee6ee2224eaed64ad19eb18fbbb23d148d353a965 + languageName: node + linkType: hard + +"css-select@npm:^4.1.3": + version: 4.3.0 + resolution: "css-select@npm:4.3.0" + dependencies: + boolbase: "npm:^1.0.0" + css-what: "npm:^6.0.1" + domhandler: "npm:^4.3.1" + domutils: "npm:^2.8.0" + nth-check: "npm:^2.0.1" + checksum: 10c0/a489d8e5628e61063d5a8fe0fa1cc7ae2478cb334a388a354e91cf2908154be97eac9fa7ed4dffe87a3e06cf6fcaa6016553115335c4fd3377e13dac7bd5a8e1 + languageName: node + linkType: hard + +"css-to-react-native@npm:^3.0.0": + version: 3.2.0 + resolution: "css-to-react-native@npm:3.2.0" + dependencies: + camelize: "npm:^1.0.0" + css-color-keywords: "npm:^1.0.0" + postcss-value-parser: "npm:^4.0.2" + checksum: 10c0/fde850a511d5d3d7c55a1e9b8ed26b69a8ad4868b3487e36ebfbfc0b96fc34bc977d9cd1d61a289d0c74d3f9a662d8cee297da53d4433bf2e27d6acdff8e1003 + languageName: node + linkType: hard + +"css-what@npm:^6.0.1": + version: 6.2.2 + resolution: "css-what@npm:6.2.2" + checksum: 10c0/91e24c26fb977b4ccef30d7007d2668c1c10ac0154cc3f42f7304410e9594fb772aea4f30c832d2993b132ca8d99338050866476210316345ec2e7d47b248a56 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 + languageName: node + linkType: hard + "cssstyle@npm:^4.2.1": version: 4.6.0 resolution: "cssstyle@npm:4.6.0" @@ -4426,6 +5575,13 @@ __metadata: languageName: node linkType: hard +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + "default-browser-id@npm:^5.0.0": version: 5.0.1 resolution: "default-browser-id@npm:5.0.1" @@ -4454,6 +5610,13 @@ __metadata: languageName: node linkType: hard +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 10c0/db6c63864a9d3b7dc9def55d52764968a5af296de87c1b2cc71d8be8142e445208071953649e0386a8cc37cfcf9a2067a47207f1eb9ff250c2a269658fdae422 + languageName: node + linkType: hard + "define-lazy-prop@npm:^3.0.0": version: 3.0.0 resolution: "define-lazy-prop@npm:3.0.0" @@ -4486,7 +5649,7 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.0, dequal@npm:^2.0.3": +"dequal@npm:^2.0.0, dequal@npm:^2.0.2, dequal@npm:^2.0.3": version: 2.0.3 resolution: "dequal@npm:2.0.3" checksum: 10c0/f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 @@ -4538,6 +5701,63 @@ __metadata: languageName: node linkType: hard +"dom-converter@npm:^0.2.0": + version: 0.2.0 + resolution: "dom-converter@npm:0.2.0" + dependencies: + utila: "npm:~0.4" + checksum: 10c0/e96aa63bd8c6ee3cd9ce19c3aecfc2c42e50a460e8087114794d4f5ecf3a4f052b34ea3bf2d73b5d80b4da619073b49905e6d7d788ceb7814ca4c29be5354a11 + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.2.0" + entities: "npm:^2.0.0" + checksum: 10c0/67d775fa1ea3de52035c98168ddcd59418356943b5eccb80e3c8b3da53adb8e37edb2cc2f885802b7b1765bf5022aec21dfc32910d7f9e6de4c3148f095ab5e0 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: 10c0/686f5a9ef0fff078c1412c05db73a0dce096190036f33e400a07e2a4518e9f56b1e324f5c576a0a747ef0e75b5d985c040b0d51945ce780c0dd3c625a18cd8c9 + languageName: node + linkType: hard + +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" + dependencies: + domelementtype: "npm:^2.2.0" + checksum: 10c0/5c199c7468cb052a8b5ab80b13528f0db3d794c64fc050ba793b574e158e67c93f8336e87fd81e9d5ee43b0e04aea4d8b93ed7be4899cb726a1601b3ba18538b + languageName: node + linkType: hard + +"domutils@npm:^2.5.2, domutils@npm:^2.8.0": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: "npm:^1.0.1" + domelementtype: "npm:^2.2.0" + domhandler: "npm:^4.2.0" + checksum: 10c0/d58e2ae01922f0dd55894e61d18119924d88091837887bf1438f2327f32c65eb76426bd9384f81e7d6dcfb048e0f83c19b222ad7101176ad68cdc9c695b563db + languageName: node + linkType: hard + +"dot-case@npm:^3.0.4": + version: 3.0.4 + resolution: "dot-case@npm:3.0.4" + dependencies: + no-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + checksum: 10c0/5b859ea65097a7ea870e2c91b5768b72ddf7fa947223fd29e167bcdff58fe731d941c48e47a38ec8aa8e43044c8fbd15cd8fa21689a526bc34b6548197cd5b05 + languageName: node + linkType: hard + "dotenv-expand@npm:5.1.0": version: 5.1.0 resolution: "dotenv-expand@npm:5.1.0" @@ -4559,6 +5779,13 @@ __metadata: languageName: node linkType: hard +"dset@npm:^3.1.4": + version: 3.1.4 + resolution: "dset@npm:3.1.4" + checksum: 10c0/b67bbd28dd8a539e90c15ffb61100eb64ef995c5270a124d4f99bbb53f4d82f55a051b731ba81f3215dd9dce2b4c8d69927dc20b3be1c5fc88bab159467aa438 + languageName: node + linkType: hard + "dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": version: 1.0.1 resolution: "dunder-proto@npm:1.0.1" @@ -4615,6 +5842,20 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.263": + version: 1.5.302 + resolution: "electron-to-chromium@npm:1.5.302" + checksum: 10c0/014413f2b4ec3a0e043c68f6c07a760d230b14e36b8549c5b124f386a6318d9641e69be2aa0df1877395dd99922745c1722c8ecb3d72205f0f3b3b3dc44c8442 + languageName: node + linkType: hard + +"emoji-regex-xs@npm:^2.0.1": + version: 2.0.1 + resolution: "emoji-regex-xs@npm:2.0.1" + checksum: 10c0/f34c96377840d4ffff128042509bc5550c9ebc3d67fc3c0d8754772a7c1a13b2fddf797326e174f8ad4114a487c9740a7dbb4d9a670814570b3b628aa64cdfb4 + languageName: node + linkType: hard + "emoji-regex@npm:^10.2.1, emoji-regex@npm:^10.3.0": version: 10.6.0 resolution: "emoji-regex@npm:10.6.0" @@ -4636,6 +5877,13 @@ __metadata: languageName: node linkType: hard +"emojis-list@npm:^3.0.0": + version: 3.0.0 + resolution: "emojis-list@npm:3.0.0" + checksum: 10c0/7dc4394b7b910444910ad64b812392159a21e1a7ecc637c775a440227dcb4f80eff7fe61f4453a7d7603fa23d23d30cc93fe9e4b5ed985b88d6441cd4a35117b + languageName: node + linkType: hard + "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -4678,6 +5926,23 @@ __metadata: languageName: node linkType: hard +"enhanced-resolve@npm:^5.19.0": + version: 5.19.0 + resolution: "enhanced-resolve@npm:5.19.0" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.3.0" + checksum: 10c0/966b1dffb82d5f6a4d6a86e904e812104a999066aa29f9223040aaa751e7c453b462a3f5ef91f8bd4408131ff6f7f90651dd1c804bdcb7944e2099a9c2e45ee2 + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 10c0/7fba6af1f116300d2ba1c5673fc218af1961b20908638391b4e1e6d5850314ee2ac3ec22d741b3a8060479911c99305164aed19b6254bde75e7e6b1b2c3f3aa3 + languageName: node + linkType: hard + "entities@npm:^6.0.0": version: 6.0.1 resolution: "entities@npm:6.0.1" @@ -4699,7 +5964,7 @@ __metadata: languageName: node linkType: hard -"error-ex@npm:^1.3.2": +"error-ex@npm:^1.3.1, error-ex@npm:^1.3.2": version: 1.3.4 resolution: "error-ex@npm:1.3.4" dependencies: @@ -4791,13 +6056,20 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^1.3.1, es-module-lexer@npm:^1.7.0": +"es-module-lexer@npm:^1.3.1, es-module-lexer@npm:^1.5.0, es-module-lexer@npm:^1.7.0": version: 1.7.0 resolution: "es-module-lexer@npm:1.7.0" checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b languageName: node linkType: hard +"es-module-lexer@npm:^2.0.0": + version: 2.0.0 + resolution: "es-module-lexer@npm:2.0.0" + checksum: 10c0/ae78dbbd43035a4b972c46cfb6877e374ea290adfc62bc2f5a083fea242c0b2baaab25c5886af86be55f092f4a326741cb94334cd3c478c383fdc8a9ec5ff817 + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -4854,6 +6126,17 @@ __metadata: languageName: node linkType: hard +"esbuild-register@npm:^3.5.0": + version: 3.6.0 + resolution: "esbuild-register@npm:3.6.0" + dependencies: + debug: "npm:^4.3.4" + peerDependencies: + esbuild: ">=0.12 <1" + checksum: 10c0/77193b7ca32ba9f81b35ddf3d3d0138efb0b1429d71b39480cfee932e1189dd2e492bd32bf04a4d0bc3adfbc7ec7381ceb5ffd06efe35f3e70904f1f686566d5 + languageName: node + linkType: hard + "esbuild@npm:0.27.0": version: 0.27.0 resolution: "esbuild@npm:0.27.0" @@ -4943,7 +6226,7 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.25.0": +"esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0, esbuild@npm:^0.25.0": version: 0.25.12 resolution: "esbuild@npm:0.25.12" dependencies: @@ -5128,7 +6411,7 @@ __metadata: languageName: node linkType: hard -"escape-html@npm:~1.0.3": +"escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 @@ -5142,7 +6425,17 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0": +"eslint-scope@npm:5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + +"esprima@npm:^4.0.0, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -5152,6 +6445,29 @@ __metadata: languageName: node linkType: hard +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + +"estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + "estree-util-attach-comments@npm:^3.0.0": version: 3.0.0 resolution: "estree-util-attach-comments@npm:3.0.0" @@ -5234,7 +6550,7 @@ __metadata: languageName: node linkType: hard -"events@npm:^3.3.0": +"events@npm:^3.2.0, events@npm:^3.3.0": version: 3.3.0 resolution: "events@npm:3.3.0" checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 @@ -5338,7 +6654,7 @@ __metadata: languageName: node linkType: hard -"fast-deep-equal@npm:^3.1.3": +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 @@ -5358,6 +6674,13 @@ __metadata: languageName: node linkType: hard +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + "fast-json-stringify@npm:^6.0.0": version: 6.1.1 resolution: "fast-json-stringify@npm:6.1.1" @@ -5462,6 +6785,13 @@ __metadata: languageName: node linkType: hard +"fflate@npm:^0.7.3": + version: 0.7.4 + resolution: "fflate@npm:0.7.4" + checksum: 10c0/5e749eb3a6ed61a0f6c55756abf9f4258f06f60505db689e22d18503dd252ca5af656d32668e4b7b20714adf8b313febf695d23863a8352f23e325baee0f672d + languageName: node + linkType: hard + "fill-range@npm:^7.1.1": version: 7.1.1 resolution: "fill-range@npm:7.1.1" @@ -5516,6 +6846,29 @@ __metadata: languageName: node linkType: hard +"fork-ts-checker-webpack-plugin@npm:^8.0.0": + version: 8.0.0 + resolution: "fork-ts-checker-webpack-plugin@npm:8.0.0" + dependencies: + "@babel/code-frame": "npm:^7.16.7" + chalk: "npm:^4.1.2" + chokidar: "npm:^3.5.3" + cosmiconfig: "npm:^7.0.1" + deepmerge: "npm:^4.2.2" + fs-extra: "npm:^10.0.0" + memfs: "npm:^3.4.1" + minimatch: "npm:^3.0.4" + node-abort-controller: "npm:^3.0.1" + schema-utils: "npm:^3.1.1" + semver: "npm:^7.3.5" + tapable: "npm:^2.2.1" + peerDependencies: + typescript: ">3.6.0" + webpack: ^5.11.0 + checksum: 10c0/1a2bb9bbd3e943e3b3a45d7fa9e8383698f5fea1ba28f7d18c8372c804460c2f13af53f791360b973fddafd3e88de7af59082c3cb3375f4e7c3365cd85accedc + languageName: node + linkType: hard + "format@npm:^0.2.0": version: 0.2.2 resolution: "format@npm:0.2.2" @@ -5537,14 +6890,25 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:11.3.1": - version: 11.3.1 - resolution: "fs-extra@npm:11.3.1" +"fs-extra@npm:11.3.1": + version: 11.3.1 + resolution: "fs-extra@npm:11.3.1" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/61e5b7285b1ca72c68dfe1058b2514294a922683afac2a80aa90540f9bd85370763d675e3b408ef500077d355956fece3bd24b546790e261c3d3015967e2b2d9 + languageName: node + linkType: hard + +"fs-extra@npm:^10.0.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" dependencies: graceful-fs: "npm:^4.2.0" jsonfile: "npm:^6.0.1" universalify: "npm:^2.0.0" - checksum: 10c0/61e5b7285b1ca72c68dfe1058b2514294a922683afac2a80aa90540f9bd85370763d675e3b408ef500077d355956fece3bd24b546790e261c3d3015967e2b2d9 + checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e languageName: node linkType: hard @@ -5557,6 +6921,13 @@ __metadata: languageName: node linkType: hard +"fs-monkey@npm:^1.0.4": + version: 1.1.0 + resolution: "fs-monkey@npm:1.1.0" + checksum: 10c0/45596fe14753ae8f3fa180724106383de68c8de2836eb24d1647cacf18a6d05335402f3611d32e00234072a60d2f3371024c00cd295593bfbce35b84ff9f6a34 + languageName: node + linkType: hard + "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" @@ -5716,6 +7087,13 @@ __metadata: languageName: node linkType: hard +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 10c0/0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 + languageName: node + linkType: hard + "glob@npm:^10.0.0, glob@npm:^10.2.2": version: 10.5.0 resolution: "glob@npm:10.5.0" @@ -5790,7 +7168,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -5834,6 +7212,13 @@ __metadata: languageName: node linkType: hard +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + "has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": version: 1.0.2 resolution: "has-property-descriptors@npm:1.0.2" @@ -5910,7 +7295,7 @@ __metadata: languageName: node linkType: hard -"hast-util-to-html@npm:^9.0.0": +"hast-util-to-html@npm:^9.0.0, hast-util-to-html@npm:^9.0.5": version: 9.0.5 resolution: "hast-util-to-html@npm:9.0.5" dependencies: @@ -5970,6 +7355,15 @@ __metadata: languageName: node linkType: hard +"he@npm:^1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 10c0/a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17 + languageName: node + linkType: hard + "help-me@npm:^5.0.0": version: 5.0.0 resolution: "help-me@npm:5.0.0" @@ -5977,6 +7371,13 @@ __metadata: languageName: node linkType: hard +"hex-rgb@npm:^4.1.0": + version: 4.3.0 + resolution: "hex-rgb@npm:4.3.0" + checksum: 10c0/ce2c2ff260d9e0686bead74e3318c1684d8a2da856da30ed90535442f705fb4f5cd93ffe70274e2534a7319a99cda6a6617f23d4f163b72867f406e25ea30cb4 + languageName: node + linkType: hard + "highlight.js@npm:^11.11.1": version: 11.11.1 resolution: "highlight.js@npm:11.11.1" @@ -6018,6 +7419,30 @@ __metadata: languageName: node linkType: hard +"html-entities@npm:^2.1.0": + version: 2.6.0 + resolution: "html-entities@npm:2.6.0" + checksum: 10c0/7c8b15d9ea0cd00dc9279f61bab002ba6ca8a7a0f3c36ed2db3530a67a9621c017830d1d2c1c65beb9b8e3436ea663e9cf8b230472e0e413359399413b27c8b7 + languageName: node + linkType: hard + +"html-minifier-terser@npm:^6.0.2": + version: 6.1.0 + resolution: "html-minifier-terser@npm:6.1.0" + dependencies: + camel-case: "npm:^4.1.2" + clean-css: "npm:^5.2.2" + commander: "npm:^8.3.0" + he: "npm:^1.2.0" + param-case: "npm:^3.0.4" + relateurl: "npm:^0.2.7" + terser: "npm:^5.10.0" + bin: + html-minifier-terser: cli.js + checksum: 10c0/1aa4e4f01cf7149e3ac5ea84fb7a1adab86da40d38d77a6fff42852b5ee3daccb78b615df97264e3a6a5c33e57f0c77f471d607ca1e1debd1dab9b58286f4b5a + languageName: node + linkType: hard + "html-url-attributes@npm:^3.0.0": version: 3.0.1 resolution: "html-url-attributes@npm:3.0.1" @@ -6032,6 +7457,39 @@ __metadata: languageName: node linkType: hard +"html-webpack-plugin@npm:^5.5.0": + version: 5.6.6 + resolution: "html-webpack-plugin@npm:5.6.6" + dependencies: + "@types/html-minifier-terser": "npm:^6.0.0" + html-minifier-terser: "npm:^6.0.2" + lodash: "npm:^4.17.21" + pretty-error: "npm:^4.0.0" + tapable: "npm:^2.0.0" + peerDependencies: + "@rspack/core": 0.x || 1.x + webpack: ^5.20.0 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: 10c0/30c07c46c6125d51f9779e4fc3dd1bf30ebd0ef78e9628d918f8e4c45e116e79a31ca5ba3444d2743833335405616b8772a68d6183b0663f016529802422ca9e + languageName: node + linkType: hard + +"htmlparser2@npm:^6.1.0": + version: 6.1.0 + resolution: "htmlparser2@npm:6.1.0" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.0.0" + domutils: "npm:^2.5.2" + entities: "npm:^2.0.0" + checksum: 10c0/3058499c95634f04dc66be8c2e0927cd86799413b2d6989d8ae542ca4dbf5fa948695d02c27d573acf44843af977aec6d9a7bdd0f6faa6b2d99e2a729b2a31b6 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.1.1": version: 4.2.0 resolution: "http-cache-semantics@npm:4.2.0" @@ -6115,6 +7573,15 @@ __metadata: languageName: node linkType: hard +"icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": + version: 5.1.0 + resolution: "icss-utils@npm:5.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/39c92936fabd23169c8611d2b5cc39e39d10b19b0d223352f20a7579f75b39d5f786114a6b8fc62bee8c5fed59ba9e0d38f7219a4db383e324fb3061664b043d + languageName: node + linkType: hard + "ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" @@ -6129,6 +7596,16 @@ __metadata: languageName: node linkType: hard +"import-fresh@npm:^3.2.1": + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/bf8cc494872fef783249709385ae883b447e3eb09db0ebd15dcead7d9afe7224dad7bd7591c6b73b0b19b3c0f9640eb8ee884f01cfaf2887ab995b0b36a0cbec + languageName: node + linkType: hard + "import-meta-resolve@npm:^4.0.0": version: 4.2.0 resolution: "import-meta-resolve@npm:4.2.0" @@ -6230,6 +7707,16 @@ __metadata: languageName: node linkType: hard +"is-arguments@npm:^1.0.4": + version: 1.2.0 + resolution: "is-arguments@npm:1.2.0" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/6377344b31e9fcb707c6751ee89b11f132f32338e6a782ec2eac9393b0cbd32235dad93052998cda778ee058754860738341d8114910d50ada5615912bb929fc + languageName: node + linkType: hard + "is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": version: 3.0.5 resolution: "is-array-buffer@npm:3.0.5" @@ -6333,6 +7820,15 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc + languageName: node + linkType: hard + "is-docker@npm:^3.0.0": version: 3.0.0 resolution: "is-docker@npm:3.0.0" @@ -6379,7 +7875,7 @@ __metadata: languageName: node linkType: hard -"is-generator-function@npm:^1.0.10": +"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": version: 1.1.2 resolution: "is-generator-function@npm:1.1.2" dependencies: @@ -6527,7 +8023,7 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15": +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15, is-typed-array@npm:^1.1.3": version: 1.1.15 resolution: "is-typed-array@npm:1.1.15" dependencies: @@ -6576,6 +8072,15 @@ __metadata: languageName: node linkType: hard +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: "npm:^2.0.0" + checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e + languageName: node + linkType: hard + "is-wsl@npm:^3.1.0": version: 3.1.0 resolution: "is-wsl@npm:3.1.0" @@ -6642,6 +8147,24 @@ __metadata: languageName: node linkType: hard +"javascript-stringify@npm:^2.0.1": + version: 2.1.0 + resolution: "javascript-stringify@npm:2.1.0" + checksum: 10c0/374e74ebff29b94de78da39daa6e530999c58a145aeb293dc21180c4584459b14d9e5721d9bc6ed4eba319c437ef0145c157c946b70ecddcff6668682a002bcc + languageName: node + linkType: hard + +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "npm:*" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/8c4737ffd03887b3c6768e4cc3ca0269c0336c1e4b1b120943958ddb035ed2a0fc6acab6dc99631720a3720af4e708ff84fb45382ad1e83c27946adf3623969b + languageName: node + linkType: hard + "jiti@npm:^2.6.1": version: 2.6.1 resolution: "jiti@npm:2.6.1" @@ -6651,6 +8174,13 @@ __metadata: languageName: node linkType: hard +"jose@npm:^5.1.0": + version: 5.10.0 + resolution: "jose@npm:5.10.0" + checksum: 10c0/e20d9fc58d7e402f2e5f04e824b8897d5579aae60e64cb88ebdea1395311c24537bf4892f7de413fab1acf11e922797fb1b42269bc8fc65089a3749265ccb7b0 + languageName: node + linkType: hard + "joycon@npm:^3.1.1": version: 3.1.1 resolution: "joycon@npm:3.1.1" @@ -6684,6 +8214,13 @@ __metadata: languageName: node linkType: hard +"jsdoc-type-pratt-parser@npm:^4.0.0": + version: 4.8.0 + resolution: "jsdoc-type-pratt-parser@npm:4.8.0" + checksum: 10c0/c2b77751d35e3931db9da96720b544b215830722b748b58ee8ce51ec72092006a4a03c5a59c86a4552d0094975c8d3bcc21a7241a0e47860e127d3fba5b55f33 + languageName: node + linkType: hard + "jsdom@npm:^26.1.0": version: 26.1.0 resolution: "jsdom@npm:26.1.0" @@ -6735,6 +8272,13 @@ __metadata: languageName: node linkType: hard +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + "json-parse-even-better-errors@npm:^3.0.0": version: 3.0.2 resolution: "json-parse-even-better-errors@npm:3.0.2" @@ -6751,6 +8295,13 @@ __metadata: languageName: node linkType: hard +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + "json-schema-traverse@npm:^1.0.0": version: 1.0.0 resolution: "json-schema-traverse@npm:1.0.0" @@ -6765,7 +8316,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.0.0, json5@npm:^2.2.3": +"json5@npm:^2.0.0, json5@npm:^2.1.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -7066,6 +8617,23 @@ __metadata: languageName: node linkType: hard +"linebreak@npm:^1.1.0": + version: 1.1.0 + resolution: "linebreak@npm:1.1.0" + dependencies: + base64-js: "npm:0.0.8" + unicode-trie: "npm:^2.0.0" + checksum: 10c0/b350c90d7b10db30345ed56cdb869548110ce73ccdc4337100eaee50755eed78e9823490e6f2d7ed0adde14f7ed2a12d8583015e072c54f34dc70b316fde133d + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d + languageName: node + linkType: hard + "lines-and-columns@npm:^2.0.3": version: 2.0.4 resolution: "lines-and-columns@npm:2.0.4" @@ -7083,6 +8651,24 @@ __metadata: languageName: node linkType: hard +"loader-runner@npm:^4.3.1": + version: 4.3.1 + resolution: "loader-runner@npm:4.3.1" + checksum: 10c0/a523b6329f114e0a98317158e30a7dfce044b731521be5399464010472a93a15ece44757d1eaed1d8845019869c5390218bc1c7c3110f4eeaef5157394486eac + languageName: node + linkType: hard + +"loader-utils@npm:^2.0.0": + version: 2.0.4 + resolution: "loader-utils@npm:2.0.4" + dependencies: + big.js: "npm:^5.2.2" + emojis-list: "npm:^3.0.0" + json5: "npm:^2.1.2" + checksum: 10c0/d5654a77f9d339ec2a03d88221a5a695f337bf71eb8dea031b3223420bb818964ba8ed0069145c19b095f6c8b8fd386e602a3fc7ca987042bd8bb1dcc90d7100 + languageName: node + linkType: hard + "lodash-es@npm:4.17.21": version: 4.17.21 resolution: "lodash-es@npm:4.17.21" @@ -7090,7 +8676,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.10, lodash@npm:^4.17.21": +"lodash@npm:^4.17.10, lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.23 resolution: "lodash@npm:4.17.23" checksum: 10c0/1264a90469f5bb95d4739c43eb6277d15b6d9e186df4ac68c3620443160fc669e2f14c11e7d8b2ccf078b81d06147c01a8ccced9aab9f9f63d50dcf8cace6bf6 @@ -7114,6 +8700,15 @@ __metadata: languageName: node linkType: hard +"lower-case@npm:^2.0.2": + version: 2.0.2 + resolution: "lower-case@npm:2.0.2" + dependencies: + tslib: "npm:^2.0.3" + checksum: 10c0/3d925e090315cf7dc1caa358e0477e186ffa23947740e4314a7429b6e62d72742e0bbe7536a5ae56d19d7618ce998aba05caca53c2902bd5742fdca5fc57fd7b + languageName: node + linkType: hard + "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.4.3": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" @@ -7160,7 +8755,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.21": +"magic-string@npm:^0.30.21, magic-string@npm:^0.30.5": version: 0.30.21 resolution: "magic-string@npm:0.30.21" dependencies: @@ -7188,6 +8783,13 @@ __metadata: languageName: node linkType: hard +"map-or-similar@npm:^1.5.0": + version: 1.5.0 + resolution: "map-or-similar@npm:1.5.0" + checksum: 10c0/33c6ccfdc272992e33e4e99a69541a3e7faed9de3ac5bc732feb2500a9ee71d3f9d098980a70b7746e7eeb7f859ff7dfb8aa9b5ecc4e34170a32ab78cfb18def + languageName: node + linkType: hard + "markdown-extensions@npm:^2.0.0": version: 2.0.0 resolution: "markdown-extensions@npm:2.0.0" @@ -7486,6 +9088,24 @@ __metadata: languageName: node linkType: hard +"memfs@npm:^3.4.1, memfs@npm:^3.4.12": + version: 3.5.3 + resolution: "memfs@npm:3.5.3" + dependencies: + fs-monkey: "npm:^1.0.4" + checksum: 10c0/038fc81bce17ea92dde15aaa68fa0fdaf4960c721ce3ffc7c2cb87a259333f5159784ea48b3b72bf9e054254d9d0d0d5209d0fdc3d07d08653a09933b168fbd7 + languageName: node + linkType: hard + +"memoizerific@npm:^1.11.3": + version: 1.11.3 + resolution: "memoizerific@npm:1.11.3" + dependencies: + map-or-similar: "npm:^1.5.0" + checksum: 10c0/661bf69b7afbfad57f0208f0c63324f4c96087b480708115b78ee3f0237d86c7f91347f6db31528740b2776c2e34c709bcb034e1e910edee2270c9603a0a469e + languageName: node + linkType: hard + "meow@npm:13.2.0": version: 13.2.0 resolution: "meow@npm:13.2.0" @@ -7509,6 +9129,13 @@ __metadata: languageName: node linkType: hard +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + "merge2@npm:^1.3.0": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -8030,7 +9657,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -8089,6 +9716,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^3.0.4": + version: 3.1.3 + resolution: "minimatch@npm:3.1.3" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/c1ffce4be47e88df013f66f55176c25a93fdd8ad15735309cf1782f0433a02f363cee298f8763ceaaaf85e70ff7f30dc84a1a8d00a6fb6ca72032e5b51f9b89c + languageName: node + linkType: hard + "minimatch@npm:^3.1.1": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -8241,6 +9877,37 @@ __metadata: languageName: node linkType: hard +"no-case@npm:^3.0.4": + version: 3.0.4 + resolution: "no-case@npm:3.0.4" + dependencies: + lower-case: "npm:^2.0.2" + tslib: "npm:^2.0.3" + checksum: 10c0/8ef545f0b3f8677c848f86ecbd42ca0ff3cd9dd71c158527b344c69ba14710d816d8489c746b6ca225e7b615108938a0bda0a54706f8c255933703ac1cf8e703 + languageName: node + linkType: hard + +"node-abort-controller@npm:^3.0.1": + version: 3.1.1 + resolution: "node-abort-controller@npm:3.1.1" + checksum: 10c0/f7ad0e7a8e33809d4f3a0d1d65036a711c39e9d23e0319d80ebe076b9a3b4432b4d6b86a7fab65521de3f6872ffed36fc35d1327487c48eb88c517803403eda3 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.7": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 12.1.0 resolution: "node-gyp@npm:12.1.0" @@ -8384,6 +10051,15 @@ __metadata: languageName: node linkType: hard +"nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" + dependencies: + boolbase: "npm:^1.0.0" + checksum: 10c0/5fee7ff309727763689cfad844d979aedd2204a817fbaaf0e1603794a7c20db28548d7b024692f953557df6ce4a0ee4ae46cd8ebd9b36cfb300b9226b567c479 + languageName: node + linkType: hard + "nwsapi@npm:^2.2.16": version: 2.2.22 resolution: "nwsapi@npm:2.2.22" @@ -8460,6 +10136,24 @@ __metadata: languageName: node linkType: hard +"oniguruma-parser@npm:^0.12.1": + version: 0.12.1 + resolution: "oniguruma-parser@npm:0.12.1" + checksum: 10c0/b843ea54cda833efb19f856314afcbd43e903ece3de489ab78c527ddec84859208052557daa9fad4bdba89ebdd15b0cc250de86b3daf8c7cbe37bac5a6a185d3 + languageName: node + linkType: hard + +"oniguruma-to-es@npm:^4.3.4": + version: 4.3.4 + resolution: "oniguruma-to-es@npm:4.3.4" + dependencies: + oniguruma-parser: "npm:^0.12.1" + regex: "npm:^6.0.1" + regex-recursion: "npm:^6.0.2" + checksum: 10c0/fb58459f50db71c2c4785205636186bfbb125b094c4275512a8f41f123ed3fbf61f37c455f4360ef14a56c693981aecd7da3ae2c05614a222e872c4643b463fc + languageName: node + linkType: hard + "open@npm:10.2.0": version: 10.2.0 resolution: "open@npm:10.2.0" @@ -8472,6 +10166,17 @@ __metadata: languageName: node linkType: hard +"open@npm:^8.0.4": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: "npm:^2.0.0" + is-docker: "npm:^2.1.1" + is-wsl: "npm:^2.2.0" + checksum: 10c0/bb6b3a58401dacdb0aad14360626faf3fb7fba4b77816b373495988b724fb48941cad80c1b65d62bb31a17609b2cd91c41a181602caea597ca80dfbcc27e84c9 + languageName: node + linkType: hard + "ora@npm:8.2.0": version: 8.2.0 resolution: "ora@npm:8.2.0" @@ -8569,6 +10274,42 @@ __metadata: languageName: node linkType: hard +"pako@npm:^0.2.5": + version: 0.2.9 + resolution: "pako@npm:0.2.9" + checksum: 10c0/79c1806ebcf325b60ae599e4d7227c2e346d7b829dc20f5cf24cef07c934079dc3a61c5b3c8278a2f7a190c4a613e343ea11e5302dbe252efd11712df4b6b041 + languageName: node + linkType: hard + +"param-case@npm:^3.0.4": + version: 3.0.4 + resolution: "param-case@npm:3.0.4" + dependencies: + dot-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + checksum: 10c0/ccc053f3019f878eca10e70ec546d92f51a592f762917dafab11c8b532715dcff58356118a6f350976e4ab109e321756f05739643ed0ca94298e82291e6f9e76 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parse-css-color@npm:^0.2.1": + version: 0.2.1 + resolution: "parse-css-color@npm:0.2.1" + dependencies: + color-name: "npm:^1.1.4" + hex-rgb: "npm:^4.1.0" + checksum: 10c0/558f1d9874295a618717b88633fb15343fd4d2952c21b274c77503f251c1ed18086df6cec422b6ca67c8f8f0511baf327fae232d4ed12d55cf116695346161d3 + languageName: node + linkType: hard + "parse-entities@npm:^4.0.0": version: 4.0.2 resolution: "parse-entities@npm:4.0.2" @@ -8584,6 +10325,18 @@ __metadata: languageName: node linkType: hard +"parse-json@npm:^5.0.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + error-ex: "npm:^1.3.1" + json-parse-even-better-errors: "npm:^2.3.0" + lines-and-columns: "npm:^1.1.6" + checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 + languageName: node + linkType: hard + "parse-json@npm:^7.0.0": version: 7.1.1 resolution: "parse-json@npm:7.1.1" @@ -8613,6 +10366,23 @@ __metadata: languageName: node linkType: hard +"pascal-case@npm:^3.1.2": + version: 3.1.2 + resolution: "pascal-case@npm:3.1.2" + dependencies: + no-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + checksum: 10c0/05ff7c344809fd272fc5030ae0ee3da8e4e63f36d47a1e0a4855ca59736254192c5a27b5822ed4bae96e54048eec5f6907713cfcfff7cdf7a464eaf7490786d8 + languageName: node + linkType: hard + +"path-browserify@npm:^1.0.1": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: 10c0/8b8c3fd5c66bd340272180590ae4ff139769e9ab79522e2eb82e3d571a89b8117c04147f65ad066dccfb42fcad902e5b7d794b3d35e0fd840491a8ddbedf8c66 + languageName: node + linkType: hard + "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -8661,6 +10431,13 @@ __metadata: languageName: node linkType: hard +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + "pathe@npm:^1.1.2": version: 1.1.2 resolution: "pathe@npm:1.1.2" @@ -8787,7 +10564,7 @@ __metadata: languageName: node linkType: hard -"playwright@npm:^1.58.2": +"playwright@npm:1.58.2, playwright@npm:^1.58.2": version: 1.58.2 resolution: "playwright@npm:1.58.2" dependencies: @@ -8809,6 +10586,15 @@ __metadata: languageName: node linkType: hard +"polished@npm:^4.2.2": + version: 4.3.1 + resolution: "polished@npm:4.3.1" + dependencies: + "@babel/runtime": "npm:^7.17.8" + checksum: 10c0/45480d4c7281a134281cef092f6ecc202a868475ff66a390fee6e9261386e16f3047b4de46a2f2e1cf7fb7aa8f52d30b4ed631a1e3bcd6f303ca31161d4f07fe + languageName: node + linkType: hard + "portfinder@npm:1.0.37": version: 1.0.37 resolution: "portfinder@npm:1.0.37" @@ -8826,7 +10612,68 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.5.6": +"postcss-modules-extract-imports@npm:^3.1.0": + version: 3.1.0 + resolution: "postcss-modules-extract-imports@npm:3.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/402084bcab376083c4b1b5111b48ec92974ef86066f366f0b2d5b2ac2b647d561066705ade4db89875a13cb175b33dd6af40d16d32b2ea5eaf8bac63bd2bf219 + languageName: node + linkType: hard + +"postcss-modules-local-by-default@npm:^4.0.5": + version: 4.2.0 + resolution: "postcss-modules-local-by-default@npm:4.2.0" + dependencies: + icss-utils: "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" + postcss-value-parser: "npm:^4.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/b0b83feb2a4b61f5383979d37f23116c99bc146eba1741ca3cf1acca0e4d0dbf293ac1810a6ab4eccbe1ee76440dd0a9eb2db5b3bba4f99fc1b3ded16baa6358 + languageName: node + linkType: hard + +"postcss-modules-scope@npm:^3.2.0": + version: 3.2.1 + resolution: "postcss-modules-scope@npm:3.2.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/bd2d81f79e3da0ef6365b8e2c78cc91469d05b58046b4601592cdeef6c4050ed8fe1478ae000a1608042fc7e692cb51fecbd2d9bce3f4eace4d32e883ffca10b + languageName: node + linkType: hard + +"postcss-modules-values@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-modules-values@npm:4.0.0" + dependencies: + icss-utils: "npm:^5.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/dd18d7631b5619fb9921b198c86847a2a075f32e0c162e0428d2647685e318c487a2566cc8cc669fc2077ef38115cde7a068e321f46fb38be3ad49646b639dbc + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^7.0.0": + version: 7.1.1 + resolution: "postcss-selector-parser@npm:7.1.1" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/02d3b1589ddcddceed4b583b098b95a7266dacd5135f041e5d913ebb48e874fd333a36e564cc9a2ec426a464cb18db11cb192ac76247aced5eba8c951bf59507 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.0.2, postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 10c0/f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 + languageName: node + linkType: hard + +"postcss@npm:^8.4.33, postcss@npm:^8.4.38, postcss@npm:^8.5.6": version: 8.5.6 resolution: "postcss@npm:8.5.6" dependencies: @@ -8846,6 +10693,16 @@ __metadata: languageName: node linkType: hard +"pretty-error@npm:^4.0.0": + version: 4.0.0 + resolution: "pretty-error@npm:4.0.0" + dependencies: + lodash: "npm:^4.17.20" + renderkid: "npm:^3.0.0" + checksum: 10c0/dc292c087e2857b2e7592784ab31e37a40f3fa918caa11eba51f9fb2853e1d4d6e820b219917e35f5721d833cfd20fdf4f26ae931a90fd1ad0cae2125c345138 + languageName: node + linkType: hard + "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" @@ -8959,7 +10816,14 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.3.1": +"punycode@npm:^1.4.1": + version: 1.4.1 + resolution: "punycode@npm:1.4.1" + checksum: 10c0/354b743320518aef36f77013be6e15da4db24c2b4f62c5f1eb0529a6ed02fbaf1cb52925785f6ab85a962f2b590d9cd5ad730b70da72b5f180e2556b8bd3ca08 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.3.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 @@ -8975,6 +10839,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.12.3": + version: 6.15.0 + resolution: "qs@npm:6.15.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/ff341078a78a991d8a48b4524d52949211447b4b1ad907f489cac0770cbc346a28e47304455c0320e5fb000f8762d64b03331e3b71865f663bf351bcba8cdb4b + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -8996,7 +10869,16 @@ __metadata: languageName: node linkType: hard -"range-parser@npm:~1.2.1": +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: "npm:^5.1.0" + checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 + languageName: node + linkType: hard + +"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 @@ -9015,6 +10897,17 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0": + version: 19.2.4 + resolution: "react-dom@npm:19.2.4" + dependencies: + scheduler: "npm:^0.27.0" + peerDependencies: + react: ^19.2.4 + checksum: 10c0/f0c63f1794dedb154136d4d0f59af00b41907f4859571c155940296808f4b94bf9c0c20633db75b5b2112ec13d8d7dd4f9bf57362ed48782f317b11d05a44f35 + languageName: node + linkType: hard + "react-dom@npm:^19.1.0": version: 19.2.0 resolution: "react-dom@npm:19.2.0" @@ -9142,6 +11035,13 @@ __metadata: languageName: node linkType: hard +"react@npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0": + version: 19.2.4 + resolution: "react@npm:19.2.4" + checksum: 10c0/cd2c9ff67a720799cc3b38a516009986f7fc4cb8d3e15716c6211cf098d1357ee3e348ab05ad0600042bbb0fd888530ba92e329198c92eafa0994f5213396596 + languageName: node + linkType: hard + "react@npm:^19.1.0": version: 19.2.0 resolution: "react@npm:19.2.0" @@ -9221,6 +11121,19 @@ __metadata: languageName: node linkType: hard +"recast@npm:^0.23.5": + version: 0.23.11 + resolution: "recast@npm:0.23.11" + dependencies: + ast-types: "npm:^0.16.1" + esprima: "npm:~4.0.0" + source-map: "npm:~0.6.1" + tiny-invariant: "npm:^1.3.3" + tslib: "npm:^2.0.1" + checksum: 10c0/45b520a8f0868a5a24ecde495be9de3c48e69a54295d82a7331106554b75cfba75d16c909959d056e9ceed47a1be5e061e2db8b9ecbcd6ba44c2f3ef9a47bd18 + languageName: node + linkType: hard + "recma-build-jsx@npm:^1.0.0": version: 1.0.0 resolution: "recma-build-jsx@npm:1.0.0" @@ -9287,6 +11200,31 @@ __metadata: languageName: node linkType: hard +"regex-recursion@npm:^6.0.2": + version: 6.0.2 + resolution: "regex-recursion@npm:6.0.2" + dependencies: + regex-utilities: "npm:^2.3.0" + checksum: 10c0/68e8b6889680e904b75d7f26edaf70a1a4dc1087406bff53face4c2929d918fd77c72223843fe816ac8ed9964f96b4160650e8d5909e26a998c6e9de324dadb1 + languageName: node + linkType: hard + +"regex-utilities@npm:^2.3.0": + version: 2.3.0 + resolution: "regex-utilities@npm:2.3.0" + checksum: 10c0/78c550a80a0af75223244fff006743922591bd8f61d91fef7c86b9b56cf9bbf8ee5d7adb6d8991b5e304c57c90103fc4818cf1e357b11c6c669b782839bd7893 + languageName: node + linkType: hard + +"regex@npm:^6.0.1": + version: 6.1.0 + resolution: "regex@npm:6.1.0" + dependencies: + regex-utilities: "npm:^2.3.0" + checksum: 10c0/6e0ee2a1c17d5a66dc1120dfc51899dedf6677857e83a0df4d5a822ebb8645a54a079772efc1ade382b67aad35e4e22b5bd2d33c05ed28b0e000f8f57eb0aec1 + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.5.4": version: 1.5.4 resolution: "regexp.prototype.flags@npm:1.5.4" @@ -9336,6 +11274,13 @@ __metadata: languageName: node linkType: hard +"relateurl@npm:^0.2.7": + version: 0.2.7 + resolution: "relateurl@npm:0.2.7" + checksum: 10c0/c248b4e3b32474f116a804b537fa6343d731b80056fb506dffd91e737eef4cac6be47a65aae39b522b0db9d0b1011d1a12e288d82a109ecd94a5299d82f6573a + languageName: node + linkType: hard + "remark-cli@npm:^12.0.1": version: 12.0.1 resolution: "remark-cli@npm:12.0.1" @@ -9464,6 +11409,19 @@ __metadata: languageName: node linkType: hard +"renderkid@npm:^3.0.0": + version: 3.0.0 + resolution: "renderkid@npm:3.0.0" + dependencies: + css-select: "npm:^4.1.3" + dom-converter: "npm:^0.2.0" + htmlparser2: "npm:^6.1.0" + lodash: "npm:^4.17.21" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/24a9fae4cc50e731d059742d1b3eec163dc9e3872b12010d120c3fcbd622765d9cda41f79a1bbb4bf63c1d3442f18a08f6e1642cb5d7ebf092a0ce3f7a3bd143 + languageName: node + linkType: hard + "require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" @@ -9475,9 +11433,11 @@ __metadata: version: 0.0.0-use.local resolution: "rescript-lang.org@workspace:." dependencies: + "@axe-core/playwright": "npm:^4.11.1" "@babel/generator": "npm:^7.24.7" "@babel/parser": "npm:^7.24.7" "@babel/traverse": "npm:^7.24.7" + "@chromatic-com/playwright": "npm:^0.12.8" "@cloudflare/pages-plugin-vercel-og": "npm:^0.1.2" "@codemirror/commands": "npm:^6.9.0" "@codemirror/lang-javascript": "npm:^6.2.4" @@ -9490,6 +11450,7 @@ __metadata: "@headlessui/react": "npm:^2.2.4" "@lezer/highlight": "npm:^1.2.1" "@node-cli/static-server": "npm:^3.1.4" + "@playwright/test": "npm:^1.58.2" "@prettier/plugin-oxc": "npm:^0.0.4" "@react-router/dev": "npm:^7.8.1" "@react-router/node": "npm:^7.8.1" @@ -9534,7 +11495,9 @@ __metadata: remark-gfm: "npm:^4.0.1" remark-validate-links: "npm:^13.1.0" rescript: "npm:^12.0.0" + satori: "npm:^0.19.2" search-insights: "npm:^2.17.3" + shiki: "npm:^3.22.0" tailwindcss: "npm:^4" to-vfile: "npm:^8.0.0" unified: "npm:^11.0.5" @@ -9581,6 +11544,13 @@ __metadata: languageName: node linkType: hard +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + "restore-cursor@npm:^5.0.0": version: 5.1.0 resolution: "restore-cursor@npm:5.1.0" @@ -9736,7 +11706,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 @@ -9750,6 +11720,13 @@ __metadata: languageName: node linkType: hard +"safe-identifier@npm:^0.4.1": + version: 0.4.2 + resolution: "safe-identifier@npm:0.4.2" + checksum: 10c0/a6b0cdb5347e48c5ea4ddf4cdca5359b12529a11a7368225c39f882fcc0e679c81e82e3b13e36bd27ba7bdec9286f4cc062e3e527464d93ba61290b6e0bc6747 + languageName: node + linkType: hard + "safe-push-apply@npm:^1.0.0": version: 1.0.0 resolution: "safe-push-apply@npm:1.0.0" @@ -9794,6 +11771,25 @@ __metadata: languageName: node linkType: hard +"satori@npm:^0.19.2": + version: 0.19.2 + resolution: "satori@npm:0.19.2" + dependencies: + "@shuding/opentype.js": "npm:1.4.0-beta.0" + css-background-parser: "npm:^0.1.0" + css-box-shadow: "npm:1.0.0-3" + css-gradient-parser: "npm:^0.0.17" + css-to-react-native: "npm:^3.0.0" + emoji-regex-xs: "npm:^2.0.1" + escape-html: "npm:^1.0.3" + linebreak: "npm:^1.1.0" + parse-css-color: "npm:^0.2.1" + postcss-value-parser: "npm:^4.2.0" + yoga-layout: "npm:^3.2.1" + checksum: 10c0/8a5b1a6d481466b03d5c8d66ed80427b7c7b95e129eb63bb4b66cf6fe7f3adeeccc4155450a665645208f222bafa9f07d8b14f8aa8a9e71fc0f077ed701a3f4c + languageName: node + linkType: hard + "saxes@npm:^6.0.0": version: 6.0.0 resolution: "saxes@npm:6.0.0" @@ -9810,6 +11806,29 @@ __metadata: languageName: node linkType: hard +"schema-utils@npm:^3.1.1": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" + dependencies: + "@types/json-schema": "npm:^7.0.8" + ajv: "npm:^6.12.5" + ajv-keywords: "npm:^3.5.2" + checksum: 10c0/fafdbde91ad8aa1316bc543d4b61e65ea86970aebbfb750bfb6d8a6c287a23e415e0e926c2498696b242f63af1aab8e585252637fabe811fd37b604351da6500 + languageName: node + linkType: hard + +"schema-utils@npm:^4.0.0, schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.3": + version: 4.3.3 + resolution: "schema-utils@npm:4.3.3" + dependencies: + "@types/json-schema": "npm:^7.0.9" + ajv: "npm:^8.9.0" + ajv-formats: "npm:^2.1.1" + ajv-keywords: "npm:^5.1.0" + checksum: 10c0/1c8d2c480a026d7c02ab2ecbe5919133a096d6a721a3f201fa50663e4f30f6d6ba020dfddd93cb828b66b922e76b342e103edd19a62c95c8f60e9079cc403202 + languageName: node + linkType: hard + "search-insights@npm:^2.17.3": version: 2.17.3 resolution: "search-insights@npm:2.17.3" @@ -9852,6 +11871,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.5.4, semver@npm:^7.6.2": + version: 7.7.4 + resolution: "semver@npm:7.7.4" + bin: + semver: bin/semver.js + checksum: 10c0/5215ad0234e2845d4ea5bb9d836d42b03499546ddafb12075566899fc617f68794bb6f146076b6881d755de17d6c6cc73372555879ec7dce2c2feee947866ad2 + languageName: node + linkType: hard + "send@npm:0.19.0": version: 0.19.0 resolution: "send@npm:0.19.0" @@ -9873,6 +11901,15 @@ __metadata: languageName: node linkType: hard +"serialize-javascript@npm:^6.0.2": + version: 6.0.2 + resolution: "serialize-javascript@npm:6.0.2" + dependencies: + randombytes: "npm:^2.1.0" + checksum: 10c0/2dd09ef4b65a1289ba24a788b1423a035581bef60817bea1f01eda8e3bda623f86357665fe7ac1b50f6d4f583f97db9615b3f07b2a2e8cbcb75033965f771dd2 + languageName: node + linkType: hard + "serve-index@npm:^1.9.1": version: 1.9.1 resolution: "serve-index@npm:1.9.1" @@ -10058,6 +12095,22 @@ __metadata: languageName: node linkType: hard +"shiki@npm:^3.22.0": + version: 3.22.0 + resolution: "shiki@npm:3.22.0" + dependencies: + "@shikijs/core": "npm:3.22.0" + "@shikijs/engine-javascript": "npm:3.22.0" + "@shikijs/engine-oniguruma": "npm:3.22.0" + "@shikijs/langs": "npm:3.22.0" + "@shikijs/themes": "npm:3.22.0" + "@shikijs/types": "npm:3.22.0" + "@shikijs/vscode-textmate": "npm:^10.0.2" + "@types/hast": "npm:^3.0.4" + checksum: 10c0/a7c91d769b42a69c496848197d876ec4577f789d1e7e3b5c18136a289f1dcac805bf24d56e43abb48be9c7cc6767c0f70eb2e2f33f77f4f5377141fb6851e840 + languageName: node + linkType: hard + "side-channel-list@npm:^1.0.0": version: 1.0.0 resolution: "side-channel-list@npm:1.0.0" @@ -10182,7 +12235,17 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.1": +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 @@ -10312,6 +12375,24 @@ __metadata: languageName: node linkType: hard +"storybook@npm:~8.5.8": + version: 8.5.8 + resolution: "storybook@npm:8.5.8" + dependencies: + "@storybook/core": "npm:8.5.8" + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + bin: + getstorybook: ./bin/index.cjs + sb: ./bin/index.cjs + storybook: ./bin/index.cjs + checksum: 10c0/a02ccf3132c05341139deb23dd7731191b4542b80d0d4ed772d06f483373be5713e3db1003fddb8823da417c5c9353273032d30d61cfa6084a04b9b33dc764cc + languageName: node + linkType: hard + "stream-shift@npm:^1.0.0, stream-shift@npm:^1.0.2": version: 1.0.3 resolution: "stream-shift@npm:1.0.3" @@ -10363,6 +12444,13 @@ __metadata: languageName: node linkType: hard +"string.prototype.codepointat@npm:^0.2.1": + version: 0.2.1 + resolution: "string.prototype.codepointat@npm:0.2.1" + checksum: 10c0/83c4d2f83b6f3f8f377e0b36628b74a9efcaf5a725e6fb6354f15f30f0399c8f4b08956df883877b2b0f50dd2e644ed7e8b1f6d45bdee2dc5b3f4248796607fa + languageName: node + linkType: hard + "string.prototype.trim@npm:^1.2.10": version: 1.2.10 resolution: "string.prototype.trim@npm:1.2.10" @@ -10461,6 +12549,15 @@ __metadata: languageName: node linkType: hard +"style-loader@npm:^3.3.1": + version: 3.3.4 + resolution: "style-loader@npm:3.3.4" + peerDependencies: + webpack: ^5.0.0 + checksum: 10c0/8f8027fc5c6e91400cbb60066e7db3315810f8eaa0d19b2a254936eb0bec399ba8a7043b1789da9d05ab7c3ba50faf9267765ae0bf3571e48aa34ecdc774be37 + languageName: node + linkType: hard + "style-mod@npm:^4.0.0, style-mod@npm:^4.1.0": version: 4.1.3 resolution: "style-mod@npm:4.1.3" @@ -10493,6 +12590,24 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + "supports-color@npm:^9.0.0": version: 9.4.0 resolution: "supports-color@npm:9.4.0" @@ -10533,7 +12648,7 @@ __metadata: languageName: node linkType: hard -"tapable@npm:^2.2.0": +"tapable@npm:^2.0.0, tapable@npm:^2.2.0, tapable@npm:^2.2.1, tapable@npm:^2.3.0": version: 2.3.0 resolution: "tapable@npm:2.3.0" checksum: 10c0/cb9d67cc2c6a74dedc812ef3085d9d681edd2c1fa18e4aef57a3c0605fdbe44e6b8ea00bd9ef21bc74dd45314e39d31227aa031ebf2f5e38164df514136f2681 @@ -10553,6 +12668,42 @@ __metadata: languageName: node linkType: hard +"terser-webpack-plugin@npm:^5.3.1, terser-webpack-plugin@npm:^5.3.16": + version: 5.3.16 + resolution: "terser-webpack-plugin@npm:5.3.16" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.25" + jest-worker: "npm:^27.4.5" + schema-utils: "npm:^4.3.0" + serialize-javascript: "npm:^6.0.2" + terser: "npm:^5.31.1" + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 10c0/39e37c5b3015c1a5354a3633f77235677bfa06eac2608ce26d258b1d1a74070a99910319a6f2f2c437eb61dc321f66434febe01d78e73fa96b4d4393b813f4cf + languageName: node + linkType: hard + +"terser@npm:^5.10.0, terser@npm:^5.31.1": + version: 5.46.0 + resolution: "terser@npm:5.46.0" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.15.0" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/93ad468f13187c4f66b609bbfc00a6aee752007779ca3157f2c1ee063697815748d6010fd449a16c30be33213748431d5f54cc0224ba6a3fbbf5acd3582a4356 + languageName: node + linkType: hard + "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -10586,6 +12737,20 @@ __metadata: languageName: node linkType: hard +"tiny-inflate@npm:^1.0.0": + version: 1.0.3 + resolution: "tiny-inflate@npm:1.0.3" + checksum: 10c0/fab687537254f6ec44c9a2e880048fe70da3542aba28f73cda3e74c95cabf342a339372f2a6c032e322324f01accc03ca26c04ba2bad9b3eb8cf3ee99bba7f9b + languageName: node + linkType: hard + +"tiny-invariant@npm:^1.3.1, tiny-invariant@npm:^1.3.3": + version: 1.3.3 + resolution: "tiny-invariant@npm:1.3.3" + checksum: 10c0/65af4a07324b591a059b35269cd696aba21bef2107f29b9f5894d83cc143159a204b299553435b03874ebb5b94d019afa8b8eff241c8a4cfee95872c2e1c1c4a + languageName: node + linkType: hard + "tinybench@npm:^2.9.0": version: 2.9.0 resolution: "tinybench@npm:2.9.0" @@ -10692,6 +12857,13 @@ __metadata: languageName: node linkType: hard +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + "traverse@npm:^0.6.6": version: 0.6.11 resolution: "traverse@npm:0.6.11" @@ -10717,13 +12889,27 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.4.0, tslib@npm:^2.8.0": +"ts-dedent@npm:^2.0.0, ts-dedent@npm:^2.2.0": + version: 2.2.0 + resolution: "ts-dedent@npm:2.2.0" + checksum: 10c0/175adea838468cc2ff7d5e97f970dcb798bbcb623f29c6088cb21aa2880d207c5784be81ab1741f56b9ac37840cbaba0c0d79f7f8b67ffe61c02634cafa5c303 + languageName: node + linkType: hard + +"tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:^2.8.0": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 languageName: node linkType: hard +"type-fest@npm:^2.19.0": + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: 10c0/a5a7ecf2e654251613218c215c7493574594951c08e52ab9881c9df6a6da0aeca7528c213c622bc374b4e0cb5c443aa3ab758da4e3c959783ce884c3194e12cb + languageName: node + linkType: hard + "type-fest@npm:^3.8.0": version: 3.13.1 resolution: "type-fest@npm:3.13.1" @@ -10884,6 +13070,16 @@ __metadata: languageName: node linkType: hard +"unicode-trie@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-trie@npm:2.0.0" + dependencies: + pako: "npm:^0.2.5" + tiny-inflate: "npm:^1.0.0" + checksum: 10c0/2422368645249f315640a1c9e9506046aa7738fc9c5d59e15c207cdd6ec66101c35b0b9f75dc3ac28fe7be19aaf1efc898bbea074fa1e8e295ef736aeb7904bb + languageName: node + linkType: hard + "unified-args@npm:^11.0.0": version: 11.0.1 resolution: "unified-args@npm:11.0.1" @@ -11043,6 +13239,16 @@ __metadata: languageName: node linkType: hard +"unplugin@npm:^1.3.1": + version: 1.16.1 + resolution: "unplugin@npm:1.16.1" + dependencies: + acorn: "npm:^8.14.0" + webpack-virtual-modules: "npm:^0.6.2" + checksum: 10c0/dd5f8c5727d0135847da73cf03fb199107f1acf458167034886fda3405737dab871ad3926431b4f70e1e82cdac482ac1383cea4019d782a68515c8e3e611b6cc + languageName: node + linkType: hard + "update-browserslist-db@npm:^1.1.4": version: 1.1.4 resolution: "update-browserslist-db@npm:1.1.4" @@ -11057,6 +13263,29 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.2.0": + version: 1.2.3 + resolution: "update-browserslist-db@npm:1.2.3" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/13a00355ea822388f68af57410ce3255941d5fb9b7c49342c4709a07c9f230bbef7f7499ae0ca7e0de532e79a82cc0c4edbd125f1a323a1845bf914efddf8bec + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + "urijs@npm:^1.19.1": version: 1.19.11 resolution: "urijs@npm:1.19.11" @@ -11064,6 +13293,16 @@ __metadata: languageName: node linkType: hard +"url@npm:^0.11.0": + version: 0.11.4 + resolution: "url@npm:0.11.4" + dependencies: + punycode: "npm:^1.4.1" + qs: "npm:^6.12.3" + checksum: 10c0/cc93405ae4a9b97a2aa60ca67f1cb1481c0221cb4725a7341d149be5e2f9cfda26fd432d64dbbec693d16593b68b8a46aad8e5eab21f814932134c9d8620c662 + languageName: node + linkType: hard + "use-sync-external-store@npm:^1.4.0, use-sync-external-store@npm:^1.5.0": version: 1.6.0 resolution: "use-sync-external-store@npm:1.6.0" @@ -11073,13 +13312,33 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 languageName: node linkType: hard +"util@npm:^0.12.4, util@npm:^0.12.5": + version: 0.12.5 + resolution: "util@npm:0.12.5" + dependencies: + inherits: "npm:^2.0.3" + is-arguments: "npm:^1.0.4" + is-generator-function: "npm:^1.0.7" + is-typed-array: "npm:^1.1.3" + which-typed-array: "npm:^1.1.2" + checksum: 10c0/c27054de2cea2229a66c09522d0fa1415fb12d861d08523a8846bf2e4cbf0079d4c3f725f09dcb87493549bcbf05f5798dce1688b53c6c17201a45759e7253f3 + languageName: node + linkType: hard + +"utila@npm:~0.4": + version: 0.4.0 + resolution: "utila@npm:0.4.0" + checksum: 10c0/2791604e09ca4f77ae314df83e80d1805f867eb5c7e13e7413caee01273c278cf2c9a3670d8d25c889a877f7b149d892fe61b0181a81654b425e9622ab23d42e + languageName: node + linkType: hard + "utils-merge@npm:1.0.1": version: 1.0.1 resolution: "utils-merge@npm:1.0.1" @@ -11096,6 +13355,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^9.0.0": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 10c0/1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b + languageName: node + linkType: hard + "valibot@npm:^1.1.0": version: 1.2.0 resolution: "valibot@npm:1.2.0" @@ -11456,6 +13724,23 @@ __metadata: languageName: node linkType: hard +"watchpack@npm:^2.5.1": + version: 2.5.1 + resolution: "watchpack@npm:2.5.1" + dependencies: + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.1.2" + checksum: 10c0/dffbb483d1f61be90dc570630a1eb308581e2227d507d783b1d94a57ac7b705ecd9a1a4b73d73c15eab596d39874e5276a3d9cb88bbb698bafc3f8d08c34cf17 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -11463,6 +13748,87 @@ __metadata: languageName: node linkType: hard +"webpack-dev-middleware@npm:^6.1.2": + version: 6.1.3 + resolution: "webpack-dev-middleware@npm:6.1.3" + dependencies: + colorette: "npm:^2.0.10" + memfs: "npm:^3.4.12" + mime-types: "npm:^2.1.31" + range-parser: "npm:^1.2.1" + schema-utils: "npm:^4.0.0" + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + checksum: 10c0/0f31670835f3c0f588392235a6183facf314c0dca312467254a56458142be6fee746f7f6b304f281c740364fd36f256c597ab37d87e5971633cee2f70a8cd5e7 + languageName: node + linkType: hard + +"webpack-hot-middleware@npm:^2.25.1": + version: 2.26.1 + resolution: "webpack-hot-middleware@npm:2.26.1" + dependencies: + ansi-html-community: "npm:0.0.8" + html-entities: "npm:^2.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/13a3e78009e373b4ee990ffe1d4d49046e9893148a7106f063e11f962d02b744ea58b1dec25f5e76723c9dce678b9e68c883e7f2af2940aaf4de7aab31264c83 + languageName: node + linkType: hard + +"webpack-sources@npm:^3.3.3": + version: 3.3.4 + resolution: "webpack-sources@npm:3.3.4" + checksum: 10c0/94a42508531338eb41939cf1d48a4a8a6db97f3a47e5453cff2133a68d3169ca779d4bcbe9dfed072ce16611959eba1e16f085bc2dc56714e1a1c1783fd661a3 + languageName: node + linkType: hard + +"webpack-virtual-modules@npm:^0.6.0, webpack-virtual-modules@npm:^0.6.2": + version: 0.6.2 + resolution: "webpack-virtual-modules@npm:0.6.2" + checksum: 10c0/5ffbddf0e84bf1562ff86cf6fcf039c74edf09d78358a6904a09bbd4484e8bb6812dc385fe14330b715031892dcd8423f7a88278b57c9f5002c84c2860179add + languageName: node + linkType: hard + +"webpack@npm:5": + version: 5.105.2 + resolution: "webpack@npm:5.105.2" + dependencies: + "@types/eslint-scope": "npm:^3.7.7" + "@types/estree": "npm:^1.0.8" + "@types/json-schema": "npm:^7.0.15" + "@webassemblyjs/ast": "npm:^1.14.1" + "@webassemblyjs/wasm-edit": "npm:^1.14.1" + "@webassemblyjs/wasm-parser": "npm:^1.14.1" + acorn: "npm:^8.15.0" + acorn-import-phases: "npm:^1.0.3" + browserslist: "npm:^4.28.1" + chrome-trace-event: "npm:^1.0.2" + enhanced-resolve: "npm:^5.19.0" + es-module-lexer: "npm:^2.0.0" + eslint-scope: "npm:5.1.1" + events: "npm:^3.2.0" + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.2.11" + json-parse-even-better-errors: "npm:^2.3.1" + loader-runner: "npm:^4.3.1" + mime-types: "npm:^2.1.27" + neo-async: "npm:^2.6.2" + schema-utils: "npm:^4.3.3" + tapable: "npm:^2.3.0" + terser-webpack-plugin: "npm:^5.3.16" + watchpack: "npm:^2.5.1" + webpack-sources: "npm:^3.3.3" + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 10c0/565df8072c00d72e0a22e136971862b7eac7beb8b8d39a2ae4ab00838941ea58acc5b49dd7ea268e3d839810756cb86ba5c272b3a25904f6db7807cfa8ed0b29 + languageName: node + linkType: hard + "whatwg-encoding@npm:^3.1.1": version: 3.1.1 resolution: "whatwg-encoding@npm:3.1.1" @@ -11489,6 +13855,16 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" @@ -11550,6 +13926,21 @@ __metadata: languageName: node linkType: hard +"which-typed-array@npm:^1.1.2": + version: 1.1.20 + resolution: "which-typed-array@npm:1.1.20" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.4" + for-each: "npm:^0.3.5" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/16fcdada95c8afb821cd1117f0ab50b4d8551677ac08187f21d4e444530913c9ffd2dac634f0c1183345f96344b69280f40f9a8bc52164ef409e555567c2604b + languageName: node + linkType: hard + "which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -11746,7 +14137,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.18.3": +"ws@npm:^8.18.3, ws@npm:^8.2.3": version: 8.19.0 resolution: "ws@npm:8.19.0" peerDependencies: @@ -11812,6 +14203,24 @@ __metadata: languageName: node linkType: hard +"yaml-loader@npm:^0.8.0": + version: 0.8.1 + resolution: "yaml-loader@npm:0.8.1" + dependencies: + javascript-stringify: "npm:^2.0.1" + loader-utils: "npm:^2.0.0" + yaml: "npm:^2.0.0" + checksum: 10c0/4bb4789c8ace38067ff68a67fba27626c0793f4d001a485d2334bff7c4fed73ee1696bee287949a834c3387655df2e27e3d7c52ad7d3c20cd5c5ecbff320ff57 + languageName: node + linkType: hard + +"yaml@npm:^1.10.0": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f + languageName: node + linkType: hard + "yaml@npm:^2.0.0": version: 2.8.1 resolution: "yaml@npm:2.8.1" @@ -11821,6 +14230,22 @@ __metadata: languageName: node linkType: hard +"yaml@npm:^2.3.1": + version: 2.8.2 + resolution: "yaml@npm:2.8.2" + bin: + yaml: bin.mjs + checksum: 10c0/703e4dc1e34b324aa66876d63618dcacb9ed49f7e7fe9b70f1e703645be8d640f68ab84f12b86df8ac960bac37acf5513e115de7c970940617ce0343c8c9cd96 + languageName: node + linkType: hard + +"yoga-layout@npm:^3.2.1": + version: 3.2.1 + resolution: "yoga-layout@npm:3.2.1" + checksum: 10c0/9001e51be993c85e03757e5a04a2b61b8b30c9e5a7865d0156ca87a6431a3b717d51eb4990bfe588189fcfeac688dd9c3de707bbd50d1c344a84e63974cc54a8 + languageName: node + linkType: hard + "youch-core@npm:^0.3.3": version: 0.3.3 resolution: "youch-core@npm:0.3.3"