diff --git a/.github/workflows/format-command.yml b/.github/workflows/format-command.yml new file mode 100644 index 000000000..57441d7cc --- /dev/null +++ b/.github/workflows/format-command.yml @@ -0,0 +1,82 @@ +name: Format PR + +on: + issue_comment: + types: [created] + +jobs: + format: + name: Format Code + if: | + github.event.issue.pull_request && + contains(github.event.comment.body, '/format') && + (github.event.comment.author_association == 'OWNER' || + github.event.comment.author_association == 'MEMBER' || + github.event.comment.author_association == 'COLLABORATOR') + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Acknowledge command + uses: actions/github-script@v9 + with: + script: | + await github.rest.reactions.createForIssueComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: context.payload.comment.id, + content: 'eyes' + }); + + - name: Get PR details + uses: actions/github-script@v9 + id: get-pr + with: + script: | + const prNumber = context.issue.number; + const { data: pr } = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: prNumber + }); + core.setOutput('branch', pr.head.ref); + core.setOutput('sha', pr.head.sha); + core.setOutput('repo', pr.head.repo.full_name); + + - name: Checkout PR branch + uses: actions/checkout@v6 + with: + repository: ${{ steps.get-pr.outputs.repo }} + ref: ${{ steps.get-pr.outputs.sha }} + token: ${{ secrets.GITHUB_TOKEN }} + + - uses: pnpm/action-setup@v6 + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version-file: '.nvmrc' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run format + run: pnpm format . + + - name: Commit and push changes + uses: stefanzweifel/git-auto-commit-action@v7 + with: + commit_message: 'style: format code with prettier' + branch: ${{ steps.get-pr.outputs.branch }} + + - name: React to comment + uses: actions/github-script@v9 + with: + script: | + await github.rest.reactions.createForIssueComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: context.payload.comment.id, + content: 'rocket' + }); diff --git a/.github/workflows/manual-format.yml b/.github/workflows/manual-format.yml new file mode 100644 index 000000000..a924f6a48 --- /dev/null +++ b/.github/workflows/manual-format.yml @@ -0,0 +1,43 @@ +name: Manual Format + +on: + workflow_dispatch: + +jobs: + format: + name: Format Code + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Setup pnpm + uses: pnpm/action-setup@v6 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version-file: '.nvmrc' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run format + run: pnpm format . + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v8 + with: + commit-message: 'Format code with Prettier' + title: 'Format code with Prettier' + body: | + This PR was automatically created by the **Manual Format** workflow. + + It runs `pnpm format .` on the `main` branch to ensure code style consistency. + branch: manual-format + base: main + delete-branch: true diff --git a/.github/workflows/scheduled-build.yml b/.github/workflows/scheduled-build.yml index c3fd8c31c..6dc11bdd1 100644 --- a/.github/workflows/scheduled-build.yml +++ b/.github/workflows/scheduled-build.yml @@ -1,11 +1,12 @@ name: Scheduled Rebuild on: - schedule: - # Every 30 minutes - - cron: '*/30 * * * *' workflow_dispatch: - # Allow manual triggering +# schedule: +# # Every 30 minutes +# - cron: '*/30 * * * *' +# workflow_dispatch: +# # Allow manual triggering jobs: rebuild: diff --git a/.github/workflows/visual-diff-comment.yml b/.github/workflows/visual-diff-comment.yml new file mode 100644 index 000000000..d14c8f34d --- /dev/null +++ b/.github/workflows/visual-diff-comment.yml @@ -0,0 +1,88 @@ +name: Visual diff scope comment + +# Posts (or updates) a sticky PR comment summarizing visual-diff coverage after +# each successful run of the Visual diff workflow. Runs via `workflow_run` so it +# executes in the base-repo context with write permissions, even for PRs from +# forks — GITHUB_TOKEN on the source `pull_request` workflow is read-only for +# forks. +# +# Safety: this workflow consumes an artifact produced by the fork's run, but +# only treats it as data — it renders the Markdown body into a PR comment and +# never executes any script from the fork's checkout. The PR number is derived +# from `workflow_run.head_sha` via the trusted GitHub API (not from anything +# the fork could tamper with), so a compromised artifact can't steer the +# comment onto an arbitrary PR. + +on: + workflow_run: + workflows: [Visual diff (Chromatic)] + types: [completed] + +permissions: + # Setting permissions at workflow level makes every unlisted scope `none` — + # actions: read is needed for the cross-run artifact download below. + actions: read + pull-requests: write + +jobs: + comment: + runs-on: ubuntu-latest + if: >- + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.conclusion == 'success' + steps: + - name: Resolve PR from trusted workflow_run payload + id: pr + uses: actions/github-script@v7 + with: + script: | + const run = context.payload.workflow_run + // Look up open PRs by head ref directly. We deliberately don't use + // `listPullRequestsAssociatedWithCommit` here: when the commit is + // on the repo's default branch, that endpoint only returns merged + // PRs, so an open PR whose head is at this commit gets filtered + // out (hit on a fork where the feature branch was the default). + // `pulls?head=` has no such quirk. + const headOwner = run.head_repository?.owner?.login + const headBranch = run.head_branch + const { data: prs } = await github.rest.pulls.list({ + owner: context.repo.owner, + repo: context.repo.repo, + state: 'open', + head: `${headOwner}:${headBranch}` + }) + // Narrow by trusted workflow_run fields — head_repository.id and + // head_sha — so a commit shared between multiple open PRs routes + // the comment to the right one. Edge case we don't handle: same + // fork branch opened as TWO open PRs against different base + // branches simultaneously (rare). In that case `.find()` picks + // the first match and the comment may land on the wrong PR + // until one is closed. + const match = prs.find((p) => { + if (run.head_repository?.id && p.head.repo?.id !== run.head_repository.id) return false + if (p.head.sha !== run.head_sha) return false + return true + }) + if (!match) { + core.info(`No open PR matches ${run.head_repository?.full_name}:${run.head_branch}@${run.head_sha}; skipping comment.`) + return '' + } + core.setOutput('number', String(match.number)) + return String(match.number) + - name: Download scope artifact + id: download + if: steps.pr.outputs.number != '' + uses: actions/download-artifact@v4 + continue-on-error: true + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + name: visual-diff-scope + path: scope + - name: Post or update sticky comment + if: steps.pr.outputs.number != '' && steps.download.outcome == 'success' + uses: marocchino/sticky-pull-request-comment@v2 + with: + header: visual-diff-scope + number: ${{ steps.pr.outputs.number }} + path: scope/body.md diff --git a/.github/workflows/visual-diff.yml b/.github/workflows/visual-diff.yml new file mode 100644 index 000000000..465726f71 --- /dev/null +++ b/.github/workflows/visual-diff.yml @@ -0,0 +1,118 @@ +name: Visual diff (Chromatic) + +on: + push: + branches: + - main + pull_request: + +permissions: + contents: read + +concurrency: + group: visual-diff-${{ github.ref }} + cancel-in-progress: true + +jobs: + chromatic: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + - uses: pnpm/action-setup@v5 + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version-file: '.nvmrc' + cache: 'pnpm' + - name: Copy environment file + run: cp template.env .env + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Cache imagetools transforms + uses: actions/cache@v4 + with: + path: node_modules/.cache/imagetools + key: imagetools-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml', 'vite.config.ts', 'src/**/*.{png,jpg,jpeg,webp,avif,svg}', 'static/**/*.{png,jpg,jpeg,webp,avif,svg}') }} + restore-keys: | + imagetools-${{ runner.os }}- + - name: Cache Playwright browsers + id: playwright-cache + uses: actions/cache@v4 + with: + path: ~/.cache/ms-playwright + key: playwright-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} + restore-keys: | + playwright-${{ runner.os }}- + - name: Install Playwright (browser + deps on cache miss) + if: steps.playwright-cache.outputs.cache-hit != 'true' + run: pnpm exec playwright install --with-deps chromium + - name: Install Playwright system deps (cache hit) + if: steps.playwright-cache.outputs.cache-hit == 'true' + run: pnpm exec playwright install-deps chromium + - name: Run Playwright tests + run: pnpm exec playwright test + env: + VISUAL_TEST: '1' + # NPM_CONFIG_NODE_OPTIONS is the only way to propagate --import through + # pnpm: pnpm overwrites NODE_OPTIONS (with --experimental-global-webcrypto) + # when spawning scripts, but npm config values pass through untouched. + # See https://github.com/pnpm/pnpm/issues/6210 + NPM_CONFIG_NODE_OPTIONS: '--import ./tests/visual/msw-setup.ts' + # Fake keys so the SDKs actually make HTTP requests (they short-circuit + # to a "no key" error otherwise, bypassing MSW entirely). The real + # requests are intercepted by MSW and served from fixtures. + AIRTABLE_API_KEY: 'fake-visual-test-key' + NOTION_API_KEY: 'fake-visual-test-key' + # Log of un-fixtured outbound requests (catch-all hits + unhandled + # bypasses). Surfaced by the scope-comment companion workflow. + MSW_WARN_LOG: ${{ github.workspace }}/msw-warn.log + - name: Upload Playwright report + if: always() + uses: actions/upload-artifact@v4 + with: + name: playwright-report + path: playwright-report/ + retention-days: 14 + - name: Publish to Chromatic + id: chromatic + # Inlined plaintext token — Chromatic's own recommended pattern for fork-PR + # support (forks can't read repo secrets). The token is a project-scoped + # write credential (anyone with it can run builds and consume snapshot + # quota for this project), rotatable from the Chromatic UI. See + # https://www.chromatic.com/docs/github-actions/ for the full rationale + # and any capability/scope details. + uses: chromaui/action@v16 + with: + playwright: true + projectToken: chpt_cefd614c783fb5c + exitZeroOnChanges: true + exitOnceUploaded: true + - name: Generate scope comment + # Only on successful test runs — the comment describes what was + # covered, and an early-failed run has nothing meaningful to report. + # Runs after Chromatic publish so the scope comment can link to the + # Chromatic build URL (where reviewers accept/deny snapshots). + if: success() && github.event_name == 'pull_request' + env: + MSW_WARN_LOG: ${{ github.workspace }}/msw-warn.log + # The head SHA of the PR. The runner's GITHUB_SHA on pull_request + # events points at the auto-generated merge-ref commit, and a + # step-level env override of GITHUB_SHA doesn't beat the runner + # injection, so pass through a distinct variable. + SCOPE_HEAD_SHA: ${{ github.event.pull_request.head.sha }} + CHROMATIC_BUILD_URL: ${{ steps.chromatic.outputs.buildUrl }} + run: | + mkdir -p scope + node --experimental-strip-types tests/visual/scope-comment.ts > scope/body.md + - name: Upload scope comment artifact + # Fork PRs can't be trusted to write an honest pr-number.txt, so the + # companion workflow derives the PR number from the workflow_run + # payload's head_sha (trusted, served by the base repo's API) instead. + if: success() && github.event_name == 'pull_request' + uses: actions/upload-artifact@v4 + with: + name: visual-diff-scope + path: scope/ + retention-days: 1 diff --git a/.gitignore b/.gitignore index 054022cb1..806d93f30 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,12 @@ CLAUDE.md .env.sentry-build-plugin .prettierignore + +# Playwright +/test-results +/playwright-report + +# Chromatic (only produced by local CLI runs, not CI) +/build-archive.log +/chromatic.log +/chromatic-diagnostics.json diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index cb2c84d5c..000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1 +0,0 @@ -pnpm lint-staged diff --git a/.lintstagedrc.json b/.lintstagedrc.json deleted file mode 100644 index 68f45efb0..000000000 --- a/.lintstagedrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "*": "pnpm format" -} diff --git a/eslint.config.js b/eslint.config.js index 70cda487d..e9ea29372 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -8,6 +8,7 @@ import { defineConfig, globalIgnores } from 'eslint/config' import globals from 'globals' import ts from 'typescript-eslint' import emptyMarkdownLinks from './eslint/plugin-empty-markdown-links.js' +import markdownScripts from './eslint/plugin-markdown-scripts.js' import svelteConfig from './svelte.config.js' // See https://typescript-eslint.io/troubleshooting/typed-linting/performance#changes-to-extrafileextensions-with-projectservice @@ -64,7 +65,11 @@ export default defineConfig( }, { files: ['src/posts/**/*.md'], + plugins: { + markdownScripts + }, rules: { + 'markdownScripts/no-script-with-src': 'error', 'no-restricted-syntax': [ 'error', { diff --git a/eslint/plugin-markdown-scripts.js b/eslint/plugin-markdown-scripts.js new file mode 100644 index 000000000..b21be6cca --- /dev/null +++ b/eslint/plugin-markdown-scripts.js @@ -0,0 +1,52 @@ +/** @type {import('@eslint/markdown').MarkdownRuleDefinition} */ +const noScriptWithSrc = { + meta: { + type: 'problem', + docs: { + description: 'Disallow top-level script elements with a src property in markdown', + recommended: true + }, + messages: { + noScriptWithSrc: + 'Top-level script elements with a src property are disallowed as they cause issues during prerendering. Wrap them in a
or a component if they are intended as literal HTML.' + }, + schema: [] + }, + create(context) { + return { + html(node) { + const value = (node.value || '').replace(//g, '') + const tagRegex = /<(\/?)([a-z0-9-]+)([^>]*?)(\/?)>/gi + let match + let depth = 0 + + while ((match = tagRegex.exec(value)) !== null) { + const [_, isClosing, tagName, attr, isSelfClosing] = match + const lowerTagName = tagName.toLowerCase() + + if (lowerTagName === 'script' && !isClosing) { + if (depth === 0 && /\bsrc\s*=/i.test(attr)) { + context.report({ + node, + messageId: 'noScriptWithSrc' + }) + break + } + } + + if (isClosing) { + depth = Math.max(0, depth - 1) + } else if (!isSelfClosing) { + depth++ + } + } + } + } + } +} + +export default { + rules: { + 'no-script-with-src': noScriptWithSrc + } +} diff --git a/knip.config.ts b/knip.config.ts index 6bc29a867..da9d76aed 100644 --- a/knip.config.ts +++ b/knip.config.ts @@ -3,7 +3,9 @@ import { getIgnores } from './scripts/utils/ignores.js' const ADDITIONALLY_ENTRY_POINTS = [ 'src/routes/sayno/SelfieUX.svelte', // dynamically imported - 'src/lib/components/NationalGroupItem.svelte' // imported only in Markdown file + 'src/lib/components/NationalGroupItem.svelte', // imported only in Markdown file + 'src/lib/components/PressCoveragePanelLoader.svelte', // imported only in Markdown file + 'tests/visual/msw-setup.ts' // loaded via NPM_CONFIG_NODE_OPTIONS=--import in the visual-diff workflow ] const config: KnipConfig = { diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 000000000..23300fd6a --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,6 @@ +pre-commit: + commands: + format: + glob: '*' + run: pnpm format {staged_files} + stage_fixed: true diff --git a/package.json b/package.json index 66b704ec7..9341eb8a1 100644 --- a/package.json +++ b/package.json @@ -21,12 +21,12 @@ "_check:svelte": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "_check:other": "tsc --noEmit -p tsconfig.check.json", "check:watch": "echo This commands only checks the SvelteKit code, not the build scripts. && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "run-s _lint:*", + "lint": "run-p --aggregate-output _lint:*", "_lint:knip": "knip", - "_lint:eslint": "eslint . --format gha --max-warnings=47", + "_lint:eslint": "eslint . --format gha --max-warnings=27", "_lint:prettier": "tsx scripts/generate-prettier-ignore.ts && prettier --check .", "format": "tsx scripts/generate-prettier-ignore.ts && prettier --write --ignore-unknown", - "prepare": "husky", + "prepare": "lefthook install", "sync": "svelte-kit sync" }, "pnpm": { @@ -35,12 +35,14 @@ } }, "devDependencies": { + "@chromatic-com/playwright": "^0.13.1", "@eslint/js": "^10.0.1", "@eslint/markdown": "^8.0.1", - "@inlang/paraglide-js": "^2.16.0", + "@inlang/paraglide-js": "^2.16.1", "@netlify/edge-functions": "^3.0.6", + "@playwright/test": "^1.59.1", "@sveltejs/adapter-netlify": "^5.2.4", - "@sveltejs/kit": "^2.57.1", + "@sveltejs/kit": "^2.58.0", "@sveltejs/vite-plugin-svelte": "^7.0.0", "@types/escape-html": "^1.0.4", "@types/glidejs__glide": "^3.6.6", @@ -52,19 +54,19 @@ "axios-retry": "^4.5.0", "cross-env": "^7.0.3", "dotenv": "^16.6.1", - "eslint": "^10.2.1", + "eslint": "^10.3.0", "eslint-config-flat-gitignore": "^2.3.0", "eslint-config-prettier": "^10.1.8", "eslint-formatter-gha": "^2.0.1", "eslint-plugin-svelte": "^3.17.1", "globals": "^16.5.0", "globby": "^16.2.0", - "husky": "^9.1.7", - "knip": "^6.6.2", - "lint-staged": "^15.5.2", + "knip": "^6.14.0", + "lefthook": "^2.1.6", "mdsvex": "^0.12.7", "minimatch": "^9.0.9", "minimist": "^1.2.8", + "msw": "^2.13.5", "npm-run-all2": "^8.0.4", "p-queue": "^8.1.1", "prettier": "^3.8.3", @@ -73,14 +75,14 @@ "remove-markdown": "^0.5.5", "schema-dts": "^1.1.5", "simple-git": "^3.36.0", - "svelte": "^5.55.4", - "svelte-check": "^4.4.6", + "svelte": "^5.55.5", + "svelte-check": "^4.4.8", "tsx": "^4.21.0", "typescript": "^5.9.3", - "typescript-eslint": "^8.59.0", - "vite": "^8.0.8", - "vite-plugin-lucide-preprocess": "^1.4.8", - "vitest": "^4.1.4" + "typescript-eslint": "^8.59.3", + "vite": "^8.0.10", + "vite-plugin-lucide-preprocess": "^1.4.10", + "vitest": "^4.1.5" }, "dependencies": { "@anthropic-ai/sdk": "^0.39.0", @@ -92,13 +94,13 @@ "@pagefind/component-ui": "^1.5.2", "@prgm/sveltekit-progress-bar": "^3.0.2", "@remix-run/headers": "^0.12.0", - "@sentry/deno": "^10.49.0", - "@sentry/svelte": "^10.49.0", + "@sentry/deno": "^10.50.0", + "@sentry/svelte": "^10.50.0", "@sentry/vite-plugin": "^5.2.0", "@sveltejs/enhanced-img": "^0.10.4", - "@turf/distance": "^7.3.4", + "@turf/distance": "^7.3.5", "airtable": "^0.12.2", - "axios": "^1.15.0", + "axios": "^1.15.2", "clipboard-polyfill": "^4.1.1", "clsx": "^2.1.1", "escape-html": "^1.0.3", @@ -106,7 +108,7 @@ "html-to-image": "^1.11.13", "http-status-codes": "^2.3.0", "lucide-svelte": "^0.536.0", - "maplibre-gl": "^5.23.0", + "maplibre-gl": "^5.24.0", "maplibregl-mapbox-request-transformer": "^0.0.2", "micromark": "^4.0.2", "motion-sv": "^0.1.12", diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 000000000..97c3e06b2 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,46 @@ +import { defineConfig, devices } from '@playwright/test' + +export default defineConfig({ + testDir: 'tests/visual', + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + reporter: [['list'], ['html', { open: 'never' }]], + use: { + baseURL: 'http://localhost:4173', + // Pin locale and timezone so any date / number formatting that depends + // on the browser context renders the same on every run. + locale: 'en-US', + timezoneId: 'UTC', + // Opts into the site's `@media (prefers-reduced-motion: reduce)` block + // (src/styles/reset.css), which zeros out animation and transition + // durations. Keeps snapshots from capturing mid-animation state without + // needing a custom style-injection in tests. + contextOptions: { reducedMotion: 'reduce' } + }, + projects: [ + { + name: 'desktop', + use: { ...devices['Desktop Chrome'], viewport: { width: 1280, height: 800 } } + }, + { + name: 'mobile', + // deviceScaleFactor override: devices['Pixel 7'] sets DPR=2.625, which + // multiplies the captured-pixel dimensions by ~2.6×. Full-page + // snapshots of long pages (e.g. /dear-sir-demis-2025, /posts, /learn) + // then blow past Chromatic's 25M-pixel cap. DPR=1 keeps the mobile + // viewport (412 CSS px wide) and its layout-relevant behavior, just + // captures at a lower resolution. + use: { + ...devices['Pixel 7'], + viewport: { width: 412, height: 839 }, + deviceScaleFactor: 1 + } + } + ], + webServer: { + command: 'pnpm build && pnpm preview', + port: 4173, + timeout: 360_000, + reuseExistingServer: !process.env.CI + } +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12490c154..dd02ffb0e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,37 +28,37 @@ importers: version: 2.3.0 '@number-flow/svelte': specifier: ^0.3.13 - version: 0.3.13(svelte@5.55.4) + version: 0.3.13(svelte@5.55.7(@typescript-eslint/types@8.59.3)) '@pagefind/component-ui': specifier: ^1.5.2 version: 1.5.2 '@prgm/sveltekit-progress-bar': specifier: ^3.0.2 - version: 3.0.2(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.4)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.4) + version: 3.0.2(@sveltejs/kit@2.58.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3)) '@remix-run/headers': specifier: ^0.12.0 version: 0.12.0 '@sentry/deno': - specifier: ^10.49.0 - version: 10.49.0 + specifier: ^10.50.0 + version: 10.50.0 '@sentry/svelte': - specifier: ^10.49.0 - version: 10.49.0(svelte@5.55.4) + specifier: ^10.50.0 + version: 10.50.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)) '@sentry/vite-plugin': specifier: ^5.2.0 version: 5.2.0(rollup@4.59.0) '@sveltejs/enhanced-img': specifier: ^0.10.4 - version: 0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.59.0)(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))(rollup@4.59.0)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) '@turf/distance': - specifier: ^7.3.4 - version: 7.3.4 + specifier: ^7.3.5 + version: 7.3.5 airtable: specifier: ^0.12.2 version: 0.12.2 axios: - specifier: ^1.15.0 - version: 1.15.0 + specifier: ^1.15.2 + version: 1.15.2 clipboard-polyfill: specifier: ^4.1.1 version: 4.1.1 @@ -79,10 +79,10 @@ importers: version: 2.3.0 lucide-svelte: specifier: ^0.536.0 - version: 0.536.0(svelte@5.55.4) + version: 0.536.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)) maplibre-gl: - specifier: ^5.23.0 - version: 5.23.0 + specifier: ^5.24.0 + version: 5.24.0 maplibregl-mapbox-request-transformer: specifier: ^0.0.2 version: 0.0.2 @@ -91,7 +91,7 @@ importers: version: 4.0.2 motion-sv: specifier: ^0.1.12 - version: 0.1.12(svelte@5.55.4) + version: 0.1.12(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(svelte@5.55.7(@typescript-eslint/types@8.59.3)) pagefind: specifier: ^1.5.2 version: 1.5.2 @@ -112,35 +112,41 @@ importers: version: 8.1.0 svelte-french-toast: specifier: ^1.2.0 - version: 1.2.0(svelte@5.55.4) + version: 1.2.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)) svelte-toc: specifier: ^0.5.9 - version: 0.5.9 + version: 0.5.9(@typescript-eslint/types@8.59.3) ua-parser-js: specifier: ^1.0.41 version: 1.0.41 devDependencies: + '@chromatic-com/playwright': + specifier: ^0.13.1 + version: 0.13.4(@playwright/test@1.60.0)(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.2.1(jiti@2.6.1)) + version: 10.0.1(eslint@10.3.0(jiti@2.7.0)) '@eslint/markdown': specifier: ^8.0.1 version: 8.0.1 '@inlang/paraglide-js': - specifier: ^2.16.0 - version: 2.16.0 + specifier: ^2.16.1 + version: 2.16.1 '@netlify/edge-functions': specifier: ^3.0.6 version: 3.0.6 + '@playwright/test': + specifier: ^1.59.1 + version: 1.60.0 '@sveltejs/adapter-netlify': specifier: ^5.2.4 - version: 5.2.4(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.4)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 5.2.4(@sveltejs/kit@2.58.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0))) '@sveltejs/kit': - specifier: ^2.57.1 - version: 2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.4)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + specifier: ^2.58.0 + version: 2.58.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) '@sveltejs/vite-plugin-svelte': specifier: ^7.0.0 - version: 7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) '@types/escape-html': specifier: ^1.0.4 version: 1.0.4 @@ -161,10 +167,10 @@ importers: version: 0.7.39 axios-mock-adapter: specifier: ^2.1.0 - version: 2.1.0(axios@1.15.0) + version: 2.1.0(axios@1.15.2) axios-retry: specifier: ^4.5.0 - version: 4.5.0(axios@1.15.0) + version: 4.5.0(axios@1.15.2) cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -172,44 +178,44 @@ importers: specifier: ^16.6.1 version: 16.6.1 eslint: - specifier: ^10.2.1 - version: 10.2.1(jiti@2.6.1) + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-config-flat-gitignore: specifier: ^2.3.0 - version: 2.3.0(eslint@10.2.1(jiti@2.6.1)) + version: 2.3.0(eslint@10.3.0(jiti@2.7.0)) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.2.1(jiti@2.6.1)) + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) eslint-formatter-gha: specifier: ^2.0.1 version: 2.0.1 eslint-plugin-svelte: specifier: ^3.17.1 - version: 3.17.1(eslint@10.2.1(jiti@2.6.1))(svelte@5.55.4) + version: 3.17.1(eslint@10.3.0(jiti@2.7.0))(svelte@5.55.7(@typescript-eslint/types@8.59.3)) globals: specifier: ^16.5.0 version: 16.5.0 globby: specifier: ^16.2.0 version: 16.2.0 - husky: - specifier: ^9.1.7 - version: 9.1.7 knip: - specifier: ^6.6.2 - version: 6.6.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - lint-staged: - specifier: ^15.5.2 - version: 15.5.2 + specifier: ^6.14.0 + version: 6.14.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + lefthook: + specifier: ^2.1.6 + version: 2.1.6 mdsvex: specifier: ^0.12.7 - version: 0.12.7(svelte@5.55.4) + version: 0.12.7(svelte@5.55.7(@typescript-eslint/types@8.59.3)) minimatch: specifier: ^9.0.9 version: 9.0.9 minimist: specifier: ^1.2.8 version: 1.2.8 + msw: + specifier: ^2.13.5 + version: 2.14.6(@types/node@24.12.2)(typescript@5.9.3) npm-run-all2: specifier: ^8.0.4 version: 8.0.4 @@ -221,7 +227,7 @@ importers: version: 3.8.3 prettier-plugin-svelte: specifier: ^3.5.1 - version: 3.5.1(prettier@3.8.3)(svelte@5.55.4) + version: 3.5.1(prettier@3.8.3)(svelte@5.55.7(@typescript-eslint/types@8.59.3)) remark-heading-id: specifier: ^1.0.1 version: 1.0.1 @@ -235,11 +241,11 @@ importers: specifier: ^3.36.0 version: 3.36.0 svelte: - specifier: ^5.55.4 - version: 5.55.4 + specifier: ^5.55.5 + version: 5.55.7(@typescript-eslint/types@8.59.3) svelte-check: - specifier: ^4.4.6 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.4)(typescript@5.9.3) + specifier: ^4.4.8 + version: 4.4.8(picomatch@4.0.4)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@5.9.3) tsx: specifier: ^4.21.0 version: 4.21.0 @@ -247,20 +253,23 @@ importers: specifier: ^5.9.3 version: 5.9.3 typescript-eslint: - specifier: ^8.59.0 - version: 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.59.3 + version: 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) vite: - specifier: ^8.0.8 - version: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + specifier: ^8.0.10 + version: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) vite-plugin-lucide-preprocess: - specifier: ^1.4.8 - version: 1.4.8(rollup@4.59.0)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + specifier: ^1.4.10 + version: 1.4.10(rolldown@1.0.0-rc.17)(rollup@4.59.0)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) vitest: - specifier: ^4.1.4 - version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + specifier: ^4.1.5 + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(msw@2.14.6(@types/node@24.12.2)(typescript@5.9.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) packages: + '@adobe/css-tools@4.4.4': + resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} + '@anthropic-ai/sdk@0.39.0': resolution: {integrity: sha512-eMyDIPRZbt1CCLErRCi3exlAvNkBtRe+kW5vvJyef93PmNr/clstYgHhtvmkxN82nlKgzyGPCyGxrm0JQ1ZIdg==} @@ -319,6 +328,10 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} @@ -331,8 +344,20 @@ packages: resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} - '@emnapi/core@1.9.2': - resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + '@chromatic-com/playwright@0.13.4': + resolution: {integrity: sha512-ccuUBH1qXho17/JwNWHblNRUoRgpUogNvXKB7OXbPDJx8BNhnTG6LziWNosqn6WpTwjgnVwBUHCOY1WDLQj7vw==} + hasBin: true + peerDependencies: + '@playwright/test': ^1.0.0 + + '@chromaui/rrweb-snapshot@2.0.0-alpha.19-noAbsolute': + resolution: {integrity: sha512-FTsZCNv4dBR8q4UcazvxRw721r6xtsRKkC6Xo8NiEXDekA/JbVDHuWkPxxM0IvyX9Vo/yhCsYviXFrUqqeOaVQ==} + + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} '@emnapi/runtime@1.9.2': resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} @@ -893,17 +918,52 @@ packages: cpu: [x64] os: [win32] - '@inlang/paraglide-js@2.16.0': - resolution: {integrity: sha512-O7KKvVoTsGqPRt1VfSvd0UyfSjU2qHiABx968M2decgG7Af6TddW3dTJrTS3I78nOUgRAlYwCYfKefSGD4rGMA==} + '@inlang/paraglide-js@2.16.1': + resolution: {integrity: sha512-Ni1UgMt9UKnzmAnCaPvWw1+7hIJAdtoLRzPxbM+wRjT0ovNIys+A/EgiMX2IomLXNRmPj+dw3wSKHe1AGcMQEg==} hasBin: true '@inlang/recommend-sherlock@0.2.1': resolution: {integrity: sha512-ckv8HvHy/iTqaVAEKrr+gnl+p3XFNwe5D2+6w6wJk2ORV2XkcRkKOJ/XsTUJbPSiyi4PI+p+T3bqbmNx/rDUlg==} - '@inlang/sdk@2.9.1': - resolution: {integrity: sha512-y0C3xaKo6pSGDr3p5OdreRVT3THJpgKVe1lLvG3BE4v9lskp3UfI9cPCbN8X2dpfLt/4ljtehMb5SykpMfJrMg==} + '@inlang/sdk@2.9.2': + resolution: {integrity: sha512-H/iVZEcOtbowKaiq6yirnUR9eyffAOsXpgwWr4eAe45H7l1f1A1Wowb7hVkWQcAE62sL1g76qN4XkyOx2BkV2w==} engines: {node: '>=20.0.0'} + '@inquirer/ansi@2.0.5': + resolution: {integrity: sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + + '@inquirer/confirm@6.0.13': + resolution: {integrity: sha512-wkGPC7yJ5WJk1DJ5SX7fzk+gfj4BM8cf5dDDi71B/551xHrdsZVRJOC0WyikXd0pEsb/9cLniuE4atbsMqmFkw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@11.1.10': + resolution: {integrity: sha512-a4Q5BXHQAHa9eO202sTaFCHFYVB3x5fauDuThEAdZ9gfn76pSxiKU7wWcEH0N1O0XmQvNfQNU6QXpiRxmYQx+A==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@2.0.5': + resolution: {integrity: sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + + '@inquirer/type@4.0.5': + resolution: {integrity: sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -926,13 +986,21 @@ packages: '@kwsites/promise-deferred@1.1.1': resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} - '@lix-js/sdk@0.4.9': - resolution: {integrity: sha512-30mDkXpx704359oRrJI42bjfCspCiaMItngVBbPkiTGypS7xX4jYbHWQkXI8XuJ7VDB69D0MsVU6xfrBAIrM4A==} + '@lix-js/sdk@0.4.10': + resolution: {integrity: sha512-0dMInAJK/67guTG5rRZaCEhvzC5cCXENOjaePA5AqMXrCE97kaY7SRor9e2vnoGsFIiGqXKlT0MCIoZj36G0gg==} engines: {node: '>=18'} '@lix-js/server-protocol-schema@0.1.1': resolution: {integrity: sha512-jBeALB6prAbtr5q4vTuxnRZZv1M2rKe8iNqRQhFJ4Tv7150unEa0vKyz0hs8Gl3fUGsWaNJBh3J8++fpbrpRBQ==} + '@lukeed/csprng@1.1.0': + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + + '@lukeed/uuid@2.0.1': + resolution: {integrity: sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==} + engines: {node: '>=8'} + '@mapbox/jsonlint-lines-primitives@2.0.2': resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} engines: {node: '>= 0.6'} @@ -940,8 +1008,8 @@ packages: '@mapbox/point-geometry@1.1.0': resolution: {integrity: sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==} - '@mapbox/tiny-sdf@2.0.7': - resolution: {integrity: sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==} + '@mapbox/tiny-sdf@2.1.0': + resolution: {integrity: sha512-uFJhNh36BR4OCuWIEiWaEix9CA2WzT6CAIcqVjWYpnx8+QDtS+oC4QehRrx5cX4mgWs37MmKnwUejeHxVymzNg==} '@mapbox/unitbezier@0.0.1': resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==} @@ -969,6 +1037,10 @@ packages: '@maplibre/vt-pbf@4.3.0': resolution: {integrity: sha512-jIvp8F5hQCcreqOOpEt42TJMUlsrEcpf/kI1T2v85YrQRV6PPXUcEXUg5karKtH6oh47XJZ4kHu56pUkOuqA7w==} + '@mswjs/interceptors@0.41.9': + resolution: {integrity: sha512-VVPPgHyQ6ShqnrmDWuxjmUIsO9gWyOZFmuOfLd9LfBGQJwZfy0gvv9pbHSJuoFNIYC7ZDX9aoFwowjcdSC4E8w==} + engines: {node: '>=18'} + '@napi-rs/wasm-runtime@1.1.4': resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} peerDependencies: @@ -1004,143 +1076,155 @@ packages: peerDependencies: svelte: ^4 || ^5 + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/deferred-promise@3.0.0': + resolution: {integrity: sha512-XW375UK8/9SqUVNVa6M0yEy8+iTi4QN5VZ7aZuRFQmy76LRwI9wy5F4YIBU6T+eTe2/DNDo8tqu8RHlwLHM6RA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@opentelemetry/api@1.9.1': resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} engines: {node: '>=8.0.0'} - '@oxc-parser/binding-android-arm-eabi@0.127.0': - resolution: {integrity: sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==} + '@oxc-parser/binding-android-arm-eabi@0.130.0': + resolution: {integrity: sha512-h/xYU8/7ADWzVSf5I+YalLpj33LOy9CI/zgbJNIZ5eunRBG+Czqa3lZsvuPHHf3rOt6z1c5+UzoxjbAzAvhwVw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxc-parser/binding-android-arm64@0.127.0': - resolution: {integrity: sha512-b5jtVTH6AU5CJXHNdj7Jj9IEiR9yVjjnwHzPJhGyHGPdcsZSzBCkS9GBbV33niRMvKthDwQRFRJfI4a+k4PvYg==} + '@oxc-parser/binding-android-arm64@0.130.0': + resolution: {integrity: sha512-oFWFJrsGv9siFM4HjMqKNB7IuIZD/SMmZdCXl8xyx7lDplGvPKyewpOo272rSWgMXe2Wx7bWI0Yj+gkHv4qbeg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxc-parser/binding-darwin-arm64@0.127.0': - resolution: {integrity: sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==} + '@oxc-parser/binding-darwin-arm64@0.130.0': + resolution: {integrity: sha512-sGUzupdTplK9jQg7eJZ878HfEgQjJNBc6dAYVWJ9W5aU+J8rLfRJhTVsKThiu1pNwm6Y1qKCcbC6WhNWSXR3Ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxc-parser/binding-darwin-x64@0.127.0': - resolution: {integrity: sha512-JL6Xb5IwPQT8rUzlpsX7E+AgfcdNklXNPFp8pjCQQ5MQOQo5rtEB2ui+3Hgg9Sn7Y9Egj6YOLLiHhLpdAe12Aw==} + '@oxc-parser/binding-darwin-x64@0.130.0': + resolution: {integrity: sha512-PsB4cdCISbC00Uy8eiD8bc2AkGWjZqrSrJnkBFuG2ptrrf6mZ2F5gLFSjOAVMMgZPg8B1D7OydJwLWSfyI2Plg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxc-parser/binding-freebsd-x64@0.127.0': - resolution: {integrity: sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==} + '@oxc-parser/binding-freebsd-x64@0.130.0': + resolution: {integrity: sha512-DgABp3l38hS77JbXCV4qk1+n6DPym5u8zzwuweokezm2tX194nDSJDENbDRECxVsiNbprKATLbk+Z5wlHT0OHw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': - resolution: {integrity: sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==} + '@oxc-parser/binding-linux-arm-gnueabihf@0.130.0': + resolution: {integrity: sha512-4Kn3CTEmwFrzhTSC/JuUW16qovmaMdX7jeSKbL8w0pLtLww7To1a2XJi9Z5uD8QWUkfUHhqfV+VD6dVzBnWzoA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': - resolution: {integrity: sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g==} + '@oxc-parser/binding-linux-arm-musleabihf@0.130.0': + resolution: {integrity: sha512-D35KZM3F4rRu1uAFKyBlg3Gaf/ybCjyaPR1hfgvk5ex8NtcTmRgc0JgSighEyNg96TPrFhemFba68SZuxaha8w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxc-parser/binding-linux-arm64-gnu@0.127.0': - resolution: {integrity: sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==} + '@oxc-parser/binding-linux-arm64-gnu@0.130.0': + resolution: {integrity: sha512-Q9o7oVlo955KHwS8l1u0bCzIx+JsZUA3XToLXC+MsMhye/9LeBQbt84nh120cl2XLy+TEzvugYDiHShg5yaX6Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-arm64-musl@0.127.0': - resolution: {integrity: sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==} + '@oxc-parser/binding-linux-arm64-musl@0.130.0': + resolution: {integrity: sha512-EiJ/gC0ljbcwVpycC8YWw6ggMbtsPX8XMOt0mPx0aqWeMsNR+L9m05Flbvd5T+GlivG+GkSWQL7tM9SRFpM/dw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': - resolution: {integrity: sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==} + '@oxc-parser/binding-linux-ppc64-gnu@0.130.0': + resolution: {integrity: sha512-b+h/lsLLurp756dMGizNs5uPaJfyEdWrTcV5t8M609jWm1DEHB1StpRXCkyvwtkJx3m+qL5BNQ0dEKan/4yGFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': - resolution: {integrity: sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==} + '@oxc-parser/binding-linux-riscv64-gnu@0.130.0': + resolution: {integrity: sha512-O19Cil83XAyjEFfo8WhkMwY58ALqZ7ckjGL+25mjMIuF84urWBeANH0FC8B8BsSSygWU3/1aY3ADdDbp+wlBnw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-riscv64-musl@0.127.0': - resolution: {integrity: sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==} + '@oxc-parser/binding-linux-riscv64-musl@0.130.0': + resolution: {integrity: sha512-BgXRVC0+83n3YzCscLQjj6nbyeBIVeZYPTI4fFMAE4WNm2+4RXhWp03IVizL7esIz36kgmT48aebk1iM+cs8sw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxc-parser/binding-linux-s390x-gnu@0.127.0': - resolution: {integrity: sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==} + '@oxc-parser/binding-linux-s390x-gnu@0.130.0': + resolution: {integrity: sha512-6tJz0xvnGhsokE7N1WlUSBXibpYmT9xSJFS1Ce41Km/+8gQvdlW8MLhRv8PD0L7ix8vRG0FDDepp3jdOFzdVdw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-gnu@0.127.0': - resolution: {integrity: sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==} + '@oxc-parser/binding-linux-x64-gnu@0.130.0': + resolution: {integrity: sha512-9aCWj83dp3heTQGmGnZGdIWgxjZrr/7VQ0TGFHH5PKByxJKF2Hcr4qvaSUHhhGEa3MSsDjTL1YDP8RAgdL5/Cg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxc-parser/binding-linux-x64-musl@0.127.0': - resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==} + '@oxc-parser/binding-linux-x64-musl@0.130.0': + resolution: {integrity: sha512-afXt87aZBqrUVli8TB/I8H1G50RDWcwirjWtXGXYqJ2ZqWEiErH7V72j3LUSDZaivmtu2OLX0KQ/mbhP81mr7A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxc-parser/binding-openharmony-arm64@0.127.0': - resolution: {integrity: sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==} + '@oxc-parser/binding-openharmony-arm64@0.130.0': + resolution: {integrity: sha512-I0NCrZV/YZuCGWgqwNN/GO/iXlLF2z+Wgc7u+Aa9N4P51oYeIa0XT+zVBUne4csO9GqxskXgI4g8JzzWGRpfOw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxc-parser/binding-wasm32-wasi@0.127.0': - resolution: {integrity: sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==} + '@oxc-parser/binding-wasm32-wasi@0.130.0': + resolution: {integrity: sha512-sJgQkGaBX0WJvPUDfwciex6IcTk5O5NLQ1bhEb6f3nBruh1GshKMRSMt2bxZlYrgBzjyBbJzsnO+InPG0bg+fA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@oxc-parser/binding-win32-arm64-msvc@0.127.0': - resolution: {integrity: sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==} + '@oxc-parser/binding-win32-arm64-msvc@0.130.0': + resolution: {integrity: sha512-bjcma99sQrNh6RY4mPO9yTkfxql6TDFoN3HWdK31RCKXwNhcDgJXW/l8PUtzKNiQ+9vpKJfJtQq+LklBuxSOBA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxc-parser/binding-win32-ia32-msvc@0.127.0': - resolution: {integrity: sha512-0cwxKO7KHQQQfo4Uf4B2SQrhgm+cJaP9OvFFhx52Tkg4bezsacu83GB2/In5bC415Ueeym+kXdnge/57rbSfTw==} + '@oxc-parser/binding-win32-ia32-msvc@0.130.0': + resolution: {integrity: sha512-hRYbv6HhpSTzT4xTiIkadLI7upLQxuOdLPR/9nL1fTjwhgutBTPXrwaAPb/jTFVx6/8C7Jb5HcUKhmNwloTbFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxc-parser/binding-win32-x64-msvc@0.127.0': - resolution: {integrity: sha512-rOrnSQSCbhI2kowr9XxE7m9a8oQXnBHjnS6j95LxxAnEZ0+Fz20WlRXG4ondQb+ejjt2KOsa65sE6++L6kUd+w==} + '@oxc-parser/binding-win32-x64-msvc@0.130.0': + resolution: {integrity: sha512-RBpA9TsRucJq6HNVNCFF1iKg+QeTkLdZf7hi4xaOGCPvMZWvDHjQgSOEZMUpuW4JNciHbxNhLEYmz5CVygjVGQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxc-project/types@0.124.0': - resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==} - '@oxc-project/types@0.127.0': resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==} + '@oxc-project/types@0.130.0': + resolution: {integrity: sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==} + '@oxc-resolver/binding-android-arm-eabi@11.19.1': resolution: {integrity: sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg==} cpu: [arm] @@ -1287,6 +1371,11 @@ packages: cpu: [x64] os: [win32] + '@playwright/test@1.60.0': + resolution: {integrity: sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==} + engines: {node: '>=18'} + hasBin: true + '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -1300,103 +1389,103 @@ packages: '@remix-run/headers@0.12.0': resolution: {integrity: sha512-eqVSL5UOIyqVx0NTqgtNKMKVokE9jPchkZHl/N13KKPQYw/leS8VCoX5zRhkB1UvcLyfj113LX0OvEcuNbc5Hg==} - '@rolldown/binding-android-arm64@1.0.0-rc.15': - resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==} + '@rolldown/binding-android-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.15': - resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.15': - resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==} + '@rolldown/binding-darwin-x64@1.0.0-rc.17': + resolution: {integrity: sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.15': - resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': + resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': - resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': + resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': - resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': + resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': - resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': + resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': - resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': + resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': - resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': + resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': - resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==} - engines: {node: '>=14.0.0'} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': + resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': - resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': + resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': - resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': + resolution: {integrity: sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.15': - resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==} + '@rolldown/pluginutils@1.0.0-rc.17': + resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==} '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} @@ -1545,28 +1634,38 @@ packages: cpu: [x64] os: [win32] - '@sentry-internal/browser-utils@10.49.0': - resolution: {integrity: sha512-n0QRx0Ysx6mPfIydTkz7VP0FmwM+/EqMZiRqdsU3aTYsngE9GmEDV0OL1bAy6a8N/C1xf9vntkuAtj6N/8Z51w==} + '@segment/analytics-core@1.7.0': + resolution: {integrity: sha512-0DHSriS/oAB/2bIgOMv3fFV9/ivp39ibdOTTf+dDOhf+vlciBv0+MHw47k/6PRobbuls27cKkKZAKc4DDC2+gw==} + + '@segment/analytics-generic-utils@1.2.0': + resolution: {integrity: sha512-DfnW6mW3YQOLlDQQdR89k4EqfHb0g/3XvBXkovH1FstUN93eL1kfW9CsDcVQyH3bAC5ZsFyjA/o/1Q2j0QeoWw==} + + '@segment/analytics-node@2.1.3': + resolution: {integrity: sha512-xwMkyXgr7xgPsP0w79nzCwRHYi9jzj9ps4Im7xWGK8AKKE4eox39tMZOdRtpDbvXQlrs9fh64ZC0w/yZZDM/9g==} + engines: {node: '>=18'} + + '@sentry-internal/browser-utils@10.50.0': + resolution: {integrity: sha512-42bxyRTxnCmYlWnvz4CxikuQNanw8UNma2WJrtxJ0f1MAJV2GhQGSHDLnA+lvFlmiz6qct3pfen/NXGyOTegTA==} engines: {node: '>=18'} - '@sentry-internal/feedback@10.49.0': - resolution: {integrity: sha512-JNsUBGv0faCFE7MeZUH99Y9lU9qq3LBALbLxpE1x7ngNrQnVYRlcFgdqaD/btNBKr8awjYL8gmcSkHBWskGqLQ==} + '@sentry-internal/feedback@10.50.0': + resolution: {integrity: sha512-0k9XZF0wn86f77mIO2U3gNNyDZooy139CnEanRzHinrN106vVzvBZ6TUEQoHtoO1fqQxr+nWWVrqV/PXUqk47w==} engines: {node: '>=18'} - '@sentry-internal/replay-canvas@10.49.0': - resolution: {integrity: sha512-7D/NrgH1Qwx5trDYaaTSSJmCb1yVQQLqFG4G/S9x2ltzl9876lSGJL8UeW8ReNQgF3CDAcwbmm/9aXaVSBUNZA==} + '@sentry-internal/replay-canvas@10.50.0': + resolution: {integrity: sha512-jx6RKBmcJSWdI92qDGS/sBv1w+7Cww879Z/moX7bw7ipHa/Ts3iDcB3rgZwvhmi17U+mvYsbJeL2DXkPo3TjPw==} engines: {node: '>=18'} - '@sentry-internal/replay@10.49.0': - resolution: {integrity: sha512-IEy4lwHVMiRE3JAcn+kFKjsTgalDOCSTf20SoFd+nkt6rN/k1RDyr4xpdfF//Kj3UdeTmbuibYjK5H/FLhhnGg==} + '@sentry-internal/replay@10.50.0': + resolution: {integrity: sha512-51FYNfnvVLAWw1rrEWPFfwHuMRb9mkVCFGA4J9/un7SpeGBsQDziGB0Di4fsCxI7+EdSBpfLHPF0csKtCCw0oQ==} engines: {node: '>=18'} '@sentry/babel-plugin-component-annotate@5.2.0': resolution: {integrity: sha512-8LbOI5Kzb5F0+7LVQPi2+zGz1iPiRRFhM+7uZ/ZQ33L9BmDOYNIy3xWxCfMw2JCuMXXaxF47XCjGmR22/B0WPg==} engines: {node: '>= 18'} - '@sentry/browser@10.49.0': - resolution: {integrity: sha512-bGCHc+wK2Dx67YoSbmtlt04alqWfQ+dasD/GVipVOq50gvw/BBIDHTEWRJEjACl+LrvszeY54V+24p8z4IgysA==} + '@sentry/browser@10.50.0': + resolution: {integrity: sha512-1f6rAvET6myiTaSeYqvaaBwvq1LfxqWjAPIoAW/NVC9bPMkeEcuvgDajHrnZMrBeWoJ81NMyoLkyX+iOc7MoFA==} engines: {node: '>=18'} '@sentry/bundler-plugin-core@5.2.0': @@ -1625,12 +1724,12 @@ packages: engines: {node: '>= 10'} hasBin: true - '@sentry/core@10.49.0': - resolution: {integrity: sha512-UaFeum3LUM1mB0d67jvKnqId1yWQjyqmaDV6kWngG03x+jqXb08tJdGpSoxjXZe13jFBbiBL/wKDDYIK7rCK4g==} + '@sentry/core@10.50.0': + resolution: {integrity: sha512-J4A+vzUO3adl0TkFCjaN1+4miamrjHiEIYuLHiuu1lmAjq5WIVw32ObvAh4yMwNtxyaEMosTrrh5M6f12XSJFg==} engines: {node: '>=18'} - '@sentry/deno@10.49.0': - resolution: {integrity: sha512-u9O8DMGum859lrZXu4wfPKfRfUnRtdAAA1gDuoF7lFnxy4l82aTe5RtlzUpovHLxKV7aPv6B/TMubsEJrNxikQ==} + '@sentry/deno@10.50.0': + resolution: {integrity: sha512-KUUr3wdT49ir+PcUmu/tClZlWdGh6br+UPrP7PWQ5NIXoIR+NZO0WreAQ4T7HFpJHkwZaQCBqKotd5EZmbUkHw==} '@sentry/rollup-plugin@5.2.0': resolution: {integrity: sha512-a8LfpvcYMFtFSroro5MpCcOoS528LeLfUHzxWURnpofOnY+Aso9Si4y4dFlna+RKqxCXjmFbn6CLnfI+YrHysQ==} @@ -1641,8 +1740,8 @@ packages: rollup: optional: true - '@sentry/svelte@10.49.0': - resolution: {integrity: sha512-onQ+dpvjn1impT72Lsp0I0i2C5796pxOY+MyH3BYd139os+8uskatzYZddBTe+r36t8+M0gWk5PQqftcvAaFwQ==} + '@sentry/svelte@10.50.0': + resolution: {integrity: sha512-pkd9HNpZN+8x9i8n24fpV+Q3/sKDkBKyJ29iNzbhGnZ3CeRPwKxwQOoiBBPQkllYWzr/a7cYFtBKNLdpmTFCOg==} engines: {node: '>=18'} peerDependencies: svelte: 3.x || 4.x || 5.x @@ -1671,6 +1770,15 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + '@storybook/icons@2.0.2': + resolution: {integrity: sha512-KZBCpXsshAIjczYNXR/rlxEtCUX/eAbpFNwKi8bcOomrLA4t/SyPz5RF+lVPO2oZBUE4sAkt43mfJUevQDSEEw==} + 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 + '@sveltejs/acorn-typescript@1.0.9': resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} peerDependencies: @@ -1688,8 +1796,8 @@ packages: svelte: ^5.0.0 vite: ^6.3.0 || >=7.0.0 - '@sveltejs/kit@2.57.1': - resolution: {integrity: sha512-VRdSbB96cI1EnRh09CqmnQqP/YJvET5buj8S6k7CxaJqBJD4bw4fRKDjcarAj/eX9k2eHifQfDH8NtOh+ZxxPw==} + '@sveltejs/kit@2.58.0': + resolution: {integrity: sha512-kT9GCN8yJTkCK1W+Gi/bvGooWAM7y7WXP+yd+rf6QOIjyoK1ERPrMwSufXJUNu2pMWIqruhFvmz+LbOqsEmKmA==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -1711,18 +1819,35 @@ packages: svelte: ^5.46.4 vite: ^8.0.0-beta.7 || ^8.0.0 - '@turf/distance@7.3.4': - resolution: {integrity: sha512-9drWgd46uHPPyzgrcRQLgSvdS/SjVlQ6ZIBoRQagS5P2kSjUbcOXHIMeOSPwfxwlKhEtobLyr+IiR2ns1TfF8w==} + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} - '@turf/helpers@7.3.4': - resolution: {integrity: sha512-U/S5qyqgx3WTvg4twaH0WxF3EixoTCfDsmk98g1E3/5e2YKp7JKYZdz0vivsS5/UZLJeZDEElOSFH4pUgp+l7g==} + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@turf/distance@7.3.5': + resolution: {integrity: sha512-uQAC63zg/l91KUxzfhqio7Ii3+UXTrPOVJScIdRj6EO6+9XHI4kC+AdyIS4cPAv14sZfJLIBxzMnzcGrss+kEA==} - '@turf/invariant@7.3.4': - resolution: {integrity: sha512-88Eo4va4rce9sNZs6XiMJowWkikM3cS2TBhaCKlU+GFHdNf8PFEpiU42VDU8q5tOF6/fu21Rvlke5odgOGW4AQ==} + '@turf/helpers@7.3.5': + resolution: {integrity: sha512-E/NMGV5MwbjjP7AJXBtsanC3yY8N2MQ87IGdIgkB2ji5AtBpwnH4L3gEqpYN4RlCJJWbLbzO91BbKv2waUd0eg==} + + '@turf/invariant@7.3.5': + resolution: {integrity: sha512-ZVIvsBvjr8lO7WxC5zYNjRsjSDvyGvWkJMjuWaJjTU8x+1tmfNnw3gDX/TI2Sit83gcRYLYkNo23lB/udqx/Hg==} '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -1744,6 +1869,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} @@ -1789,6 +1917,12 @@ packages: '@types/remark-heading-id@1.0.0': resolution: {integrity: sha512-V6OgBN2Uv3kaYHOrBI2+j9xIo6N56bMpIFoKVkGltoJtzHr7Vo8pFxDZxNqUXC5NScV991Iq3BYD52BkCFMY+w==} + '@types/set-cookie-parser@2.4.10': + resolution: {integrity: sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw==} + + '@types/statuses@2.0.6': + resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} + '@types/supercluster@7.1.3': resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==} @@ -1807,77 +1941,77 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.59.0': - resolution: {integrity: sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==} + '@typescript-eslint/eslint-plugin@8.59.3': + resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.59.0 + '@typescript-eslint/parser': ^8.59.3 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.59.0': - resolution: {integrity: sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==} + '@typescript-eslint/parser@8.59.3': + resolution: {integrity: sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.59.0': - resolution: {integrity: sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==} + '@typescript-eslint/project-service@8.59.3': + resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.59.0': - resolution: {integrity: sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==} + '@typescript-eslint/scope-manager@8.59.3': + resolution: {integrity: sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.59.0': - resolution: {integrity: sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==} + '@typescript-eslint/tsconfig-utils@8.59.3': + resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.59.0': - resolution: {integrity: sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==} + '@typescript-eslint/type-utils@8.59.3': + resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.58.2': - resolution: {integrity: sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.59.0': - resolution: {integrity: sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==} + '@typescript-eslint/types@8.59.3': + resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.59.0': - resolution: {integrity: sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==} + '@typescript-eslint/typescript-estree@8.59.3': + resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.59.0': - resolution: {integrity: sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==} + '@typescript-eslint/utils@8.59.3': + resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.59.0': - resolution: {integrity: sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==} + '@typescript-eslint/visitor-keys@8.59.3': + resolution: {integrity: sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher + + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/expect@4.1.4': - resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==} + '@vitest/expect@4.1.5': + resolution: {integrity: sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==} - '@vitest/mocker@4.1.4': - resolution: {integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==} + '@vitest/mocker@4.1.5': + resolution: {integrity: sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1887,20 +2021,29 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.4': - resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/pretty-format@4.1.5': + resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==} + + '@vitest/runner@4.1.5': + resolution: {integrity: sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==} - '@vitest/runner@4.1.4': - resolution: {integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==} + '@vitest/snapshot@4.1.5': + resolution: {integrity: sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==} - '@vitest/snapshot@4.1.4': - resolution: {integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/spy@4.1.4': - resolution: {integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==} + '@vitest/spy@4.1.5': + resolution: {integrity: sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==} - '@vitest/utils@4.1.4': - resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + + '@vitest/utils@4.1.5': + resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==} abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} @@ -1938,26 +2081,25 @@ packages: ajv@6.14.0: resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - ansi-escapes@7.3.0: - resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} - engines: {node: '>=18'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + ansi-styles@6.2.3: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.1: resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} engines: {node: '>= 0.4'} @@ -1969,6 +2111,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -1982,8 +2128,8 @@ packages: peerDependencies: axios: 0.x || 1.x - axios@1.15.0: - resolution: {integrity: sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==} + axios@1.15.2: + resolution: {integrity: sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==} axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} @@ -1999,6 +2145,9 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.10.14: resolution: {integrity: sha512-fOVLPAsFTsQfuCkvahZkzq6nf8KvGWanlYoTh0SVA0A/PIUxQGU2AOZAoD95n2gFLVDW/jP6sbGLny95nmEuHA==} engines: {node: '>=6.0.0'} @@ -2023,6 +2172,13 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -2033,6 +2189,10 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -2041,28 +2201,28 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} - - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} clipboard-polyfill@4.1.1: resolution: {integrity: sha512-nbvNLrcX0zviek5QHLFRAaLrx8y/s8+RF2stH43tuS+kP5XlHMrcD0UGBWq43Hwp6WuuK7KefRMP56S45ibZkA==} + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -2074,9 +2234,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -2085,10 +2242,6 @@ packages: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -2108,6 +2261,10 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} @@ -2117,6 +2274,9 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -2145,6 +2305,10 @@ packages: babel-plugin-macros: optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -2152,6 +2316,18 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2167,9 +2343,18 @@ packages: devalue@5.7.1: resolution: {integrity: sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA==} + devalue@5.8.1: + resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} + devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -2177,6 +2362,10 @@ packages: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2187,12 +2376,8 @@ packages: electron-to-chromium@1.5.331: resolution: {integrity: sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==} - emoji-regex@10.6.0: - resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} @@ -2290,8 +2475,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.2.1: - resolution: {integrity: sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==} + eslint@10.3.0: + resolution: {integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -2320,8 +2505,13 @@ packages: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} - esrap@2.2.4: - resolution: {integrity: sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==} + esrap@2.2.8: + resolution: {integrity: sha512-MPweq2EvEGj8jwOI7Hgycw/QIHzqA1EbAM8lG7p+FBfZbZq/hQ6h3AMsqnu/djzisH1KVWNzbb7LSgIVtMlPSg==} + peerDependencies: + '@typescript-eslint/types': ^8.2.0 + peerDependenciesMeta: + '@typescript-eslint/types': + optional: true esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -2348,10 +2538,6 @@ packages: eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} @@ -2372,6 +2558,15 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + + fast-wrap-ansi@0.2.0: + resolution: {integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==} + fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} @@ -2452,6 +2647,11 @@ packages: react-dom: optional: true + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2464,9 +2664,9 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - get-east-asian-width@1.5.0: - resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} - engines: {node: '>=18'} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} @@ -2476,10 +2676,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - get-tsconfig@4.13.7: resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} @@ -2516,6 +2712,10 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + graphql@16.14.0: + resolution: {integrity: sha512-BBvQ/406p+4CZbTpCbVPSxfzrZrbnuWSP1ELYgyS6B+hNeKzgrdB4JczCa5VZUBQrDa9hUngm0KnexY6pJRN5Q==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -2544,6 +2744,9 @@ packages: hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + headers-polyfill@5.0.1: + resolution: {integrity: sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA==} + hey-listen@1.0.8: resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} @@ -2561,17 +2764,11 @@ packages: resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} hasBin: true - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} - hasBin: true + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} @@ -2589,6 +2786,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} @@ -2602,22 +2803,31 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - - is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} - engines: {node: '>=18'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -2637,9 +2847,9 @@ packages: resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} engines: {node: '>=10'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2648,10 +2858,13 @@ packages: resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} engines: {node: '>=18'} - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true + jose@5.10.0: + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} + js-sha256@0.11.1: resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==} @@ -2698,8 +2911,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - knip@6.6.2: - resolution: {integrity: sha512-ma2p+SvgIs1GZZLUV9QJrLkb9gGNBQHk7fcrtt3aVhiW2XEXH/yfMOU88F7ZdriYuBYkB53djPNYMWb2pKVl/g==} + knip@6.14.0: + resolution: {integrity: sha512-yEI9ysdGQ3h77gLObvovH0KUYs6ITtJ1f6owmXRalOO32TbolYvHY7Z+2AEOXqw0ZWeh9219/agh2K/GmtfsxQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -2710,6 +2923,60 @@ packages: resolution: {integrity: sha512-r2clcf7HLWvDXaVUEvQymXJY4i3bSOIV3xsL/Upy3ZfSv5HeKsk9tsqbBptLvth5qHEIhxeHTA2jNLyQABkLBA==} engines: {node: '>=20.0.0'} + lefthook-darwin-arm64@2.1.6: + resolution: {integrity: sha512-hyB7eeiX78BS66f70byTJacDLC/xV1vgMv9n+idFUsrM7J3Udd/ag9Ag5NP3t0eN0EqQqAtrNnt35EH01lxnRQ==} + cpu: [arm64] + os: [darwin] + + lefthook-darwin-x64@2.1.6: + resolution: {integrity: sha512-5Ka6cFxiH83krt+OMRQtmS6zqoZR5SLXSudLjTbZA1c3ZqF0+dqkeb4XcB6plx6WR0GFizabuc6Bi3iXPIe1eQ==} + cpu: [x64] + os: [darwin] + + lefthook-freebsd-arm64@2.1.6: + resolution: {integrity: sha512-VswyOg5CVN3rMaOJ2HtnkltiMKgFHW/wouWxXsV8RxSa4tgWOKxM0EmSXi8qc2jX+LRga6B0uOY6toXS01zWxA==} + cpu: [arm64] + os: [freebsd] + + lefthook-freebsd-x64@2.1.6: + resolution: {integrity: sha512-vXsCUFYuVwrVWwcypB7Zt2Hf+5pl1V1la7ZfvGYZaTRURu0zF/XUnMF/nOz/PebGv0f4x/iOWXWwP7E42xRWsg==} + cpu: [x64] + os: [freebsd] + + lefthook-linux-arm64@2.1.6: + resolution: {integrity: sha512-WDJiQhJdZOvKORZd+kF/ms2l6NSsXzdA9ahflyr65V90AC4jES223W8VtEMbGPUtHuGWMEZ/v/XvwlWv0Ioz9g==} + cpu: [arm64] + os: [linux] + + lefthook-linux-x64@2.1.6: + resolution: {integrity: sha512-C18nCd7nTX1AVL4TcvwMmLAO1VI1OuGluIOTjiPkBQ746Ls1HhL5rl//jMPACmT28YmxIQJ2ZcLPNmhvEVBZvw==} + cpu: [x64] + os: [linux] + + lefthook-openbsd-arm64@2.1.6: + resolution: {integrity: sha512-mZOMxM8HiPxVFXDO3PtCUbH4GB8rkveXhsgXF27oAZTYVzQ3gO9vT6r/pxit6msqRXz3fvcwimLVJgb8eRsa8A==} + cpu: [arm64] + os: [openbsd] + + lefthook-openbsd-x64@2.1.6: + resolution: {integrity: sha512-sG9ALLZSnnMOfXu+B7SmxFhJhuoAh4bqi5En5aaHJET48TqrLOcWWZuH+7ArFM6gr/U5KfSUvdmHFmY8WqCcIg==} + cpu: [x64] + os: [openbsd] + + lefthook-windows-arm64@2.1.6: + resolution: {integrity: sha512-lD8yFWY4Csuljd0Rqs7EQaySC0VvDf7V3rN1FhRMUISTRDHutebIom1Loc8ckQPvKYGC6mftT9k0GvipsS+Brw==} + cpu: [arm64] + os: [win32] + + lefthook-windows-x64@2.1.6: + resolution: {integrity: sha512-q4z2n3xucLscoWiyMwFViEj3N8MDSkPulMwcJYuCYFHoPhP1h+icqNu7QRLGYj6AnVrCQweiUJY3Tb2X+GbD/A==} + cpu: [x64] + os: [win32] + + lefthook@2.1.6: + resolution: {integrity: sha512-w9sBoR0mdN+kJc3SB85VzpiAAl451/rxdCRcZlwW71QLjkeH3EBQFgc4VMj5apePychYDHAlqEWTB8J8JK/j1Q==} + hasBin: true + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -2792,19 +3059,6 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - - lint-staged@15.5.2: - resolution: {integrity: sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==} - engines: {node: '>=18.12.0'} - hasBin: true - - listr2@8.3.3: - resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} - engines: {node: '>=18.0.0'} - locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} @@ -2815,13 +3069,12 @@ packages: lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} - log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} - longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -2834,9 +3087,14 @@ packages: lucide-svelte@0.536.0: resolution: {integrity: sha512-UIm/R2IYZMs4HW134ik7rDqEDXdvXb109Fznb8mG7OFQShnXkRpAaoyytJ8FzXR5W6GbfQ+r5jHBnIUs6uQp9w==} + deprecated: Package deprecated. Please use @lucide/svelte instead. peerDependencies: svelte: ^3 || ^4 || ^5.0.0-next.42 + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -2844,8 +3102,8 @@ packages: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} - maplibre-gl@5.23.0: - resolution: {integrity: sha512-aou8YBNFS8uVtDWFWt0W/6oorfl18wt+oIA8fnXk1kivjkbtXi9gGrQvflTpwrR3hG13aWdIdbYWeN0NFMV7ag==} + maplibre-gl@5.24.0: + resolution: {integrity: sha512-ALyFxgtd5R+65UqZ/++lOqwWcC0SNho9c27fYSyLmG7AfnAul2o46F05aDJGPbFU57wos9dgcIySHs0Xe6ia3A==} engines: {node: '>=16.14.0', npm: '>=8.1.0'} maplibregl-mapbox-request-transformer@0.0.2: @@ -2909,9 +3167,6 @@ packages: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -3018,13 +3273,9 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} @@ -3063,9 +3314,23 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + msw@2.14.6: + resolution: {integrity: sha512-ALe+N10S72cyx94cMcy3Zs4HhXCj35sgeAL4c+WTvKi0zWnbd8/h0lcFqv0mb2P+aSgAdD7p9HzvA0DiUPxsyg==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true + murmurhash-js@1.0.0: resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3103,30 +3368,25 @@ packages: engines: {node: ^20.5.0 || >=22.0.0, npm: '>= 10'} hasBin: true - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - number-flow@0.5.12: resolution: {integrity: sha512-CIs21h2JkfYG4rfgERaUNAk0Cz+Ef14fNJfSCbGGhgRgconQc9b7rcCQfi9SZ36kNjVXmsl2BrzDbjGtEgumAA==} obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - - onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxc-parser@0.127.0: - resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==} + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + + oxc-parser@0.130.0: + resolution: {integrity: sha512-X0PJ+NmOok8qP3vK9uaW431ngkdM9UPEK7KG466urtIL2+EYTEgbZK2yqe2MWKJKBjRlFweP/pJPx0x9muMEVw==} engines: {node: ^20.19.0 || >=22.12.0} oxc-resolver@11.19.1: @@ -3160,17 +3420,20 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - path-scurry@2.0.2: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + pbf@4.0.1: resolution: {integrity: sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==} hasBin: true @@ -3191,6 +3454,16 @@ packages: engines: {node: '>=0.10'} hasBin: true + playwright-core@1.60.0: + resolution: {integrity: sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.60.0: + resolution: {integrity: sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==} + engines: {node: '>=18'} + hasBin: true + postcss-load-config@3.1.4: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} @@ -3219,6 +3492,10 @@ packages: resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} + postcss@8.5.10: + resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.5.8: resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} engines: {node: ^10 || ^12 || >=14} @@ -3241,6 +3518,10 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + prism-svelte@0.4.7: resolution: {integrity: sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ==} @@ -3275,6 +3556,18 @@ packages: quickselect@3.0.0: resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==} + react-dom@19.2.6: + resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} + peerDependencies: + react: ^19.2.6 + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react@19.2.6: + resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} + engines: {node: '>=0.10.0'} + read-package-json-fast@4.0.0: resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==} engines: {node: ^18.17.0 || >=20.5.0} @@ -3283,6 +3576,14 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + recast@0.23.11: + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + engines: {node: '>= 4'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + rehype-slug@5.1.0: resolution: {integrity: sha512-Gf91dJoXneiorNEnn+Phx97CO7oRMrpi+6r155tTxzGuLtm+QrI4cTwCa9e1rtePdL4i9tSO58PeSS6HWfgsiw==} @@ -3299,25 +3600,25 @@ packages: remove-markdown@0.5.5: resolution: {integrity: sha512-lMR8tOtDqazFT6W2bZidoXwkptMdF3pCxpri0AEokHg0sZlC2GdoLqnoaxsEj1o7/BtXV1MKtT3YviA1t7rW7g==} + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} resolve-protobuf-schema@2.1.0: resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} - restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} + rettime@0.11.11: + resolution: {integrity: sha512-ILJRqVWBCTlg9r42fFgwVZx1gnFAcQF8mRoMkbgQfIrjEDf9nbBFDFx00oloOa+Q869FUtaYDXZvEfnecQSCoQ==} reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - - rolldown@1.0.0-rc.15: - resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==} + rolldown@1.0.0-rc.17: + resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -3326,6 +3627,10 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -3336,6 +3641,9 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + schema-dts@1.1.5: resolution: {integrity: sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==} @@ -3388,14 +3696,6 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - - slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} - smol-toml@1.6.1: resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==} engines: {node: '>= 18'} @@ -3411,6 +3711,10 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + sqlite-wasm-kysely@0.3.0: resolution: {integrity: sha512-TzjBNv7KwRw6E3pdKdlRyZiTmUIE0UttT/Sl56MVwVARl/u5gp978KepazCJZewFUnlWHz9i3NQd4kOtP/Afdg==} peerDependencies: @@ -3419,28 +3723,36 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + std-env@4.0.0: resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} + storybook@10.2.13: + resolution: {integrity: sha512-heMfJjOfbHvL+wlCAwFZlSxcakyJ5yQDam6e9k2RRArB1veJhRnsjO6lO1hOXjJYrqxfHA/ldIugbBVlCDqfvQ==} + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.2.0: - resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} - engines: {node: '>=12'} - - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} strip-json-comments@5.0.3: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} @@ -3453,8 +3765,8 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - svelte-check@4.4.6: - resolution: {integrity: sha512-kP1zG81EWaFe9ZyTv4ZXv44Csi6Pkdpb7S3oj6m+K2ec/IcDg/a8LsFsnVLqm2nxtkSwsd5xPj/qFkTBgXHXjg==} + svelte-check@4.4.8: + resolution: {integrity: sha512-67adfgBox5eNSNIvIIwgFizKGdcRrGpiMoNO2obHcYuLz7iTa8Xgm/NGU3ntMFnNm8K1grFOIG6HhMLX/vcN8w==} engines: {node: '>= 18.0.0'} hasBin: true peerDependencies: @@ -3488,13 +3800,20 @@ packages: peerDependencies: svelte: ^3.2.1 || ^4.0.0-next.1 || ^5.0.0-next.94 - svelte@5.55.4: - resolution: {integrity: sha512-q8DFohk6vUswSng95IZb9nzWJnbINZsK7OiM1snAa3qCjJBL0ZQpvMyAaVXjUukdM75J/m8UE8xwqat8Ors/zQ==} + svelte@5.55.7: + resolution: {integrity: sha512-ymI5ykLPwIHW839E053FQbI1G+jnRFJEw3Kv5Y4njixVWywQBx+NUFpkkKyk5LIb36Fg9DVXSYpqiGekLD0hyw==} engines: {node: '>=18'} + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -3502,10 +3821,6 @@ packages: resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.16: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} @@ -3513,10 +3828,25 @@ packages: tinyqueue@3.0.0: resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + + tldts-core@7.0.30: + resolution: {integrity: sha512-uiHN8PIB1VmWyS98eZYja4xzlYqeFZVjb4OuYlJQnZAuJhMw4PbKQOKgHKhBdJR3FE/t5mUQ1Kd80++B+qhD1Q==} + + tldts@7.0.30: + resolution: {integrity: sha512-ELrFxuqsDdHUwoh0XxDbxuLD3Wnz49Z57IFvTtvWy1hJdcMZjXLIuonjilCiWHlT2GbE4Wlv1wKVTzDFnXH1aw==} + hasBin: true + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3525,6 +3855,10 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + tough-cookie@6.0.1: + resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} + engines: {node: '>=16'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -3537,6 +3871,10 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -3553,8 +3891,12 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typescript-eslint@8.59.0: - resolution: {integrity: sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==} + type-fest@5.6.0: + resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==} + engines: {node: '>=20'} + + typescript-eslint@8.59.3: + resolution: {integrity: sha512-KgusgyDgG4LI8Ih/sWaCtZ06tckLAS5CvT5A4D1Q7bYVoAAyzwiZvE4BmwDHkhRVkvhRBepKeASoFzQetha7Fg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -3641,6 +3983,9 @@ packages: resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} engines: {node: '>=18.12.0'} + until-async@3.0.2: + resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} + update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true @@ -3653,15 +3998,16 @@ packages: urlpattern-polyfill@10.1.0: resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@10.0.0: - resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} - hasBin: true - - uuid@13.0.0: - resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} + uuid@14.0.0: + resolution: {integrity: sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==} hasBin: true vfile-message@2.0.4: @@ -3683,10 +4029,10 @@ packages: resolution: {integrity: sha512-FwjApRNZyN+RucPW9Z9kf0dyzyi3r3zlDfrTnzHXNaYpmT3pZ5w//d6QkApy1iypbDm+3fq+Gwfv+PYA4j4uYw==} engines: {node: '>=20.0.0'} - vite-plugin-lucide-preprocess@1.4.8: - resolution: {integrity: sha512-wIQ1fchys+WD/brwNjJTpy+GoHysPRDI7PFl4Qb6WNleifeC0fHGISMoyXdCjlcbx9wMMWOCPsZOygtk09mMfw==} + vite-plugin-lucide-preprocess@1.4.10: + resolution: {integrity: sha512-p+hDOGAkmM8V15/Orf2CPMTIjdSlF2J7RjSow0BLDMHpKfviPprrsUpangKPup8uPWakayRDLJ7BDuvMgeUPvg==} peerDependencies: - rolldown: '>=0.1' + rolldown: '>=0.1 || >=1.0.0-0' rollup: '>=1' vite: '>=2' peerDependenciesMeta: @@ -3695,8 +4041,8 @@ packages: rollup: optional: true - vite@8.0.8: - resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==} + vite@8.0.10: + resolution: {integrity: sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3746,20 +4092,20 @@ packages: vite: optional: true - vitest@4.1.4: - resolution: {integrity: sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==} + vitest@4.1.5: + resolution: {integrity: sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.4 - '@vitest/browser-preview': 4.1.4 - '@vitest/browser-webdriverio': 4.1.4 - '@vitest/coverage-istanbul': 4.1.4 - '@vitest/coverage-v8': 4.1.4 - '@vitest/ui': 4.1.4 + '@vitest/browser-playwright': 4.1.5 + '@vitest/browser-preview': 4.1.5 + '@vitest/browser-webdriverio': 4.1.5 + '@vitest/coverage-istanbul': 4.1.5 + '@vitest/coverage-v8': 4.1.5 + '@vitest/ui': 4.1.5 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3823,10 +4169,30 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrap-ansi@9.0.2: - resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + ws@8.20.1: + resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -3834,11 +4200,19 @@ packages: resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -3854,6 +4228,8 @@ packages: snapshots: + '@adobe/css-tools@4.4.4': {} + '@anthropic-ai/sdk@0.39.0': dependencies: '@types/node': 18.19.130 @@ -3943,6 +4319,8 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/runtime@7.29.2': {} + '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 @@ -3966,12 +4344,37 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@emnapi/core@1.9.2': + '@chromatic-com/playwright@0.13.4(@playwright/test@1.60.0)(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + '@chromaui/rrweb-snapshot': 2.0.0-alpha.19-noAbsolute + '@playwright/test': 1.60.0 + '@segment/analytics-node': 2.1.3 + storybook: 10.2.13(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@testing-library/dom' + - bufferutil + - encoding + - prettier + - react + - react-dom + - utf-8-validate + + '@chromaui/rrweb-snapshot@2.0.0-alpha.19-noAbsolute': + dependencies: + postcss: 8.5.10 + + '@emnapi/core@1.10.0': dependencies: '@emnapi/wasi-threads': 1.2.1 tslib: 2.8.1 optional: true + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.9.2': dependencies: tslib: 2.8.1 @@ -4138,18 +4541,18 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.2.1(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0(jiti@2.7.0))': dependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@2.0.4(eslint@10.2.1(jiti@2.6.1))': + '@eslint/compat@2.0.4(eslint@10.3.0(jiti@2.7.0))': dependencies: - '@eslint/core': 1.2.0 + '@eslint/core': 1.2.1 optionalDependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) '@eslint/config-array@0.23.5': dependencies: @@ -4171,9 +4574,9 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.2.1(jiti@2.6.1))': + '@eslint/js@10.0.1(eslint@10.3.0(jiti@2.7.0))': optionalDependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) '@eslint/markdown@8.0.1': dependencies: @@ -4318,10 +4721,10 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@inlang/paraglide-js@2.16.0': + '@inlang/paraglide-js@2.16.1': dependencies: '@inlang/recommend-sherlock': 0.2.1 - '@inlang/sdk': 2.9.1 + '@inlang/sdk': 2.9.2 commander: 11.1.0 consola: 3.4.0 json5: 2.2.3 @@ -4334,16 +4737,43 @@ snapshots: dependencies: comment-json: 4.6.2 - '@inlang/sdk@2.9.1': + '@inlang/sdk@2.9.2': dependencies: - '@lix-js/sdk': 0.4.9 + '@lix-js/sdk': 0.4.10 '@sinclair/typebox': 0.31.28 kysely: 0.28.15 sqlite-wasm-kysely: 0.3.0(kysely@0.28.15) - uuid: 13.0.0 + uuid: 14.0.0 transitivePeerDependencies: - babel-plugin-macros + '@inquirer/ansi@2.0.5': {} + + '@inquirer/confirm@6.0.13(@types/node@24.12.2)': + dependencies: + '@inquirer/core': 11.1.10(@types/node@24.12.2) + '@inquirer/type': 4.0.5(@types/node@24.12.2) + optionalDependencies: + '@types/node': 24.12.2 + + '@inquirer/core@11.1.10(@types/node@24.12.2)': + dependencies: + '@inquirer/ansi': 2.0.5 + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@24.12.2) + cli-width: 4.1.0 + fast-wrap-ansi: 0.2.0 + mute-stream: 3.0.0 + signal-exit: 4.1.0 + optionalDependencies: + '@types/node': 24.12.2 + + '@inquirer/figures@2.0.5': {} + + '@inquirer/type@4.0.5(@types/node@24.12.2)': + optionalDependencies: + '@types/node': 24.12.2 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -4371,7 +4801,7 @@ snapshots: '@kwsites/promise-deferred@1.1.1': {} - '@lix-js/sdk@0.4.9': + '@lix-js/sdk@0.4.10': dependencies: '@lix-js/server-protocol-schema': 0.1.1 dedent: 1.5.1 @@ -4379,17 +4809,23 @@ snapshots: js-sha256: 0.11.1 kysely: 0.28.15 sqlite-wasm-kysely: 0.3.0(kysely@0.28.15) - uuid: 10.0.0 + uuid: 14.0.0 transitivePeerDependencies: - babel-plugin-macros '@lix-js/server-protocol-schema@0.1.1': {} + '@lukeed/csprng@1.1.0': {} + + '@lukeed/uuid@2.0.1': + dependencies: + '@lukeed/csprng': 1.1.0 + '@mapbox/jsonlint-lines-primitives@2.0.2': {} '@mapbox/point-geometry@1.1.0': {} - '@mapbox/tiny-sdf@2.0.7': {} + '@mapbox/tiny-sdf@2.1.0': {} '@mapbox/unitbezier@0.0.1': {} @@ -4431,10 +4867,19 @@ snapshots: pbf: 4.0.1 supercluster: 8.0.1 - '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@mswjs/interceptors@0.41.9': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 '@tybys/wasm-util': 0.10.1 optional: true @@ -4463,82 +4908,93 @@ snapshots: transitivePeerDependencies: - encoding - '@number-flow/svelte@0.3.13(svelte@5.55.4)': + '@number-flow/svelte@0.3.13(svelte@5.55.7(@typescript-eslint/types@8.59.3))': dependencies: esm-env: 1.2.2 number-flow: 0.5.12 - svelte: 5.55.4 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) + + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/deferred-promise@3.0.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} '@opentelemetry/api@1.9.1': {} - '@oxc-parser/binding-android-arm-eabi@0.127.0': + '@oxc-parser/binding-android-arm-eabi@0.130.0': optional: true - '@oxc-parser/binding-android-arm64@0.127.0': + '@oxc-parser/binding-android-arm64@0.130.0': optional: true - '@oxc-parser/binding-darwin-arm64@0.127.0': + '@oxc-parser/binding-darwin-arm64@0.130.0': optional: true - '@oxc-parser/binding-darwin-x64@0.127.0': + '@oxc-parser/binding-darwin-x64@0.130.0': optional: true - '@oxc-parser/binding-freebsd-x64@0.127.0': + '@oxc-parser/binding-freebsd-x64@0.130.0': optional: true - '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0': + '@oxc-parser/binding-linux-arm-gnueabihf@0.130.0': optional: true - '@oxc-parser/binding-linux-arm-musleabihf@0.127.0': + '@oxc-parser/binding-linux-arm-musleabihf@0.130.0': optional: true - '@oxc-parser/binding-linux-arm64-gnu@0.127.0': + '@oxc-parser/binding-linux-arm64-gnu@0.130.0': optional: true - '@oxc-parser/binding-linux-arm64-musl@0.127.0': + '@oxc-parser/binding-linux-arm64-musl@0.130.0': optional: true - '@oxc-parser/binding-linux-ppc64-gnu@0.127.0': + '@oxc-parser/binding-linux-ppc64-gnu@0.130.0': optional: true - '@oxc-parser/binding-linux-riscv64-gnu@0.127.0': + '@oxc-parser/binding-linux-riscv64-gnu@0.130.0': optional: true - '@oxc-parser/binding-linux-riscv64-musl@0.127.0': + '@oxc-parser/binding-linux-riscv64-musl@0.130.0': optional: true - '@oxc-parser/binding-linux-s390x-gnu@0.127.0': + '@oxc-parser/binding-linux-s390x-gnu@0.130.0': optional: true - '@oxc-parser/binding-linux-x64-gnu@0.127.0': + '@oxc-parser/binding-linux-x64-gnu@0.130.0': optional: true - '@oxc-parser/binding-linux-x64-musl@0.127.0': + '@oxc-parser/binding-linux-x64-musl@0.130.0': optional: true - '@oxc-parser/binding-openharmony-arm64@0.127.0': + '@oxc-parser/binding-openharmony-arm64@0.130.0': optional: true - '@oxc-parser/binding-wasm32-wasi@0.127.0': + '@oxc-parser/binding-wasm32-wasi@0.130.0': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@oxc-parser/binding-win32-arm64-msvc@0.127.0': + '@oxc-parser/binding-win32-arm64-msvc@0.130.0': optional: true - '@oxc-parser/binding-win32-ia32-msvc@0.127.0': + '@oxc-parser/binding-win32-ia32-msvc@0.130.0': optional: true - '@oxc-parser/binding-win32-x64-msvc@0.127.0': + '@oxc-parser/binding-win32-x64-msvc@0.130.0': optional: true - '@oxc-project/types@0.124.0': {} - '@oxc-project/types@0.127.0': {} + '@oxc-project/types@0.130.0': {} + '@oxc-resolver/binding-android-arm-eabi@11.19.1': optional: true @@ -4587,9 +5043,9 @@ snapshots: '@oxc-resolver/binding-openharmony-arm64@11.19.1': optional: true - '@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)': + '@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -4630,69 +5086,73 @@ snapshots: '@pagefind/windows-x64@1.5.2': optional: true + '@playwright/test@1.60.0': + dependencies: + playwright: 1.60.0 + '@polka/url@1.0.0-next.29': {} - '@prgm/sveltekit-progress-bar@3.0.2(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.4)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.4)': + '@prgm/sveltekit-progress-bar@3.0.2(@sveltejs/kit@2.58.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))': dependencies: - '@sveltejs/kit': 2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.4)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) - svelte: 5.55.4 + '@sveltejs/kit': 2.58.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + svelte: 5.55.7(@typescript-eslint/types@8.59.3) '@remix-run/headers@0.12.0': {} - '@rolldown/binding-android-arm64@1.0.0-rc.15': + '@rolldown/binding-android-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.15': + '@rolldown/binding-darwin-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.15': + '@rolldown/binding-darwin-x64@1.0.0-rc.17': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.15': + '@rolldown/binding-freebsd-x64@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.15': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.17': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.15': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.17': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.15': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.17': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17': optional: true - '@rolldown/pluginutils@1.0.0-rc.15': {} + '@rolldown/pluginutils@1.0.0-rc.17': {} '@rollup/pluginutils@5.3.0(rollup@4.59.0)': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: @@ -4773,33 +5233,56 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true - '@sentry-internal/browser-utils@10.49.0': + '@segment/analytics-core@1.7.0': dependencies: - '@sentry/core': 10.49.0 + '@lukeed/uuid': 2.0.1 + '@segment/analytics-generic-utils': 1.2.0 + dset: 3.1.4 + tslib: 2.8.1 - '@sentry-internal/feedback@10.49.0': + '@segment/analytics-generic-utils@1.2.0': dependencies: - '@sentry/core': 10.49.0 + tslib: 2.8.1 - '@sentry-internal/replay-canvas@10.49.0': + '@segment/analytics-node@2.1.3': dependencies: - '@sentry-internal/replay': 10.49.0 - '@sentry/core': 10.49.0 + '@lukeed/uuid': 2.0.1 + '@segment/analytics-core': 1.7.0 + '@segment/analytics-generic-utils': 1.2.0 + buffer: 6.0.3 + jose: 5.10.0 + node-fetch: 2.7.0 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding - '@sentry-internal/replay@10.49.0': + '@sentry-internal/browser-utils@10.50.0': dependencies: - '@sentry-internal/browser-utils': 10.49.0 - '@sentry/core': 10.49.0 + '@sentry/core': 10.50.0 + + '@sentry-internal/feedback@10.50.0': + dependencies: + '@sentry/core': 10.50.0 + + '@sentry-internal/replay-canvas@10.50.0': + dependencies: + '@sentry-internal/replay': 10.50.0 + '@sentry/core': 10.50.0 + + '@sentry-internal/replay@10.50.0': + dependencies: + '@sentry-internal/browser-utils': 10.50.0 + '@sentry/core': 10.50.0 '@sentry/babel-plugin-component-annotate@5.2.0': {} - '@sentry/browser@10.49.0': + '@sentry/browser@10.50.0': dependencies: - '@sentry-internal/browser-utils': 10.49.0 - '@sentry-internal/feedback': 10.49.0 - '@sentry-internal/replay': 10.49.0 - '@sentry-internal/replay-canvas': 10.49.0 - '@sentry/core': 10.49.0 + '@sentry-internal/browser-utils': 10.50.0 + '@sentry-internal/feedback': 10.50.0 + '@sentry-internal/replay': 10.50.0 + '@sentry-internal/replay-canvas': 10.50.0 + '@sentry/core': 10.50.0 '@sentry/bundler-plugin-core@5.2.0': dependencies: @@ -4858,12 +5341,12 @@ snapshots: - encoding - supports-color - '@sentry/core@10.49.0': {} + '@sentry/core@10.50.0': {} - '@sentry/deno@10.49.0': + '@sentry/deno@10.50.0': dependencies: '@opentelemetry/api': 1.9.1 - '@sentry/core': 10.49.0 + '@sentry/core': 10.50.0 '@sentry/rollup-plugin@5.2.0(rollup@4.59.0)': dependencies: @@ -4875,12 +5358,12 @@ snapshots: - encoding - supports-color - '@sentry/svelte@10.49.0(svelte@5.55.4)': + '@sentry/svelte@10.50.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))': dependencies: - '@sentry/browser': 10.49.0 - '@sentry/core': 10.49.0 + '@sentry/browser': 10.50.0 + '@sentry/core': 10.50.0 magic-string: 0.30.21 - svelte: 5.55.4 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) '@sentry/vite-plugin@5.2.0(rollup@4.59.0)': dependencies: @@ -4905,35 +5388,42 @@ snapshots: '@standard-schema/spec@1.1.0': {} + '@storybook/global@5.0.0': {} + + '@storybook/icons@2.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': + dependencies: + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': dependencies: acorn: 8.16.0 - '@sveltejs/adapter-netlify@5.2.4(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.4)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@sveltejs/adapter-netlify@5.2.4(@sveltejs/kit@2.58.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))': dependencies: '@iarna/toml': 2.2.5 - '@sveltejs/kit': 2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.4)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/kit': 2.58.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) esbuild: 0.25.12 set-cookie-parser: 2.7.2 - '@sveltejs/enhanced-img@0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(rollup@4.59.0)(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/enhanced-img@0.10.4(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))(rollup@4.59.0)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) magic-string: 0.30.21 sharp: 0.34.5 - svelte: 5.55.4 - svelte-parse-markup: 0.1.5(svelte@5.55.4) - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte-parse-markup: 0.1.5(svelte@5.55.7(@typescript-eslint/types@8.59.3)) + vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) vite-imagetools: 9.0.3(rollup@4.59.0) zimmerframe: 1.1.4 transitivePeerDependencies: - rollup - '@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))(svelte@5.55.4)(typescript@5.9.3)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/kit@2.58.0(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@5.9.3)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 @@ -4944,36 +5434,60 @@ snapshots: mrmime: 2.0.1 set-cookie-parser: 3.1.0 sirv: 3.0.2 - svelte: 5.55.4 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + svelte: 5.55.7(@typescript-eslint/types@8.59.3) + vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) optionalDependencies: '@opentelemetry/api': 1.9.1 typescript: 5.9.3 - '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.4)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.7(@typescript-eslint/types@8.59.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 - svelte: 5.55.4 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) - vitefu: 1.1.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + svelte: 5.55.7(@typescript-eslint/types@8.59.3) + vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/runtime': 7.29.2 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.9.1': + dependencies: + '@adobe/css-tools': 4.4.4 + aria-query: 5.3.1 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 - '@turf/distance@7.3.4': + '@turf/distance@7.3.5': dependencies: - '@turf/helpers': 7.3.4 - '@turf/invariant': 7.3.4 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 '@types/geojson': 7946.0.16 tslib: 2.8.1 - '@turf/helpers@7.3.4': + '@turf/helpers@7.3.5': dependencies: '@types/geojson': 7946.0.16 tslib: 2.8.1 - '@turf/invariant@7.3.4': + '@turf/invariant@7.3.5': dependencies: - '@turf/helpers': 7.3.4 + '@turf/helpers': 7.3.5 '@types/geojson': 7946.0.16 tslib: 2.8.1 @@ -4982,6 +5496,8 @@ snapshots: tslib: 2.8.1 optional: true + '@types/aria-query@5.0.4': {} + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -5001,6 +5517,8 @@ snapshots: '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/geojson@7946.0.16': {} '@types/glidejs__glide@3.6.6': {} @@ -5048,6 +5566,12 @@ snapshots: dependencies: unified: 11.0.5 + '@types/set-cookie-parser@2.4.10': + dependencies: + '@types/node': 24.12.2 + + '@types/statuses@2.0.6': {} + '@types/supercluster@7.1.3': dependencies: '@types/geojson': 7946.0.16 @@ -5062,15 +5586,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.59.0 - '@typescript-eslint/type-utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.59.0 - eslint: 10.2.1(jiti@2.6.1) + '@typescript-eslint/parser': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/type-utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.3 + eslint: 10.3.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -5078,58 +5602,56 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.59.0 - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.59.0 + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3 - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.59.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.59.3(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@5.9.3) - '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@5.9.3) + '@typescript-eslint/types': 8.59.3 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.59.0': + '@typescript-eslint/scope-manager@8.59.3': dependencies: - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/visitor-keys': 8.59.0 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 - '@typescript-eslint/tsconfig-utils@8.59.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.59.3(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) debug: 4.4.3 - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.58.2': {} - - '@typescript-eslint/types@8.59.0': {} + '@typescript-eslint/types@8.59.3': {} - '@typescript-eslint/typescript-estree@8.59.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.59.3(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.59.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@5.9.3) - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/visitor-keys': 8.59.0 + '@typescript-eslint/project-service': 8.59.3(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@5.9.3) + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3 minimatch: 10.2.5 semver: 7.7.4 @@ -5139,62 +5661,85 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.59.0 - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) - eslint: 10.2.1(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + eslint: 10.3.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.59.0': + '@typescript-eslint/visitor-keys@8.59.3': dependencies: - '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/types': 8.59.3 eslint-visitor-keys: 5.0.1 '@ungap/structured-clone@1.3.0': {} - '@vitest/expect@4.1.4': + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + + '@vitest/expect@4.1.5': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.4 - '@vitest/utils': 4.1.4 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.4(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.5(msw@2.14.6(@types/node@24.12.2)(typescript@5.9.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0))': dependencies: - '@vitest/spy': 4.1.4 + '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + msw: 2.14.6(@types/node@24.12.2)(typescript@5.9.3) + vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) - '@vitest/pretty-format@4.1.4': + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/pretty-format@4.1.5': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.4': + '@vitest/runner@4.1.5': dependencies: - '@vitest/utils': 4.1.4 + '@vitest/utils': 4.1.5 pathe: 2.0.3 - '@vitest/snapshot@4.1.4': + '@vitest/snapshot@4.1.5': dependencies: - '@vitest/pretty-format': 4.1.4 - '@vitest/utils': 4.1.4 + '@vitest/pretty-format': 4.1.5 + '@vitest/utils': 4.1.5 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.4': {} + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.4 + + '@vitest/spy@4.1.5': {} + + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 - '@vitest/utils@4.1.4': + '@vitest/utils@4.1.5': dependencies: - '@vitest/pretty-format': 4.1.4 + '@vitest/pretty-format': 4.1.5 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -5239,40 +5784,44 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ansi-escapes@7.3.0: - dependencies: - environment: 1.1.0 - ansi-regex@5.0.1: {} - ansi-regex@6.2.2: {} - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.3: {} + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + aria-query@5.3.1: {} array-timsort@1.0.3: {} assertion-error@2.0.1: {} + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + asynckit@0.4.0: {} - axios-mock-adapter@2.1.0(axios@1.15.0): + axios-mock-adapter@2.1.0(axios@1.15.2): dependencies: - axios: 1.15.0 + axios: 1.15.2 fast-deep-equal: 3.1.3 is-buffer: 2.0.5 - axios-retry@4.5.0(axios@1.15.0): + axios-retry@4.5.0(axios@1.15.2): dependencies: - axios: 1.15.0 + axios: 1.15.2 is-retry-allowed: 2.2.0 - axios@1.15.0: + axios@1.15.2: dependencies: follow-redirects: 1.15.11 form-data: 4.0.5 @@ -5288,6 +5837,8 @@ snapshots: balanced-match@4.0.4: {} + base64-js@1.5.1: {} + baseline-browser-mapping@2.10.14: {} bcp-47@2.1.0: @@ -5316,6 +5867,15 @@ snapshots: node-releases: 2.0.37 update-browserslist-db: 1.2.3(browserslist@4.28.2) + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -5325,6 +5885,14 @@ snapshots: ccount@2.0.1: {} + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + chai@6.2.2: {} chalk@4.1.2: @@ -5332,25 +5900,24 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.6.2: {} - character-entities@2.0.2: {} + check-error@2.1.3: {} + chokidar@4.0.3: dependencies: readdirp: 4.1.2 - cli-cursor@5.0.0: - dependencies: - restore-cursor: 5.1.0 - - cli-truncate@4.0.0: - dependencies: - slice-ansi: 5.0.0 - string-width: 7.2.0 + cli-width@4.1.0: {} clipboard-polyfill@4.1.1: {} + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + clsx@2.1.1: {} color-convert@2.0.1: @@ -5359,16 +5926,12 @@ snapshots: color-name@1.1.4: {} - colorette@2.0.20: {} - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 commander@11.1.0: {} - commander@13.1.0: {} - commander@8.3.0: {} comment-json@4.6.2: @@ -5382,6 +5945,8 @@ snapshots: cookie@0.6.0: {} + cookie@1.1.1: {} + cross-env@7.0.3: dependencies: cross-spawn: 7.0.6 @@ -5392,6 +5957,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + css.escape@1.5.1: {} + cssesc@3.0.0: {} csstype@3.2.3: {} @@ -5406,10 +5973,21 @@ snapshots: dedent@1.5.1: {} + deep-eql@5.0.2: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + define-lazy-prop@3.0.0: {} + delayed-stream@1.0.0: {} dequal@2.0.3: {} @@ -5418,10 +5996,16 @@ snapshots: devalue@5.7.1: {} + devalue@5.8.1: {} + devlop@1.1.0: dependencies: dequal: 2.0.3 + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + dot-case@3.0.4: dependencies: no-case: 3.0.4 @@ -5429,6 +6013,8 @@ snapshots: dotenv@16.6.1: {} + dset@3.1.4: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -5439,9 +6025,7 @@ snapshots: electron-to-chromium@1.5.331: {} - emoji-regex@10.6.0: {} - - environment@1.1.0: {} + emoji-regex@8.0.0: {} es-define-property@1.0.1: {} @@ -5526,14 +6110,14 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-flat-gitignore@2.3.0(eslint@10.2.1(jiti@2.6.1)): + eslint-config-flat-gitignore@2.3.0(eslint@10.3.0(jiti@2.7.0)): dependencies: - '@eslint/compat': 2.0.4(eslint@10.2.1(jiti@2.6.1)) - eslint: 10.2.1(jiti@2.6.1) + '@eslint/compat': 2.0.4(eslint@10.3.0(jiti@2.7.0)) + eslint: 10.3.0(jiti@2.7.0) - eslint-config-prettier@10.1.8(eslint@10.2.1(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) eslint-formatter-gha@2.0.1: dependencies: @@ -5548,11 +6132,11 @@ snapshots: strip-ansi: 6.0.1 text-table: 0.2.0 - eslint-plugin-svelte@3.17.1(eslint@10.2.1(jiti@2.6.1))(svelte@5.55.4): + eslint-plugin-svelte@3.17.1(eslint@10.3.0(jiti@2.7.0))(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 @@ -5560,9 +6144,9 @@ snapshots: postcss-load-config: 3.1.4(postcss@8.5.8) postcss-safe-parser: 7.0.1(postcss@8.5.8) semver: 7.7.4 - svelte-eslint-parser: 1.6.0(svelte@5.55.4) + svelte-eslint-parser: 1.6.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)) optionalDependencies: - svelte: 5.55.4 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) transitivePeerDependencies: - ts-node @@ -5584,9 +6168,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.2.1(jiti@2.6.1): + eslint@10.3.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.5.5 @@ -5617,7 +6201,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -5641,10 +6225,11 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@2.2.4: + esrap@2.2.8(@typescript-eslint/types@8.59.3): dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - '@typescript-eslint/types': 8.58.2 + optionalDependencies: + '@typescript-eslint/types': 8.59.3 esrecurse@4.3.0: dependencies: @@ -5656,7 +6241,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -5664,18 +6249,6 @@ snapshots: eventemitter3@5.0.4: {} - execa@8.0.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - expect-type@1.3.0: {} extend@3.0.2: {} @@ -5694,6 +6267,16 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-string-truncated-width@3.0.3: {} + + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + + fast-wrap-ansi@0.2.0: + dependencies: + fast-string-width: 3.0.2 + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -5753,11 +6336,17 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 4.0.0-beta.3 - framer-motion@12.38.0: + framer-motion@12.38.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: motion-dom: 12.38.0 motion-utils: 12.36.0 tslib: 2.8.1 + optionalDependencies: + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + + fsevents@2.3.2: + optional: true fsevents@2.3.3: optional: true @@ -5766,7 +6355,7 @@ snapshots: gensync@1.0.0-beta.2: {} - get-east-asian-width@1.5.0: {} + get-caller-file@2.0.5: {} get-intrinsic@1.3.0: dependencies: @@ -5786,8 +6375,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stream@8.0.1: {} - get-tsconfig@4.13.7: dependencies: resolve-pkg-maps: 1.0.0 @@ -5827,6 +6414,8 @@ snapshots: gopd@1.2.0: {} + graphql@16.14.0: {} + has-flag@4.0.0: {} has-symbols@1.1.0: {} @@ -5851,6 +6440,11 @@ snapshots: hast-util-whitespace@2.0.1: {} + headers-polyfill@5.0.1: + dependencies: + '@types/set-cookie-parser': 2.4.10 + set-cookie-parser: 3.1.0 + hey-listen@1.0.8: {} html-to-image@1.11.13: {} @@ -5866,13 +6460,11 @@ snapshots: human-id@4.1.3: {} - human-signals@5.0.0: {} - humanize-ms@1.2.1: dependencies: ms: 2.1.3 - husky@9.1.7: {} + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -5882,6 +6474,8 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + is-alphabetical@2.0.1: {} is-alphanumerical@2.0.1: @@ -5893,18 +6487,22 @@ snapshots: is-decimal@2.0.1: {} + is-docker@3.0.0: {} + is-extglob@2.1.1: {} - is-fullwidth-code-point@4.0.0: {} - - is-fullwidth-code-point@5.1.0: - dependencies: - get-east-asian-width: 1.5.0 + is-fullwidth-code-point@3.0.0: {} is-glob@4.0.3: dependencies: is-extglob: 2.1.1 + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-node-process@1.2.0: {} + is-number@7.0.0: {} is-path-inside@4.0.0: {} @@ -5913,17 +6511,21 @@ snapshots: is-reference@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 is-retry-allowed@2.2.0: {} - is-stream@3.0.0: {} + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 isexe@2.0.0: {} isexe@3.1.5: {} - jiti@2.6.1: {} + jiti@2.7.0: {} + + jose@5.10.0: {} js-sha256@0.11.1: {} @@ -5955,21 +6557,21 @@ snapshots: kleur@4.1.5: {} - knip@6.6.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + knip@6.14.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): dependencies: fdir: 6.5.0(picomatch@4.0.4) formatly: 0.3.0 get-tsconfig: 4.14.0 - jiti: 2.6.1 + jiti: 2.7.0 minimist: 1.2.8 - oxc-parser: 0.127.0 - oxc-resolver: 11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + oxc-parser: 0.130.0 + oxc-resolver: 11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) picomatch: 4.0.4 smol-toml: 1.6.1 strip-json-comments: 5.0.3 tinyglobby: 0.2.16 unbash: 3.0.0 - yaml: 2.8.3 + yaml: 2.9.0 zod: 4.3.6 transitivePeerDependencies: - '@emnapi/core' @@ -5979,6 +6581,49 @@ snapshots: kysely@0.28.15: {} + lefthook-darwin-arm64@2.1.6: + optional: true + + lefthook-darwin-x64@2.1.6: + optional: true + + lefthook-freebsd-arm64@2.1.6: + optional: true + + lefthook-freebsd-x64@2.1.6: + optional: true + + lefthook-linux-arm64@2.1.6: + optional: true + + lefthook-linux-x64@2.1.6: + optional: true + + lefthook-openbsd-arm64@2.1.6: + optional: true + + lefthook-openbsd-x64@2.1.6: + optional: true + + lefthook-windows-arm64@2.1.6: + optional: true + + lefthook-windows-x64@2.1.6: + optional: true + + lefthook@2.1.6: + optionalDependencies: + lefthook-darwin-arm64: 2.1.6 + lefthook-darwin-x64: 2.1.6 + lefthook-freebsd-arm64: 2.1.6 + lefthook-freebsd-x64: 2.1.6 + lefthook-linux-arm64: 2.1.6 + lefthook-linux-x64: 2.1.6 + lefthook-openbsd-arm64: 2.1.6 + lefthook-openbsd-x64: 2.1.6 + lefthook-windows-arm64: 2.1.6 + lefthook-windows-x64: 2.1.6 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -6035,32 +6680,6 @@ snapshots: lilconfig@2.1.0: {} - lilconfig@3.1.3: {} - - lint-staged@15.5.2: - dependencies: - chalk: 5.6.2 - commander: 13.1.0 - debug: 4.4.3 - execa: 8.0.1 - lilconfig: 3.1.3 - listr2: 8.3.3 - micromatch: 4.0.8 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.8.3 - transitivePeerDependencies: - - supports-color - - listr2@8.3.3: - dependencies: - cli-truncate: 4.0.0 - colorette: 2.0.20 - eventemitter3: 5.0.4 - log-update: 6.1.0 - rfdc: 1.4.1 - wrap-ansi: 9.0.2 - locate-character@3.0.0: {} locate-path@6.0.0: @@ -6069,16 +6688,10 @@ snapshots: lodash@4.18.1: {} - log-update@6.1.0: - dependencies: - ansi-escapes: 7.3.0 - cli-cursor: 5.0.0 - slice-ansi: 7.1.2 - strip-ansi: 7.2.0 - wrap-ansi: 9.0.2 - longest-streak@3.1.0: {} + loupe@3.2.1: {} + lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -6089,9 +6702,11 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-svelte@0.536.0(svelte@5.55.4): + lucide-svelte@0.536.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: - svelte: 5.55.4 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) + + lz-string@1.5.0: {} magic-string@0.30.21: dependencies: @@ -6099,11 +6714,11 @@ snapshots: map-obj@4.3.0: {} - maplibre-gl@5.23.0: + maplibre-gl@5.24.0: dependencies: '@mapbox/jsonlint-lines-primitives': 2.0.2 '@mapbox/point-geometry': 1.1.0 - '@mapbox/tiny-sdf': 2.0.7 + '@mapbox/tiny-sdf': 2.1.0 '@mapbox/unitbezier': 0.0.1 '@mapbox/vector-tile': 2.0.4 '@mapbox/whoots-js': 3.1.0 @@ -6262,20 +6877,18 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit: 5.1.0 - mdsvex@0.12.7(svelte@5.55.4): + mdsvex@0.12.7(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: '@types/mdast': 4.0.4 '@types/unist': 2.0.11 prism-svelte: 0.4.7 prismjs: 1.30.0 - svelte: 5.55.4 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) unist-util-visit: 2.0.3 vfile-message: 2.0.4 memorystream@0.3.1: {} - merge-stream@2.0.0: {} - merge2@1.4.1: {} micromark-core-commonmark@2.0.3: @@ -6497,9 +7110,7 @@ snapshots: dependencies: mime-db: 1.52.0 - mimic-fn@4.0.0: {} - - mimic-function@5.0.1: {} + min-indent@1.0.1: {} minimatch@10.2.5: dependencies: @@ -6517,14 +7128,14 @@ snapshots: dependencies: motion-utils: 12.36.0 - motion-sv@0.1.12(svelte@5.55.4): + motion-sv@0.1.12(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: csstype: 3.2.3 - framer-motion: 12.38.0 + framer-motion: 12.38.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) hey-listen: 1.0.8 motion-dom: 12.38.0 motion-utils: 12.36.0 - svelte: 5.55.4 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) transitivePeerDependencies: - '@emotion/is-prop-valid' - react @@ -6538,8 +7149,35 @@ snapshots: ms@2.1.3: {} + msw@2.14.6(@types/node@24.12.2)(typescript@5.9.3): + dependencies: + '@inquirer/confirm': 6.0.13(@types/node@24.12.2) + '@mswjs/interceptors': 0.41.9 + '@open-draft/deferred-promise': 3.0.0 + '@types/statuses': 2.0.6 + cookie: 1.1.1 + graphql: 16.14.0 + headers-polyfill: 5.0.1 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + rettime: 0.11.11 + statuses: 2.0.2 + strict-event-emitter: 0.5.1 + tough-cookie: 6.0.1 + type-fest: 5.6.0 + until-async: 3.0.2 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - '@types/node' + murmurhash-js@1.0.0: {} + mute-stream@3.0.0: {} + nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -6570,23 +7208,18 @@ snapshots: shell-quote: 1.8.3 which: 5.0.0 - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - number-flow@0.5.12: dependencies: esm-env: 1.2.2 obug@2.1.1: {} - onetime@6.0.0: + open@10.2.0: dependencies: - mimic-fn: 4.0.0 - - onetime@7.0.0: - dependencies: - mimic-function: 5.0.1 + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 optionator@0.9.4: dependencies: @@ -6597,32 +7230,34 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxc-parser@0.127.0: + outvariant@1.4.3: {} + + oxc-parser@0.130.0: dependencies: - '@oxc-project/types': 0.127.0 + '@oxc-project/types': 0.130.0 optionalDependencies: - '@oxc-parser/binding-android-arm-eabi': 0.127.0 - '@oxc-parser/binding-android-arm64': 0.127.0 - '@oxc-parser/binding-darwin-arm64': 0.127.0 - '@oxc-parser/binding-darwin-x64': 0.127.0 - '@oxc-parser/binding-freebsd-x64': 0.127.0 - '@oxc-parser/binding-linux-arm-gnueabihf': 0.127.0 - '@oxc-parser/binding-linux-arm-musleabihf': 0.127.0 - '@oxc-parser/binding-linux-arm64-gnu': 0.127.0 - '@oxc-parser/binding-linux-arm64-musl': 0.127.0 - '@oxc-parser/binding-linux-ppc64-gnu': 0.127.0 - '@oxc-parser/binding-linux-riscv64-gnu': 0.127.0 - '@oxc-parser/binding-linux-riscv64-musl': 0.127.0 - '@oxc-parser/binding-linux-s390x-gnu': 0.127.0 - '@oxc-parser/binding-linux-x64-gnu': 0.127.0 - '@oxc-parser/binding-linux-x64-musl': 0.127.0 - '@oxc-parser/binding-openharmony-arm64': 0.127.0 - '@oxc-parser/binding-wasm32-wasi': 0.127.0 - '@oxc-parser/binding-win32-arm64-msvc': 0.127.0 - '@oxc-parser/binding-win32-ia32-msvc': 0.127.0 - '@oxc-parser/binding-win32-x64-msvc': 0.127.0 - - oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + '@oxc-parser/binding-android-arm-eabi': 0.130.0 + '@oxc-parser/binding-android-arm64': 0.130.0 + '@oxc-parser/binding-darwin-arm64': 0.130.0 + '@oxc-parser/binding-darwin-x64': 0.130.0 + '@oxc-parser/binding-freebsd-x64': 0.130.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.130.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.130.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.130.0 + '@oxc-parser/binding-linux-arm64-musl': 0.130.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.130.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.130.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.130.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.130.0 + '@oxc-parser/binding-linux-x64-gnu': 0.130.0 + '@oxc-parser/binding-linux-x64-musl': 0.130.0 + '@oxc-parser/binding-openharmony-arm64': 0.130.0 + '@oxc-parser/binding-wasm32-wasi': 0.130.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.130.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.130.0 + '@oxc-parser/binding-win32-x64-msvc': 0.130.0 + + oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): optionalDependencies: '@oxc-resolver/binding-android-arm-eabi': 11.19.1 '@oxc-resolver/binding-android-arm64': 11.19.1 @@ -6640,7 +7275,7 @@ snapshots: '@oxc-resolver/binding-linux-x64-gnu': 11.19.1 '@oxc-resolver/binding-linux-x64-musl': 11.19.1 '@oxc-resolver/binding-openharmony-arm64': 11.19.1 - '@oxc-resolver/binding-wasm32-wasi': 11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + '@oxc-resolver/binding-wasm32-wasi': 11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) '@oxc-resolver/binding-win32-arm64-msvc': 11.19.1 '@oxc-resolver/binding-win32-ia32-msvc': 11.19.1 '@oxc-resolver/binding-win32-x64-msvc': 11.19.1 @@ -6677,15 +7312,17 @@ snapshots: path-key@3.1.1: {} - path-key@4.0.0: {} - path-scurry@2.0.2: dependencies: lru-cache: 11.2.7 minipass: 7.1.3 + path-to-regexp@6.3.0: {} + pathe@2.0.3: {} + pathval@2.0.1: {} + pbf@4.0.1: dependencies: resolve-protobuf-schema: 2.1.0 @@ -6698,6 +7335,14 @@ snapshots: pidtree@0.6.0: {} + playwright-core@1.60.0: {} + + playwright@1.60.0: + dependencies: + playwright-core: 1.60.0 + optionalDependencies: + fsevents: 2.3.2 + postcss-load-config@3.1.4(postcss@8.5.8): dependencies: lilconfig: 2.1.0 @@ -6718,6 +7363,12 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss@8.5.10: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.8: dependencies: nanoid: 3.3.11 @@ -6728,13 +7379,19 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-svelte@3.5.1(prettier@3.8.3)(svelte@5.55.4): + prettier-plugin-svelte@3.5.1(prettier@3.8.3)(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: prettier: 3.8.3 - svelte: 5.55.4 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) prettier@3.8.3: {} + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + prism-svelte@0.4.7: {} prismjs@1.30.0: {} @@ -6755,6 +7412,15 @@ snapshots: quickselect@3.0.0: {} + react-dom@19.2.6(react@19.2.6): + dependencies: + react: 19.2.6 + scheduler: 0.27.0 + + react-is@17.0.2: {} + + react@19.2.6: {} + read-package-json-fast@4.0.0: dependencies: json-parse-even-better-errors: 4.0.0 @@ -6762,6 +7428,19 @@ snapshots: readdirp@4.1.2: {} + recast@0.23.11: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + rehype-slug@5.1.0: dependencies: '@types/hast': 2.3.10 @@ -6791,41 +7470,38 @@ snapshots: remove-markdown@0.5.5: {} + require-directory@2.1.1: {} + resolve-pkg-maps@1.0.0: {} resolve-protobuf-schema@2.1.0: dependencies: protocol-buffers-schema: 3.6.0 - restore-cursor@5.1.0: - dependencies: - onetime: 7.0.0 - signal-exit: 4.1.0 + rettime@0.11.11: {} reusify@1.1.0: {} - rfdc@1.4.1: {} - - rolldown@1.0.0-rc.15: + rolldown@1.0.0-rc.17: dependencies: - '@oxc-project/types': 0.124.0 - '@rolldown/pluginutils': 1.0.0-rc.15 + '@oxc-project/types': 0.127.0 + '@rolldown/pluginutils': 1.0.0-rc.17 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.15 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.15 - '@rolldown/binding-darwin-x64': 1.0.0-rc.15 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.15 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15 + '@rolldown/binding-android-arm64': 1.0.0-rc.17 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.17 + '@rolldown/binding-darwin-x64': 1.0.0-rc.17 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.17 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.17 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.17 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.17 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.17 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.17 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.17 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17 rollup@4.59.0: dependencies: @@ -6859,6 +7535,8 @@ snapshots: fsevents: 2.3.3 optional: true + run-applescript@7.1.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -6869,6 +7547,8 @@ snapshots: dependencies: mri: 1.2.0 + scheduler@0.27.0: {} + schema-dts@1.1.5: {} semver@6.3.1: {} @@ -6940,16 +7620,6 @@ snapshots: slash@5.1.0: {} - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 4.0.0 - - slice-ansi@7.1.2: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - smol-toml@1.6.1: {} snake-case@3.0.4: @@ -6965,6 +7635,8 @@ snapshots: source-map-js@1.2.1: {} + source-map@0.6.1: {} + sqlite-wasm-kysely@0.3.0(kysely@0.28.15): dependencies: '@sqlite.org/sqlite-wasm': 3.48.0-build4 @@ -6972,25 +7644,48 @@ snapshots: stackback@0.0.2: {} + statuses@2.0.2: {} + std-env@4.0.0: {} - string-argv@0.3.2: {} + storybook@10.2.13(@testing-library/dom@10.4.1)(prettier@3.8.3)(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + dependencies: + '@storybook/global': 5.0.0 + '@storybook/icons': 2.0.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + '@testing-library/jest-dom': 6.9.1 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) + '@vitest/expect': 3.2.4 + '@vitest/spy': 3.2.4 + esbuild: 0.27.7 + open: 10.2.0 + recast: 0.23.11 + semver: 7.7.4 + use-sync-external-store: 1.6.0(react@19.2.6) + ws: 8.20.1 + optionalDependencies: + prettier: 3.8.3 + transitivePeerDependencies: + - '@testing-library/dom' + - bufferutil + - react + - react-dom + - utf-8-validate + + strict-event-emitter@0.5.1: {} - string-width@7.2.0: + string-width@4.2.3: dependencies: - emoji-regex: 10.6.0 - get-east-asian-width: 1.5.0 - strip-ansi: 7.2.0 + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.2.0: + strip-indent@3.0.0: dependencies: - ansi-regex: 6.2.2 - - strip-final-newline@3.0.0: {} + min-indent: 1.0.1 strip-json-comments@5.0.3: {} @@ -7002,19 +7697,19 @@ snapshots: dependencies: has-flag: 4.0.0 - svelte-check@4.4.6(picomatch@4.0.4)(svelte@5.55.4)(typescript@5.9.3): + svelte-check@4.4.8(picomatch@4.0.4)(svelte@5.55.7(@typescript-eslint/types@8.59.3))(typescript@5.9.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 chokidar: 4.0.3 fdir: 6.5.0(picomatch@4.0.4) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.55.4 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) typescript: 5.9.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.6.0(svelte@5.55.4): + svelte-eslint-parser@1.6.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -7024,55 +7719,58 @@ snapshots: postcss-selector-parser: 7.1.1 semver: 7.7.4 optionalDependencies: - svelte: 5.55.4 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) - svelte-french-toast@1.2.0(svelte@5.55.4): + svelte-french-toast@1.2.0(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: - svelte: 5.55.4 - svelte-writable-derived: 3.1.1(svelte@5.55.4) + svelte: 5.55.7(@typescript-eslint/types@8.59.3) + svelte-writable-derived: 3.1.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)) - svelte-parse-markup@0.1.5(svelte@5.55.4): + svelte-parse-markup@0.1.5(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: - svelte: 5.55.4 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) - svelte-toc@0.5.9: + svelte-toc@0.5.9(@typescript-eslint/types@8.59.3): dependencies: - svelte: 5.55.4 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) + transitivePeerDependencies: + - '@typescript-eslint/types' - svelte-writable-derived@3.1.1(svelte@5.55.4): + svelte-writable-derived@3.1.1(svelte@5.55.7(@typescript-eslint/types@8.59.3)): dependencies: - svelte: 5.55.4 + svelte: 5.55.7(@typescript-eslint/types@8.59.3) - svelte@5.55.4: + svelte@5.55.7(@typescript-eslint/types@8.59.3): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/trusted-types': 2.0.7 acorn: 8.16.0 aria-query: 5.3.1 axobject-query: 4.1.0 clsx: 2.1.1 - devalue: 5.7.1 + devalue: 5.8.1 esm-env: 1.2.2 - esrap: 2.2.4 + esrap: 2.2.8(@typescript-eslint/types@8.59.3) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 zimmerframe: 1.1.4 + transitivePeerDependencies: + - '@typescript-eslint/types' + + tagged-tag@1.0.0: {} text-table@0.2.0: {} + tiny-invariant@1.3.3: {} + tinybench@2.9.0: {} tinyexec@1.0.4: {} - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - tinyglobby@0.2.16: dependencies: fdir: 6.5.0(picomatch@4.0.4) @@ -7080,14 +7778,28 @@ snapshots: tinyqueue@3.0.0: {} + tinyrainbow@2.0.0: {} + tinyrainbow@3.1.0: {} + tinyspy@4.0.4: {} + + tldts-core@7.0.30: {} + + tldts@7.0.30: + dependencies: + tldts-core: 7.0.30 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 totalist@3.0.1: {} + tough-cookie@6.0.1: + dependencies: + tldts: 7.0.30 + tr46@0.0.3: {} trough@2.2.0: {} @@ -7096,6 +7808,8 @@ snapshots: dependencies: typescript: 5.9.3 + ts-dedent@2.2.0: {} + tslib@2.8.1: {} tsx@4.21.0: @@ -7111,13 +7825,17 @@ snapshots: type-fest@4.41.0: {} - typescript-eslint@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3): + type-fest@5.6.0: dependencies: - '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) - eslint: 10.2.1(jiti@2.6.1) + tagged-tag: 1.0.0 + + typescript-eslint@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.3.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -7231,6 +7949,8 @@ snapshots: picomatch: 4.0.4 webpack-virtual-modules: 0.6.2 + until-async@3.0.2: {} + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: browserslist: 4.28.2 @@ -7243,11 +7963,13 @@ snapshots: urlpattern-polyfill@10.1.0: {} - util-deprecate@1.0.2: {} + use-sync-external-store@1.6.0(react@19.2.6): + dependencies: + react: 19.2.6 - uuid@10.0.0: {} + util-deprecate@1.0.2: {} - uuid@13.0.0: {} + uuid@14.0.0: {} vfile-message@2.0.4: dependencies: @@ -7284,41 +8006,42 @@ snapshots: transitivePeerDependencies: - rollup - vite-plugin-lucide-preprocess@1.4.8(rollup@4.59.0)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): + vite-plugin-lucide-preprocess@1.4.10(rolldown@1.0.0-rc.17)(rollup@4.59.0)(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)): dependencies: magic-string: 0.30.21 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) optionalDependencies: + rolldown: 1.0.0-rc.17 rollup: 4.59.0 - vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3): + vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.8 - rolldown: 1.0.0-rc.15 - tinyglobby: 0.2.15 + postcss: 8.5.10 + rolldown: 1.0.0-rc.17 + tinyglobby: 0.2.16 optionalDependencies: '@types/node': 24.12.2 esbuild: 0.27.7 fsevents: 2.3.3 - jiti: 2.6.1 + jiti: 2.7.0 tsx: 4.21.0 - yaml: 2.8.3 + yaml: 2.9.0 - vitefu@1.1.3(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): + vitefu@1.1.3(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)): optionalDependencies: - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) - vitest@4.1.4(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(msw@2.14.6(@types/node@24.12.2)(typescript@5.9.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)): dependencies: - '@vitest/expect': 4.1.4 - '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/pretty-format': 4.1.4 - '@vitest/runner': 4.1.4 - '@vitest/snapshot': 4.1.4 - '@vitest/spy': 4.1.4 - '@vitest/utils': 4.1.4 + '@vitest/expect': 4.1.5 + '@vitest/mocker': 4.1.5(msw@2.14.6(@types/node@24.12.2)(typescript@5.9.3))(vite@8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.5 + '@vitest/runner': 4.1.5 + '@vitest/snapshot': 4.1.5 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 @@ -7328,9 +8051,9 @@ snapshots: std-env: 4.0.0 tinybench: 2.9.0 tinyexec: 1.0.4 - tinyglobby: 0.2.15 + tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.8(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.10(@types/node@24.12.2)(esbuild@0.27.7)(jiti@2.7.0)(tsx@4.21.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 @@ -7366,17 +8089,37 @@ snapshots: word-wrap@1.2.5: {} - wrap-ansi@9.0.2: + wrap-ansi@7.0.0: dependencies: - ansi-styles: 6.2.3 - string-width: 7.2.0 - strip-ansi: 7.2.0 + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + ws@8.20.1: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + + y18n@5.0.8: {} yallist@3.1.1: {} yaml@1.10.3: {} - yaml@2.8.3: {} + yaml@2.9.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 yocto-queue@0.1.0: {} diff --git a/src/app.d.ts b/src/app.d.ts index 10f57ab08..57c1cf630 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -14,6 +14,10 @@ declare global { } } + interface Response { + json(): Promise // Override "any" + } + interface Twttr { ready: (callback: () => void) => void load: (element: HTMLElement) => void @@ -23,6 +27,7 @@ declare global { twttr?: Twttr selectBanners(): void applyTheme(): void + dataLayer?: unknown[] } declare module '*.md' { diff --git a/src/assets/images/13-may-2024-parliament-square-1-.jpg b/src/assets/images/13-may-2024-parliament-square-1-.jpg new file mode 100644 index 000000000..58d0ddf7c Binary files /dev/null and b/src/assets/images/13-may-2024-parliament-square-1-.jpg differ diff --git a/src/assets/images/13-may-2024-parliament-square-cropped.jpg b/src/assets/images/13-may-2024-parliament-square-cropped.jpg new file mode 100644 index 000000000..b0bd42471 Binary files /dev/null and b/src/assets/images/13-may-2024-parliament-square-cropped.jpg differ diff --git a/src/assets/images/australia/20250900_KambahSpringSustainabilityFairXanderPeterLaura.jpg b/src/assets/images/australia/20250900_KambahSpringSustainabilityFairXanderPeterLaura.jpg new file mode 100644 index 000000000..bd0ab94e9 Binary files /dev/null and b/src/assets/images/australia/20250900_KambahSpringSustainabilityFairXanderPeterLaura.jpg differ diff --git a/src/assets/images/australia/20250921_KambahSpringSustainabilityFairXanderPeterLaura.jpg b/src/assets/images/australia/20250921_KambahSpringSustainabilityFairXanderPeterLaura.jpg new file mode 100644 index 000000000..c77f9bc3f Binary files /dev/null and b/src/assets/images/australia/20250921_KambahSpringSustainabilityFairXanderPeterLaura.jpg differ diff --git a/src/assets/images/australia/20251000_PeterBadBotsEventNationalArchives.jpg b/src/assets/images/australia/20251000_PeterBadBotsEventNationalArchives.jpg new file mode 100644 index 000000000..e3d694c78 Binary files /dev/null and b/src/assets/images/australia/20251000_PeterBadBotsEventNationalArchives.jpg differ diff --git a/src/assets/images/australia/20251000_PhotoPetition_AussiesBordered.jpg b/src/assets/images/australia/20251000_PhotoPetition_AussiesBordered.jpg new file mode 100644 index 000000000..4d6a4be27 Binary files /dev/null and b/src/assets/images/australia/20251000_PhotoPetition_AussiesBordered.jpg differ diff --git a/src/assets/images/australia/20251003_CarMagnetBrakes.png b/src/assets/images/australia/20251003_CarMagnetBrakes.png new file mode 100644 index 000000000..9c5b7ca26 Binary files /dev/null and b/src/assets/images/australia/20251003_CarMagnetBrakes.png differ diff --git a/src/assets/images/australia/20251003_CarMagnetRace.webp b/src/assets/images/australia/20251003_CarMagnetRace.webp new file mode 100644 index 000000000..29c385358 Binary files /dev/null and b/src/assets/images/australia/20251003_CarMagnetRace.webp differ diff --git a/src/assets/images/australia/20251005_PeterBadBotsEventNationalArchives.jpg b/src/assets/images/australia/20251005_PeterBadBotsEventNationalArchives.jpg new file mode 100644 index 000000000..e3d694c78 Binary files /dev/null and b/src/assets/images/australia/20251005_PeterBadBotsEventNationalArchives.jpg differ diff --git a/src/assets/images/australia/20251007_LauraNuttallMLA_PeterCainMLA_David_IABIED_2.jpg b/src/assets/images/australia/20251007_LauraNuttallMLA_PeterCainMLA_David_IABIED_2.jpg new file mode 100644 index 000000000..88b1ca500 Binary files /dev/null and b/src/assets/images/australia/20251007_LauraNuttallMLA_PeterCainMLA_David_IABIED_2.jpg differ diff --git a/src/assets/images/australia/20251027_PauseAIAusIncorporated.png b/src/assets/images/australia/20251027_PauseAIAusIncorporated.png new file mode 100644 index 000000000..a0b15c138 Binary files /dev/null and b/src/assets/images/australia/20251027_PauseAIAusIncorporated.png differ diff --git a/src/assets/images/australia/20251101_CogsKambahOpenDayStallFront.jpg b/src/assets/images/australia/20251101_CogsKambahOpenDayStallFront.jpg new file mode 100644 index 000000000..32dec1863 Binary files /dev/null and b/src/assets/images/australia/20251101_CogsKambahOpenDayStallFront.jpg differ diff --git a/src/assets/images/australia/20251101_CogsKambahOpenDayStallTop.jpg b/src/assets/images/australia/20251101_CogsKambahOpenDayStallTop.jpg new file mode 100644 index 000000000..1cae5b840 Binary files /dev/null and b/src/assets/images/australia/20251101_CogsKambahOpenDayStallTop.jpg differ diff --git a/src/assets/images/australia/20251128-1659_EAGxStallMichaelSetup.jpg b/src/assets/images/australia/20251128-1659_EAGxStallMichaelSetup.jpg index aae0f1f42..6a14251c3 100644 Binary files a/src/assets/images/australia/20251128-1659_EAGxStallMichaelSetup.jpg and b/src/assets/images/australia/20251128-1659_EAGxStallMichaelSetup.jpg differ diff --git a/src/assets/images/australia/20260210_ACTWorkshopPeter.jpg b/src/assets/images/australia/20260210_ACTWorkshopPeter.jpg new file mode 100644 index 000000000..c4e3445cd Binary files /dev/null and b/src/assets/images/australia/20260210_ACTWorkshopPeter.jpg differ diff --git a/src/assets/images/australia/20260225_MELB_MarkAtDGRPresentation.jpg b/src/assets/images/australia/20260225_MELB_MarkAtDGRPresentation.jpg index 938492b82..23b3606ed 100644 Binary files a/src/assets/images/australia/20260225_MELB_MarkAtDGRPresentation.jpg and b/src/assets/images/australia/20260225_MELB_MarkAtDGRPresentation.jpg differ diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 3c355db57..71474d6db 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -18,7 +18,7 @@ if ( import { type Handle, type HandleServerError } from '@sveltejs/kit' import { env } from '$env/dynamic/public' import { paraglideMiddleware } from '$lib/paraglide/server.js' -import { SENTRY_RELEASE, isIgnored404 } from '$lib/sentry' +import { SENTRY_RELEASE } from '$lib/sentry' let Sentry: typeof import('@sentry/deno') | undefined @@ -54,7 +54,7 @@ export { handle } export const handleError: HandleServerError = ({ error, event, status, message }) => { console.error(error) - const isIgnored = status === 404 && isIgnored404(event.url.pathname) + const isIgnored = status === 404 if (Sentry && !isIgnored) { Sentry.captureException(error, { extra: { diff --git a/src/lib/airtable.ts b/src/lib/airtable.ts index 4beef0fe8..cbc262c8a 100644 --- a/src/lib/airtable.ts +++ b/src/lib/airtable.ts @@ -7,14 +7,17 @@ const getWriteApiKey = () => env.AIRTABLE_WRITE_API_KEY || env.AIRTABLE_API_KEY type QueryParams = Parameters['select']>[0] -const AIRTABLE_URL_REGEX = - /^https:\/\/api\.airtable\.com\/v0\/(?(\w|\d)+)\/(?(\w|\d)+)\/?$/ +const AIRTABLE_URL_REGEX = /^https:\/\/api\.airtable\.com\/v0\/(?\w+)\/(?\w+)\/?$/ export type AirtableRecord = { id: string fields: T } +export type AirtableListResponse = { + records: AirtableRecord[] +} + /** * Extracts base ID and table ID from an Airtable URL * @param url The Airtable API URL diff --git a/src/lib/clients/luma/client.ts b/src/lib/clients/luma/client.ts index 0d75d13b0..156b6f731 100644 --- a/src/lib/clients/luma/client.ts +++ b/src/lib/clients/luma/client.ts @@ -1,4 +1,5 @@ import axios from 'axios' +import axiosRetry from 'axios-retry' import snakecaseKeys from 'snakecase-keys' const BASE_URL = 'https://api.lu.ma/' @@ -7,8 +8,16 @@ const client = axios.create({ baseURL: BASE_URL }) +axiosRetry(client, { + retries: 3, + retryDelay: (retryCount, error) => axiosRetry.exponentialDelay(retryCount, error), + retryCondition: (error) => { + return axiosRetry.isNetworkOrIdempotentRequestError(error) || error.response?.status === 429 + } +}) + client.interceptors.request.use((request) => { - request.params = snakecaseKeys(request.params) + request.params = snakecaseKeys(request.params as Record) return request }) diff --git a/src/lib/components/Banner.svelte b/src/lib/components/Banner.svelte index 7041f85b3..63e56cba1 100644 --- a/src/lib/components/Banner.svelte +++ b/src/lib/components/Banner.svelte @@ -5,6 +5,7 @@ import { deLocalizeHref } from '$lib/paraglide/runtime' import { setItem } from '$lib/localStorage' import LinkWithoutIcon from '$lib/components/LinkWithoutIcon.svelte' + import { onMount } from 'svelte' export let type: 'main' | 'campaign' = 'main' export let id: string | null = null @@ -12,6 +13,14 @@ export let contrast = false let dismissed = false + let bannerEl: HTMLDivElement + + function pushGtmEvent(eventObj: Record) { + if (typeof window !== 'undefined') { + window.dataLayer = window.dataLayer || [] + window.dataLayer.push(eventObj) + } + } function close() { dismissed = true @@ -19,6 +28,24 @@ const prefix = type === 'campaign' ? 'campaign_banner' : 'banner' setItem(`${prefix}_${id}_hidden`, 'true') } + pushGtmEvent({ + event: 'banner_dismiss', + banner_id: id, + banner_type: type + }) + } + + function handleBannerClick(event: MouseEvent) { + const target = event.target as HTMLElement + const link = target.closest('a') + if (link) { + pushGtmEvent({ + event: 'banner_click', + banner_id: id, + banner_type: type, + link_url: link.href + }) + } } // Hide on navigation to the target/href page @@ -28,6 +55,30 @@ $: isCampaign = type === 'campaign' $: dataIdAttr = isCampaign ? 'data-campaign-banner-id' : 'data-banner-id' + + onMount(() => { + if (dismissed) return + + const observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + pushGtmEvent({ + event: 'banner_show', + banner_id: id, + banner_type: type + }) + observer.disconnect() + } + }) + }, + { threshold: 0.1 } + ) + + if (bannerEl) observer.observe(bannerEl) + + return () => observer.disconnect() + }) @@ -48,6 +99,8 @@ {...{ [dataIdAttr]: id }} data-pagefind-ignore transition:fade={{ duration: 200 }} + bind:this={bannerEl} + on:click={handleBannerClick} > {#if isCampaign}
diff --git a/src/lib/components/Hero.svelte b/src/lib/components/Hero.svelte index e17c5e392..70c856bb2 100644 --- a/src/lib/components/Hero.svelte +++ b/src/lib/components/Hero.svelte @@ -1,177 +1,288 @@
- + {#each Object.entries(homeHeroMobile.sources) as [format, srcset]} {/each} {#each Object.entries(homeHeroDesktop.sources) as [format, srcset]} {/each} - + -
-

Don't let AI companies
gamble away our future

-
- Get involved - Donate + +
+
+

Join the movement to Pause AI.

+
+ Get involved + Donate +
+
+
+ +
+
+ + + Active campaign + +

AI is not just coming for your job.

+

{campaign.description}

+
+ {campaign.primary.label} + {#if campaign.secondary} + {campaign.secondary.label} + {/if} +
diff --git a/src/routes/press/PressCoveragePanel.svelte b/src/lib/components/PressCoveragePanel.svelte similarity index 85% rename from src/routes/press/PressCoveragePanel.svelte rename to src/lib/components/PressCoveragePanel.svelte index 53f255167..a29a66f43 100644 --- a/src/routes/press/PressCoveragePanel.svelte +++ b/src/lib/components/PressCoveragePanel.svelte @@ -1,15 +1,14 @@
- {#if coverage.length === 0} + {#if loading} +
+ {#each Array(6) as _} + + {/each} +
+ {:else if coverage.length === 0}

No press coverage found.

{:else}
@@ -135,9 +140,4 @@ grid-template-columns: 1fr; } } - - /* Optional: Apply an explicit global margin style on the Press page for the branding section */ - :global(.logo-materials) { - margin-top: 4rem; - } diff --git a/src/lib/components/PressCoveragePanelLoader.svelte b/src/lib/components/PressCoveragePanelLoader.svelte new file mode 100644 index 000000000..2b01b3f60 --- /dev/null +++ b/src/lib/components/PressCoveragePanelLoader.svelte @@ -0,0 +1,24 @@ + + + diff --git a/src/lib/components/UKMPEmailForm.svelte b/src/lib/components/UKMPEmailForm.svelte index 1382de0ba..233a63eb3 100644 --- a/src/lib/components/UKMPEmailForm.svelte +++ b/src/lib/components/UKMPEmailForm.svelte @@ -15,14 +15,14 @@ let senderName = userName let senderEmail = '' - let subject = `Request to co-sign letter on Google's breach of AI safety pledges` + let subject = `Request to co-sign letter on AI liability` let message = `Dear ${mp.salutation}, -Would you be willing to co-sign an open letter urging Google DeepMind to honour the AI Safety Summit pledges? +Would you be willing to sign this open letter supporting legislation to hold AI companies accountable when their models cause severe harm to our critical infrastructure? -I’m a resident of ${mp.constituency} and I wanted to share with you an open letter from **PauseAI**, a grassroots network focused on preventing the catastrophic risks of AI. Last May at the AI Safety Summit, Google publicly committed to transparency in their safety testing of new AI models. Yet they now refuse to say which third parties are involved in testing their latest model - **a clear breach of their commitment**. +I’m a resident of ${mp.constituency} and a supporter of **PauseAI**, a grassroots network focused on preventing the catastrophic risks of AI. I am very concerned that AI development is spiralling out of control without any protection for the public. -AI will be the most powerful technology humanity ever creates. We must set a clear precedent now that reckless disregard for safety standards will not be tolerated. +There now exist models which can autonomously hack into almost any computer system. Yet under the existing framework, it is doubtful whether AI companies can be held liable for even the most severe and foreseeable harms, including cases in which their models were clearly decisive in enabling the harm. Please help change that, before we face the next generation of AI models. Next steps - 30-min call. Let me know what time would work for you. @@ -208,8 +208,7 @@ ${userPostcode.toUpperCase()}` @@ -256,33 +255,33 @@ ${userPostcode.toUpperCase()}`

Attachments:

PauseAI Open Letter thumbnail
- PauseAI Open Letter - to Google DeepMind + AI Liability + Open Letter
Background document thumbnail
- Background Information - on Google's Safety Violations + AI Liability + Policy Briefing
diff --git a/src/lib/components/UKMPLookup.svelte b/src/lib/components/UKMPLookup.svelte index 2e0c3e1f7..96ff0ddce 100644 --- a/src/lib/components/UKMPLookup.svelte +++ b/src/lib/components/UKMPLookup.svelte @@ -168,7 +168,7 @@ {#if contactStatus?.responded}
ℹ️ - Already contacted: This MP has already contacted us about the letter. + Already responded! This MP has already contacted us about the letter.
{:else} @@ -299,12 +299,8 @@ display: flex; align-items: center; gap: 0.75rem; - border: 2px solid; - } - - .contact-status:not(.signed):not(.declined) { + border: 2px solid #63b3ed; background-color: #ebf8ff; - border-color: #63b3ed; color: #2a4365; } diff --git a/src/lib/press-coverage.remote.ts b/src/lib/press-coverage.remote.ts new file mode 100644 index 000000000..4812adf5e --- /dev/null +++ b/src/lib/press-coverage.remote.ts @@ -0,0 +1,6 @@ +import { prerender } from '$app/server' +import { fetchPressCoverage, type PressCoverage } from './server/notion-press' + +export type { PressCoverage } + +export const getPressCoverage = prerender(() => fetchPressCoverage()) diff --git a/src/lib/sentry.ts b/src/lib/sentry.ts index 08d33e215..cbd6ac89d 100644 --- a/src/lib/sentry.ts +++ b/src/lib/sentry.ts @@ -1,59 +1,2 @@ // eslint-disable-next-line no-restricted-syntax export const SENTRY_RELEASE = import.meta.env.SENTRY_RELEASE as string | undefined - -import { minimatch } from 'minimatch' - -const LEGITIMATE_PATHS: string[] = [ - '/.well-known/assetlinks.json', - '/.well-known/openpgpkey/policy', - '/.well-known/traffic-advice', - '/apple-touch-icon-precomposed.png', - '/apple-touch-icon.png', - '/favicon.ico', - '/sitemap-index.xml' -] - -const BOT_PATHS = [ - '**/*.php', - '**/*.php7', - '**/*.php8', - '/account/**', - '/accounts/**', - '/app/**', - '/auth', - '/auth/**', - '/authentication', - '/cart.json', - '/create-account', - '/customer/**', - '/gtm.js', - '/log-in', - '/login', - '/m/**', - '/member/**', - '/members/**', - '/mobile/**', - '/my-account', - '/myaccount', - '/new-account', - '/profile/**', - '/register', - '/registration', - '/session/**', - '/sign_in', - '/sign_up', - '/sign-in', - '/sign-up', - '/signin', - '/signup', - '/tiny', - '/user/**', - '/users/**' -] - -/** Returns `true` if a 404 at the given path should be silently ignored. */ -export function isIgnored404(path: string): boolean { - return LEGITIMATE_PATHS.concat(BOT_PATHS).some((pattern) => - minimatch(path, pattern, { nocase: true }) - ) -} diff --git a/src/routes/press/notion.server.ts b/src/lib/server/notion-press.ts similarity index 100% rename from src/routes/press/notion.server.ts rename to src/lib/server/notion-press.ts diff --git a/src/lib/server/uk-mp-contact-status.ts b/src/lib/server/uk-mp-contact-status.ts index f0566094c..5ff14a556 100644 --- a/src/lib/server/uk-mp-contact-status.ts +++ b/src/lib/server/uk-mp-contact-status.ts @@ -1,4 +1,5 @@ import { AIRTABLE_API_KEY } from '$env/static/private' +import type { AirtableListResponse } from '$lib/airtable' import { validMPEmails } from './uk-postcode-to-mp' const MP_CONTACT_BASE_ID = 'appBInVvIm6opJ1Ob' @@ -8,6 +9,10 @@ export interface UKMPContactStatus { responded: boolean } +type UKParliamentarianFields = { + 'Responded Liability Letter'?: boolean | null +} + /** * Check if an MP has been contacted and their response status * Uses filterByFormula to search by primary field (email) @@ -49,8 +54,7 @@ export async function ukCheckMPContactHistory(mpEmail: string): Promise if (!data.records || data.records.length === 0) { console.error( `MP not found in Airtable: ${mpEmail}. All MPs should be pre-populated in the table.` @@ -58,7 +62,7 @@ export async function ukCheckMPContactHistory(mpEmail: string): Promise + diff --git a/src/posts/ai-concerns.md b/src/posts/ai-concerns.md index 1d058d229..09a8c6843 100644 --- a/src/posts/ai-concerns.md +++ b/src/posts/ai-concerns.md @@ -1,5 +1,5 @@ --- -title: What are your concerns about AI development? +title: 'We want to hear from you: What are your concerns about AI development?' description: Share your perspective on the risks of advanced AI. --- diff --git a/src/posts/ai-not-just-coming-for-your-job.md b/src/posts/ai-not-just-coming-for-your-job.md new file mode 100644 index 000000000..31e837420 --- /dev/null +++ b/src/posts/ai-not-just-coming-for-your-job.md @@ -0,0 +1,55 @@ +--- +title: AI is not just coming for your job +description: AI labs are explicitly racing to automate every job on the planet + and that is only the tip of the iceberg. +date: 2026-05-11 +--- + +**AI labs are explicitly racing to automate every job on the planet, _including yours_. And job loss is only the tip of the iceberg.** + +## AI is coming for your job + +This is not speculation. It is the stated goal. + +OpenAI defines its mission as building "highly autonomous systems that outperform humans at most economically valuable work." Anthropic, Google DeepMind, Meta and xAI are racing toward the same target and their leaders say they are only a few years away. They are pouring hundreds of billions of dollars into systems designed to do what you do but faster and more cheaply. + +Lawyers, designers, radiologists, software engineers, teachers, accountants, translators, customer service workers, screenwriters, drivers, analysts. Every desk job, every creative job, every job that requires a screen is on the list. The labs are not hiding this. They are advertising it to investors. + +If they succeed, the question is not whether your job survives. The question is what a society looks like when the people who used to do the work no longer have a seat at the table. + +## Job loss is only the tip of the iceberg + +The same race that is targeting for your job is coming for everything else too. + +The same AI systems are being deployed to decide who gets hired, who gets fired, who gets a loan, who gets a diagnosis, who gets bail and what your children are taught. Decisions that used to be made by people, with someone to call when they got it wrong, are being handed to AI systems no one fully understands and no one is accountable for. + +This is only the beginning. The AI labs are not trying to build better tools. They are trying to build systems more capable than humans in every domain, including the domain of building more powerful AI. The same researchers building these systems openly acknowledge that they do not know how to keep them aligned with human values or under human control. Many of them, including Nobel laureates and the most-cited AI scientists alive, have warned that this trajectory could end in human extinction. + +This is not a fringe view. It is the position of the people building the technology. They are asking the world to trust that they will figure out safety on the way. We would not accept this from any other industry. We should not accept it now. + +## What this campaign is about + +We are calling for a pause on the development of the most dangerous AI systems until their builders can prove, to independent evaluators, that they are safe. + +No company should be allowed to deploy systems that reshape the economy, the information environment, and the balance of power without showing their work. The burden of proof belongs with the people doing the building, not with the rest of us. + +Over the coming months, PauseAI chapters around the world are: + +- Collecting stories from workers, students, parents, patients and creatives about how AI is already changing their lives, and what they fear is coming next +- Building coalitions with unions, student groups, parent associations, healthcare workers and creative industries who are seeing the same pattern from different angles +- Meeting with elected officials and decision makers to demand binding limits on frontier AI development, backed by international coordination +- Preparing for a global day of action this summer to put public pressure on governments to act before it is too late + +This is not a campaign to save any one job. It is a campaign to make sure humans stay in charge of their future. + +## What you can do + +The labs will not slow down on their own. Public pressure is what changes that, and it starts with people like you taking one concrete step. + +- **Share your story :** Tell us how AI is affecting your work, your studies, your healthcare, your family, or what you fear is coming next. Your story is one of the most powerful tools we have to make decision makers listen. [Share your story](https://pauseai.info/ai-concerns) + - Optional: record a short video of your concern and share it on social media. + +- **Talk with friends and family:** Most people sense something is wrong but do not have the words for it. +- **Write to your elected official:** Politicians act when they hear from their constituents. It takes two minutes with our email builder. [pauseai.info/email-builder](http://pauseai.info/email-builder) +- **Connect to your local chapter:** Find the people organising near you and join their next action. [pauseai.info/communities](http://pauseai.info/communities) +- **Join PauseAI:** Become part of the global movement working to keep humans in charge of the future. [pauseai.info/join](http://pauseai.info/join) diff --git a/src/posts/australia-progress.md b/src/posts/australia-progress.md index af9cc8f77..dcb70ab97 100644 --- a/src/posts/australia-progress.md +++ b/src/posts/australia-progress.md @@ -4,37 +4,38 @@ slug: australia-progress description: What the Australian chapter of PauseAI has been doing and needs help with --- -### 2026 April - help needed🙏 +### 2026 April - Upcoming - - Join our [meetup](https://luma.com/PauseAIAustralia?e=evt-G4AIOYYBHfJUYhc) where we kickoff our next campaign! We also need help setting up Aussie designs for merch. - Help out with [evergreen tasks](/australia) - - Tell us [what you did](mailto:australia@pauseai.info?subject=Aussie%20Did%20a%20Thing) so we can add it, or [what you have cooking](mailto:australia@pauseai.info?subject=Things%20Cooking) so we can support you! -- Ashley takee on volunteer role of Digital Marketing + - Tell us [what you did](mailto:australia@pauseai.info?subject=Aussie%20Did%20a%20Thing), or [what you have cooking](mailto:australia@pauseai.info?subject=Things%20Cooking) so we can support you! +- Released newsletter on how you get your MPs to sign Superintelligence Statement. +- Emailed all Liberal MPs and Senators advising them on x-risk. +- We attended the Canberra Innovation Network's book launch event. Chief Minister Andrew Barr raised the importance of managing risk when deploying AI in government. Afterwards we spoke to the book author John Howard, who agreed that guardrails are essential when deploying AI.
-![20260403_AshleyVolunteerJoining](/australia/20260403_AshleyVolunteerJoining.jpg) +![20260408-1629_CBRIN_PeterWithJohnHoward.jpg](/australia/20260408-1629_CBRIN_PeterWithJohnHoward.jpg)
-- Released newsletter on getting your MPs to sign Superintelligence Statement. -- Emailed all Liberal MPs and Senators advising them on x-risk. -- We attended the Canberra Innovation Network's book launch event. Chief Minister Andrew Barr raised the importance of managing risk when deploying AI in government. Afterwards we spoke to the book author John Howard, who agreed that guardrails are essential when deploying AI. +- Supported Australians For AI Safety in their open letter "[Activate existing biosecurity powers to address AI-enabled risks](https://www.australiansforaisafety.com.au/letters/ai-bio-gene-synth-screening)". Consider signing! + +- Ashley takes on volunteer role of Digital Marketing
-![20260408-1629_CBRIN_PeterWithJohnHoward.jpg](/australia/20260408-1629_CBRIN_PeterWithJohnHoward.jpg) +![20260403_AshleyVolunteerJoining](/australia/20260403_AshleyVolunteerJoining.jpg)
### 2026 March -- Reached out to 3 prominent Aussie figures thanking them for their sensible treatment of AI risk +- 📧8 AI decisionmaker emails, meetings with 👥3 of them, 📅2 events with 25 attendees. - Contacted 3 politicians about AI existential risk - can share more in the next few months! - Reached out to COSBOA and Canberra Business Chamber about Australians' trust in AI - Took part in CAPaD's Community Assembly in Canberra. @@ -74,6 +75,7 @@ description: What the Australian chapter of PauseAI has been doing and needs hel ### 2026 February +- 📧76 AI decisionmaker emails, meetings with 👥2 of them, 📅3 events with 17 attendees. - 📢**Campaigned for Australia to prioritise safety at India's AI Impact Summit** - 2 vids [calling to action](https://www.youtube.com/shorts/gGbAGQ8vVcY) and [suggesting the perfect Valentine's](https://www.youtube.com/watch?v=OQytHYG7jH8) - 70 emails sent to policymakers, and [70 signatures on our petition](https://www.change.org/p/ai-summits-need-to-take-safety-seriously-again), including to Minister Ayres and Assistant Minister Charlton. @@ -127,19 +129,29 @@ description: What the Australian chapter of PauseAI has been doing and needs hel ### 2026 January +- 📧1 AI decisionmaker email, meeting with 👥1, 📅1 events with 10 attendees. - Met with Deborah Morris MLA about AI misalignment, deepfakes and bioweapon risks. - ⭐Milestone: 70 subscribers to our newsletter! +- ⭐Milestone: You are donating enough to cover our operating costs: insurance, web & email hosting, stall materials. We are all volunteers, so this frees us to plan more ambitious events! +- Mark rolls off as national co-director to focus on Melbourne scene, Peter steps up. -## 2025 - more coming soon! +## 2025 + +
+Show 2025 activities ### 2025 December +- 📧3 AI decisionmaker emails, 📅1 event with 11 attendees. - ✅Australian AI Safety Institute (AISI) announced! This was one of our 3 main policy goals. Two to go: international AI treaty, and AI guardrails. - ✅Emails from PauseAI Australia volunteers and a [question at a live townhall](https://youtu.be/SbqUEhJt5RU?si=CSVML0vatdW-GBEh) prompted five politicians to sign the [Future of Life Institute's Superintelligence Statement](https://www.linkedin.com/feed/update/urn:li:activity:7408047524902572032). - Minister of Industry [responds to petition EN7777](https://epetitions.aph.gov.au/api/ministerialresponse/download/EN7777), declining to commit to mandatory independent safety evaluations nor to advocate for an international pause treaty, instead pointing to voluntary measures. +- We co-signed [Urging an International AI Treaty: An Open Letter](https://aitreaty.org/). +- We made a submission to the India AI Impact Summit working group for "Safe & Trusted AI". ### 2025 November +- 📧2 AI decisionmaker emails, 📅1 event with 11 attendees. - ✅Publicly asked Senator Pocock to sign Superintelligence Statement, and [he agreed](https://youtu.be/SbqUEhJt5RU)!
@@ -150,12 +162,12 @@ description: What the Australian chapter of PauseAI has been doing and needs hel
-- 5 people from Australia participated in the PauseAI photo petition. +- 5 people from Australia participated in the PauseAI petition.
-![2025-11_PhotoPetition.jpg](/australia/2025-11_PhotoPetition.jpg) +![20251000_PhotoPetition_AussiesBordered.jpg](/australia/20251000_PhotoPetition_AussiesBordered.jpg)
@@ -175,6 +187,21 @@ description: What the Australian chapter of PauseAI has been doing and needs hel
+- Ran a stall at the Canberra Organic Growers Society open day + +
+
+ +![20251101_CogsKambahOpenDayStallFront.jpg](/australia/20251101_CogsKambahOpenDayStallFront.jpg) + +
+
+ +![20251101_CogsKambahOpenDayStallTop.jpg](/australia/20251101_CogsKambahOpenDayStallTop.jpg) + +
+
+ - Ran a stall at EAGxAustralasia
@@ -185,16 +212,72 @@ description: What the Australian chapter of PauseAI has been doing and needs hel
+- Attended the Bad Bots event at the National Archives. + +
+
+ +![20251005_PeterBadBotsEventNationalArchives.jpg](/australia/20251005_PeterBadBotsEventNationalArchives.jpg) + +
+
+ +- We discussed the Superintelligence Statement with a major news outlet and referred them to prominent Australian signatories. + ### 2025 October - ✅On 7 October 2025, PauseAI Australia held a book launch and discussion event at Smith's Alternative bookshop in Canberra to mark the release of [_If Anyone Builds It, Everyone Dies_](https://www.penguin.com.au/books/if-anyone-builds-it-everyone-dies-9781847928931). Laura Nuttall, MLA, and Peter Cain, MLA, joined the discussion and read excerpts from the book. + - Submitted the event to the National AI Centre's events calendar. NAIC declined, citing "sensational or emotive language," failure to use "plain language," and "promotional or commercial content." The [event description](https://luma.com/tw6clgd4) summarised findings from the AI Impacts 2023 survey of 2,778 published AI researchers and listed activities. We asked NAIC for specific excerpts they considered misleading, and how a free community event differs from the paid commercial workshops listed on the same calendar. After three weeks and a second followup, NAIC replied: "We are not in a position to engage in back-and-forth revisions or provide detailed feedback on individual submissions." [Full correspondence](/20251104_NAICCalendarRejection.pdf) + +
+
+ +![20251007_LauraNuttallMLA_PeterCainMLA_David_IABIED_2.jpg](/australia/20251007_LauraNuttallMLA_PeterCainMLA_David_IABIED_2.jpg) + +
+
+ - We attended online the Australian Academy of Science webinar on “[AI in science: the promise, perils and path forward – AI and our safety](https://science.org.au/news-events/events/ai-science-promise-perils-path-forward-ai-our-safety)”, publicly asking why they weren’t mentioning existential risk. +- We trialled car magnets + +
+
+ +![20251003_CarMagnetRace.webp](/australia/20251003_CarMagnetRace.webp) + +
+
+ +![20251003_CarMagnetBrakes.png](/australia/20251003_CarMagnetBrakes.png) + +
+
+ +- Making It Official💍 After months of passionate collaboration, late-night strategising, and countless volunteer dates, the four of us take the next step in our relationship: We're thrilled to announce PauseAI Australia is officially incorporated! + +
+
+ +![20251027_PauseAIAusIncorporated.png](/australia/20251027_PauseAIAusIncorporated.png) + +
+
### 2025 September - ✅[e-petition EN7777 ](https://www.aph.gov.au/e-petitions/petition/EN7777) to the Australian House of Representatives was open for 30 days and collected 168 signatures. The petition asked the House to legislate that all future frontier artificial intelligence systems must pass rigorous independent safety evaluations, and further asked the House to advocate proactively for an international treaty to pause frontier AI development until global safety mechanisms are in place. The Minister gave an official response. - In September 2025, PauseAI Australia responded to the interim report on _Harnessing Data and Digital Technology_ with [this submission](https://drive.google.com/file/d/1Ea9I3jXCZAMdGAcN2D-UMRPyE2MzGB7k/view). Volunteers also made individual submissions ([David](https://docs.google.com/document/d/1DenTOorlnqQ02PJEEdRvsceFmfvvfTXxGubozjfx-yE/edit?usp=sharing), [Peter](https://docs.google.com/document/d/1aQcC5DYq3feyWyHAPFGcEvwgrX0vXSbgMNDBEYWA61E/edit?tab=t.0#heading=h.4hsb6c6hjc5f), [Michael](https://drive.google.com/file/d/1lWdtIiLatF1DOPvdjQSaonO9dEqFCFSV/view?usp=drive_link)). +- We attended the Tech Policy Design Institute’s Consultation on their draft AI Sovereignty Framework. - We attended online the Prevention United workshop on their Youth Ambassadors Group’s brief [Navigating Artificial Intelligence for Youth Mental Health](https://nest.greenant.net/s/YAzw3wbtrzc5gwo), asking advice on how teens can deal with predicted catastrophic outcomes from AI. +- We ran a stall at the Kambah Spring Sustainability Fair, speaking to Laura Nuttall MLA (pictured) and Caitlin Tough MLA. + +
+
+ +![20250921_KambahSpringSustainabilityFairXanderPeterLaura.jpg](/australia/20250921_KambahSpringSustainabilityFairXanderPeterLaura.jpg) + +
+
### 2025 August @@ -226,6 +309,8 @@ description: What the Australian chapter of PauseAI has been doing and needs hel
+ + ## 2023 ### 2023 February diff --git a/src/posts/australia-story.md b/src/posts/australia-story.md new file mode 100644 index 000000000..75a21c16f --- /dev/null +++ b/src/posts/australia-story.md @@ -0,0 +1,13 @@ +--- +title: PauseAI Australia Story +slug: australia-story +description: share your story about AI +--- + + + +PauseAI Australia is collaborating with 14 other PauseAI chapters to share how people are experiencing AI. Please share your story. + + diff --git a/src/posts/australia.md b/src/posts/australia.md index b5f07d2dc..8e43298bd 100644 --- a/src/posts/australia.md +++ b/src/posts/australia.md @@ -4,11 +4,29 @@ slug: australia description: the Australian chapter of PauseAI --- - +
+ +
Within a decade, artificial intelligence could become smarter than humans at almost everything — and able to improve itself without human control. If this happens without strong global safeguards, the consequences could be catastrophic. -Australia should help stop that from happening. [Learn how](/australia-detail). [See how we're going](/australia-progress)! +Australia should help stop that from happening. + +
+
+Get more details +
+ +
+See our progress +
+
## Get involved @@ -43,4 +61,12 @@ Volunteers across Australia work to: PauseAI Australia Ltd is an incorporated not-for-profit. -[Learn more about our campaigns in Australia](/australia-detail), and [see what we're doing month to month](/australia-progress)! +
+
+Get more details +
+ +
+See our progress +
+
diff --git a/src/posts/donate.md b/src/posts/donate.md index 0712c585d..a5aff12da 100644 --- a/src/posts/donate.md +++ b/src/posts/donate.md @@ -3,6 +3,8 @@ title: Donate to PauseAI description: With your financial support we can have a bigger impact. --- + + diff --git a/src/posts/faq.md b/src/posts/faq.md index ce4bf1a65..a76778117 100644 --- a/src/posts/faq.md +++ b/src/posts/faq.md @@ -3,6 +3,8 @@ title: FAQ description: Frequently asked questions about PauseAI and the risks of superintelligent AI. --- + + diff --git a/src/posts/funding.md b/src/posts/funding.md index 160c15851..c50f17595 100644 --- a/src/posts/funding.md +++ b/src/posts/funding.md @@ -3,6 +3,8 @@ title: PauseAI Funding & Donors description: A list of our largest donors. --- + + diff --git a/src/posts/if-anyone-builds-it-campaign.md b/src/posts/if-anyone-builds-it-campaign.md index f840557e1..0bf04175f 100644 --- a/src/posts/if-anyone-builds-it-campaign.md +++ b/src/posts/if-anyone-builds-it-campaign.md @@ -5,6 +5,8 @@ description: PauseAI events in support of If Anyone Builds It, Everyone Dies image: /iabied-event.jpg --- + + The recently published New York Times Bestseller [_If Anyone Builds It, Everyone Dies_](https://ifanyonebuildsit.com/) warns of the threat of human extinction if the race to build superintelligent AI is allowed to continue. At PauseAI, we're organising a coordinated international response to the book by hosting events across 4 countries. These book readings will provide a space for people to learn more about the book's warning, and to begin to use their voice to support an international treaty pausing frontier AI development. diff --git a/src/posts/join.md b/src/posts/join.md index 42e226ead..75ac051e2 100644 --- a/src/posts/join.md +++ b/src/posts/join.md @@ -3,6 +3,8 @@ title: Join PauseAI description: Sign up to join the PauseAI movement --- + + diff --git a/src/posts/press.md b/src/posts/press.md new file mode 100644 index 000000000..e5e715566 --- /dev/null +++ b/src/posts/press.md @@ -0,0 +1,35 @@ +--- +title: Press Coverage & Materials +description: Media coverage of PauseAI protests and our logo/brand materials. +date: 2024-05-15 +--- + + + +

+ If you want to contact us, use our Contact form. +

+ +

Media Coverage

+ + + +## Logo, materials + +Our logo and other material can be found in [this Google Drive folder](https://drive.google.com/drive/folders/1bQ_MZ8giK-Mee4ABkO0BgcFInaXruNpa?usp=sharing). + +If you want to create PauseAI-related material yourself, you can use our brand color _#FF9416_ and the fonts _Saira Condensed_ (700), _Montserrat Black_, and _Roboto Slab_ (300, 700). + + diff --git a/src/posts/roadmap.md b/src/posts/roadmap.md index 6cad58f4a..9c5d7ed53 100644 --- a/src/posts/roadmap.md +++ b/src/posts/roadmap.md @@ -5,56 +5,83 @@ description: What are we planning to do and what could we do with more funding? ## Current situation -- See our [funding page](/funding) for up-to-date info on how much we've received and from whom. -- We have two paid FTEs: an Organizing Director and a Communications Director. All others are volunteers. +PauseAI Global is the international coordinating body of the PauseAI federation. We support and coordinate national chapters across 15+ countries, train organisers, run global campaigns, and build the infrastructure that turns growing public concern about AI into organised political pressure. + +As of April 2026, we have a six-person team: + +- **Maxime Fournes** (CEO) +- **Irina Tavera** (Organising Director) +- **Jonathan Moody** (Communications Director) +- Country organisers for the UK and France + +The France role has now transitioned to PauseAI France's own payroll, and the UK roles transition to PauseAI UK at the end of June 2026. + +See our [funding page](/funding) for up-to-date info on how much we've received and from whom. + +## Theory of change in brief + +Good policy proposals for AI governance already exist. Public concern about AI is surging. The missing link is an organised political constituency that converts concern into political action. PauseAI Global builds that constituency. We complement policy organisations who design specific proposals by building the movement that demands their adoption. + +A pause on frontier AI development requires multi-jurisdiction simultaneous pressure: coordinated domestic mobilisation in several major countries at once. A federation of national chapters running coordinated campaigns is the structure designed to produce exactly that. For more detail, see our [Theory of Change](/theory-of-change). ## Funding Scenarios -### Scenario 0: No additional funding +The scenarios below describe what PauseAI Global can do at different funding levels over a 12-month period. They reflect a calibration exercise in early 2026, mapping our theory of change to the resources actually required to execute it. + +### Scenario 0: Minimum (€300k) + +Sustains the core team and a minimal level of programme activity. We maintain the executive team (CEO, Organising Director, Communications Director) and keep the federation infrastructure running, but cannot complete the team needed to scale operations. Programme activity is limited to two PauseCon conference, modest chapter support, and two coordinated global campaigns. New hiring is paused. + +This is the level at which the organisation continues to exist and function, but does not grow. + +### Scenario 1: Base (€900k) -Almost every person working on PauseAI is doing so voluntarily, so our burn rate is very low. -We have around €90k in the bank. +Completes the eight-person team that coordinates the global federation and sustains core programme activity. -- Facilitate the formation of new National and Local groups. Provide them with help, guidance, materials and funding. -- Organize protests and other events to raise awareness about the issue and grow our community. -- Organize letter writing workshops to push the national-level politicians to initialize treaty negotiations. -- Build alliances with other organizations and overlapping cause areas to amplify our impact. E.g. artists, concerned parents, climate activists, job unions, etc. -- Grow our social media presence through regular posts and engagement. -- Participate in more [podcasts and interviews](/press). -- Create more video content (focused on shorts) to reach a wider audience. -- Get (paid) help from experts in various fields (marketing, policy, AI safety, community organizing, protesting, etc.) to learn from their experience and improve our work. -- Experiment with social media ads to grow our community and learn what works. -- Reach out to politicians and influencers. -- Spend our remaining budget on PauseAI community projects through our MicroGrants program. +**New hires (in priority order):** -### Scenario 1: €200k funding +- **Operations Director**: manages finances, HR, tech, contractor relationships, compliance and reporting (currently absorbed by the CEO). +- **Development / Fundraising Director**: builds a sustainable funding pipeline so the organisation is never one grant away from closing down. +- **Regional Organiser (1)**: dedicated coordinator for a high-potential region (likely continental Europe or Asia-Pacific). +- **Policy / Strategy Director**: maintains relationships with policy partners, develops our asks, briefs politicians who need detailed proposals. +- **Regional Organiser (2)**: second regional coordinator, extending federation support. -- All of the above, plus: -- Hire **National / Regional directors** for our most impactful areas (UK, France). -- Organize more [PauseCon](https://pausecon.org/) events to train our volunteers/organizers. -- Set up an international pipeline for (video) content. Make it easier for national groups to consistently post high-quality, translated content to grow their impact. -- Increase our spending on Ads on various social media platforms. -- Increase our MicroGrants budget, allowing us to fund more community projects. +**Programme activity:** -### Scenario 2: €600k funding +- Two PauseCon conferences per year (training the next generation of organisers). +- Quarterly coordinated global campaigns across all chapters. +- Meaningful seed funding for 8+ chapters: local events, materials, protests, legal setup. +- At least two coordinated global protests. +- Sustained CEO media presence, thought leadership, press releases, video content. +- Investment in developing chapters in Asia, including China. -- All of the above, plus: -- Hire a **policy director** who will help us strategize and execute our policy goals. This person should help us educate volunteers on how to lobby effectively and help us with our policy proposals. This person needs to have international legal expertise and preferably knowledge in AI or technology policy/governance. -- Hire a **press director** who will help us get more media coverage. This person should have experience in PR and media relations. -- Drastically increased ads & MicroGrants budgets, leading to more growth and impactful community projects. +### Scenario 2: Ambitious (€3.5M) -### Scenario 3: €1.2M+ funding +Funds three capabilities the base tier cannot deliver. -- All of the above, plus: -- Have more funding available for [national](https://pauseai.info/national-groups) and local PauseAI chapters. -- Hire a PR agency to help us set up a large-scale international media campaign with a petition, advertisements. +**Sustained narrative production.** Two Content Creators, a Social Media Lead, a PR firm retainer for crisis communications and warning-shot amplification, and a Chief of Staff managing culture and onboarding. Together these enable continuous public-facing narrative on frontier AI risk rather than reactive communications. + +**Paid-media capacity (€1M PR campaigns budget).** The first paid-reach operation in PauseAI Global's history. Earned media has a ceiling: the audiences who already read those outlets. Paid campaigns reach the communities we need next: students entering an AI-disrupted labour market, workers in sectors already being automated, democracy advocates tracking AI's effects on elections. + +**Treaty-lane infrastructure.** Two Senior Public Affairs Directors embedded in priority jurisdictions (likely UK and EU), a Legal Advisor on retainer for multi-jurisdiction regulatory expertise, and Regional Organiser capacity expanded from two to five. This staffing lets us carry a coordinated policy ask across multiple governments simultaneously. + +**Programme budgets scale with staff.** PauseCons become serious international convenings with paid speakers, policymaker guests, and professional production. Chapter seed funding rises to €400k, supporting 8+ chapters substantively. Protest capacity expands to enable more coordinated cross-jurisdiction actions. + +### Scenario 3: Maximum (€8.5M) + +The maximum we estimate we could meaningfully absorb in 12 months. Funds the ambitious tier plus four additional capabilities: + +- **Chapter seeding at scale (~€1M).** Direct seed funding and operational support for ten or more new chapters in priority jurisdictions. A portfolio bet: not all ten will develop into high-performing chapters, but five or six outstanding chapters could match the trajectories of PauseAI UK, France and Germany. +- **Incubation of adjacent organisations (~€1.5M).** Funding to spin up two or three organisations the pause ecosystem currently lacks. Candidates include a dedicated elite defection capture organisation (legal cover, platforming and journalist relationships for AI company whistleblowers), a warning shot conversion media operation, and a specialised treaty-lane policy organisation. +- **Direct country-leadership funding (~€1.5M).** Dedicated funding for country-level leadership in four or five priority jurisdictions where chapters are not yet self-sustaining, allowing them to stand up without premature self-sustainment pressure. +- **Substantial paid-media capacity (~€1M additional).** Sustained public affairs advertising in priority jurisdictions, complementing earned media and creating sustained presence across the news cycle. ## Related documents - [Proposal](/proposal) +- [Theory of Change](/theory-of-change) - [Values](/values) - [Donate](/donate) -- [Legal](/legal) - [MicroGrants](/microgrants) -- [Theory of Change](/theory-of-change) - [Funding](/funding) +- [Legal](/legal) diff --git a/src/posts/theory-of-change.md b/src/posts/theory-of-change.md index fedc08658..22ba9051a 100644 --- a/src/posts/theory-of-change.md +++ b/src/posts/theory-of-change.md @@ -4,56 +4,105 @@ description: How does PauseAI expect to achieve its mission? date: 2024-02-26 --- -How does PauseAI plan to achieve its mission? +## What we want -## What do we want? +Our [proposal](/proposal) describes what we want: a global halt to frontier AI development until we know how to do it safely and under democratic control. -Our [proposal](/proposal) describes what we want: Globally halt frontier AI development **until we know how to do it safely** and **under democratic control**. +This page explains how we plan to get there. -## Why don't we have a pause yet? +## The gap we fill -The problem is not a lack of concerned experts (86% of AI researchers believe the control problem is real and important). -The problem is not a lack of public support for our proposal (by far most people [already want](/polls-and-surveys) AI to be slowed down). -However, there are some important reasons why we don't have a pause yet: +Good policy proposals for AI governance already exist. Public concern about AI is high and growing. But concern does not automatically become political action. Left unfocused, it dissipates, or gets captured by movements that don't address frontier risk. -- **Race dynamics**. - AI creates a lot of value, especially if your AI is the most powerful. - The desire to be the first to develop a new AI is very strong, both for companies and for countries. - Companies understand that the best-performing AI model can have a far higher price, and countries understand that they can get a lot of strategic and economic power by leading the race. - The people within AI labs tend to understand the risks, but they have strong incentives to focus on capabilities rather than safety. - Politicians often are not sufficiently aware of the risks, but even if they were, they might still not want to slow down AI development in their country because of the economic and strategic benefits. - We need an _international_ pause. - That's the whole point of our movement. -- **Lack of urgency**. - People [underestimate the pace of AI progress](/urgency). - Even experts in the field have been consistently surprised by how quickly AI has been improving. -- **Our psychology**. - Read more about how our [psychology makes it very difficult](/psychology-of-x-risk) for us to internalize how bad things can get. -- **The Overton window**. - Even though public support for AI regulations and slowing down AI development is high (see [polls & surveys](/polls-and-surveys)), many of the topics we discuss is still outside of the "Overton window", which means that they are considered too extreme to discuss. In 2023 this window has shifted quite a bit (the FLI Pause letter, Geoffrey Hinton quitting, the Safe.ai statement), but it's still too much of a taboo in political elite circles to seriously consider the possibility of pausing. Additionally, the existential risk from AI is still ridiculed by too many people. It is our job to move this overton window further. +The missing link is an organised political constituency that converts growing public concern into political pressure, making the governance proposals already on the table politically viable. PauseAI Global builds that constituency. We complement technical policy organisations who design specific proposals, by building the movement that demands their adoption. Together, we aim to hand decision-makers everything they need to act: a policy framework ready to implement and a democratic mandate that makes acting politically advantageous. -## How do we pause? +## How activation actually works -Because of the race dynamics mentioned above, we should not expect a local pause. -We need an _international pause_. -We can get there in two ways: +Effective organisations are communicating AI risks, but awareness alone does not produce political action. Social movement research shows that behaviour change requires community reinforcement: people activate when their peers activate, not by reading articles. -1. **An international treaty**. We [banned blinding laser weapons](https://en.wikipedia.org/wiki/Protocol_on_Blinding_Laser_Weapons) and [CFCs](https://en.wikipedia.org/wiki/Montreal_Protocol) through a treaty, so we can also ban superhuman AI through a treaty. These treaties are often initiated by a small group of countries, and then other countries join in. A [summit](/summit) is often the event where such a treaty is initiated and signed. We need to convince our politicians to initialize treaty negotiations. This requires public awareness, public support, and finally a feeling of responsibility on the part of the politicians. -2. **A unilateral supply-chain pause**. The AI supply chain is highly centralized. Virtually all AI chips used in training runs are designed by NVidia, produced by TSMC, which uses lithography machines by ASML. If any of these monopolies were to pause, the entire AI industry would pause. We can achieve this by lobbying these companies, and by lobbying the governments that have leverage over these companies. +PauseAI is the activation layer. We train organisers who build local teams and train new organisers within their own communities. This is a chain reaction model designed to compound. PauseCon conferences equip people with organising skills. Protests provide the activation energy that tips someone from concerned to committed. Our federation model enables national chapters to replicate the playbook independently. -## What do we do to get there? +Two conditions must hold for the chain reaction to fire: -1. **Grow the movement**. The larger our group is, the more we can do. We grow our movement through radical transparency, online community building, and fostering [local communities](/communities). We empower our volunteers to take action, and we make it easy for them to do so. -2. **Protests**. [Protests](/protests) are shown to increase public awareness and support. They are also a great way to recruit new members and improve community feeling. Because our subject is relatively new, even small protests can get very good [media coverage](/press). We encourage our members to [organize protests](/organizing-a-protest) in their own cities by providing them with the tools and knowledge they need. -3. **Lobbying**. _Every volunteer can become an amateur lobbyist_. We send [emails to politicians](/email-builder), we meet with them, and we stay in touch. We ask them to put AI risks on the agenda, draft a treaty. The core issue that we're trying to solve is a _lack of information_ and a _lack of [emotional internalization](/psychology-of-x-risk)_ and insight in the political sphere. -4. **Inform the public**. We make people aware of the [risks](/risks) we're facing and [what we can do](/action) to prevent them. We do this publicly by publishing articles, videos, images and posts on social media. We join podcasts, give talks, and organize events. We also reach out to partner organizations, influencers, educational institutions and other groups that can play a role in public awareness. Read about our [communication strategy](/communication-strategy). +1. **People must understand the severity** of the situation: that the race to build AGI poses catastrophic and existential risks to them and their families. +2. **People must believe action is possible**, that a pause is achievable, not utopian. -## What do we _not_ do? +The second is as important as the first. A lack of hope produces despair and paralysis, not movement. This is why we organise around a concrete, unifying demand: an international pause on frontier AI development. It is specific enough to mobilise around, broad enough to unite people with different concerns, and high-optionality by design. It directly counters the most powerful obstacle we face: the widespread, self-fulfilling belief that AI development simply cannot be stopped. -- **We don't tolerate violence**. We make it very clear to our members and the people joining our protests that we are a peaceful movement. We do not promote violence, and we do not tolerate it. We communicate this in our Protestor's Code of Conduct, our Discord rules, and our Volunteer agreement. The main reason for this is because we want to be the good guys, we want the public to be on our side. -- **We don't take sides in other topics**. We are a movement that focuses on an AI Pause. We do not discuss and take sides in other topics, even if (short-term) opportunities arise that may make this tempting to do. -- **We avoid dishonesty**. We need people to trust what we say, so we must do everything to promote honesty. +This is also why our communications discipline pairs the severity of the risk with a concrete call to action. Join us, contact your representative, back this proposal. We never leave people with alarm and no remedy. -## Let's get to it +## What it takes to get a pause -[Join](/join) PauseAI and [take action](/action)! +A pause on frontier AI development is an international agreement. International agreements of this kind require five conditions to hold simultaneously: + +1. **Political will** in multiple major-power governments sufficient that defection is unattractive. +2. **A technical and governance framework** ready to execute. +3. **A triggering window**, almost certainly event-driven, sufficient to break political inertia. +4. **Elite consensus** that pausing is the responsible position, separating expert defenders of the industry from its commercial defenders. +5. **A public mandate** visible enough to make signing politically rewarding rather than costly for the leaders who do it. + +PauseAI Global's primary lane covers conditions 1, 3 and 5: building the coordinated multi-jurisdiction public mandate, structuring the capacity to convert warning-shot windows into political momentum, and making the politics of signing favourable for governments that would act. + +Conditions 2 and 4 are the lane of policy organisations like MIRI, FLI and ControlAI. They develop the proposals, brief decision-makers, and build expert consensus, while we build the political conditions under which proposals get adopted. + +PauseAI cannot deliver a pause unilaterally. PauseAI Global can build the substrate that makes a pause possible when the other conditions are met. + +## Why a federation, specifically + +There are three plausible mechanisms by which public mandate could convert into a treaty: + +1. **Treaty convener.** A country with the diplomatic standing to call an international process, most plausibly the UK given its Bletchley precedent. +2. **Demonstration cascade.** One jurisdiction passes meaningful frontier restrictions and the precedent forces others to respond. +3. **Multi-jurisdiction simultaneous pressure.** Coordinated domestic pressure in several major countries at once, making the political economics of international agreement favourable to all of them at the same moment. + +The federation model is designed around the third mechanism, which we believe is the most likely to produce durable outcomes. A single-country organisation, however effective, cannot produce multi-jurisdiction simultaneous pressure. A coalition of national chapters running coordinated campaigns on shared timelines, with shared messaging and shared infrastructure, can. + +This is the specific structural claim that distinguishes our approach from country-level advocacy. The infrastructure we are now setting up, namely the [Federation Charter](https://pauseai-global.notion.site/pauseai-federation-charter), shared training pipelines, [coordinated lobbying tools](https://activoice.org/), and rapid response protocols, is what makes this repeatable at scale. + +## Why now + +Frontier labs are now using their own models to build the next generation, and there are credible reasons to believe recursive self-improvement could cross a critical threshold within the next 12 months. AI-driven economic disruption is accelerating and public anxiety is growing fast. + +Without a disciplined, catastrophic-risk-focused movement ready to channel that energy, it will either dissipate or default into incoherent backlash. We are currently the only global grassroots organisation positioned to fill that gap. The infrastructure must exist before major disruptions hit, not after. We are embedding in affected communities now: students facing a transformed job market, workers facing displacement, democracy advocates. We build relationships and credibility so that when disruptions intensify, we are already trusted voices with the organisational capacity to convert unfolding events into political momentum. + +## What we do + +Our activities serve three functions: reaching new audiences, activating them into organisers who replicate the model, and converting the resulting constituency into political pressure. + +**Train organisers.** PauseCon conferences are our primary capacity-building tool. PauseCon Brussels (February 2026) trained ~80 organisers from 15 countries in leadership, campaign strategy and communications. Participants are already delivering independently: new chapters launched, meetings with parliamentarians secured, campaigns running. We run two PauseCons per year, each producing a cohort of trained organisers who return to their countries equipped to grow the movement locally. + +**Scale the federation.** We provide standardised support infrastructure for national chapters: organising playbooks, fundraising guidance, coordinated lobbying tools, and seed funding for new chapters. A [tiered model](https://pauseai-global.notion.site/pauseai-federation-charter?pvs=74) (Local group → Chapter → Independent entity) provides differentiated support based on chapter maturity, while non-negotiable standards ([core values](/values), mission, [core positions](https://pauseai-global.notion.site/core-positions), [messaging guidelines](https://pauseai-global.notion.site/core-messaging-and-talking-points), [code of conduct](/code-of-conduct)) protect the brand and the movement's integrity. + +**Run coordinated campaigns.** Quarterly campaigns aligned across all chapters on shared themes and timelines. Each campaign is a strategic experiment testing what resonates, which communities mobilise, and what creates political pressure. Results inform the next one. The India Summit campaign in February 2026 generated roughly 2,000 targeted emails to representatives across 14 countries and a petition with over 4,000 signatures, while testing our ability to coordinate the federation at scale. + +**Build coalitions.** We build two types of partnerships. Movement-building coalitions give us access to communities already affected by AI: student unions, labour organisations, parent groups, democracy and rights advocates. Policy partnerships with organisations like MIRI and ControlAI ensure we advocate for rigorous, well-designed proposals and give us somewhere to route politicians who are ready for detailed briefings. + +**Apply political pressure.** Grassroots lobbying across 15+ countries, tiered by volunteer commitment. Anyone can send a personalised message to their representative in under a minute using our coordinated lobbying tool. More dedicated volunteers seek in-person meetings with their local representatives. Senior staff pursue high-profile meetings and route them toward trusted policy partners for detailed briefings. Each year includes at least two coordinated global protests to signal constituency size to politicians and media. + +**Maintain public visibility.** CEO media appearances, conference speaking, articles, press releases, video content and a sustained social media presence position PauseAI as a recognised voice of public concern about AGI. A warning shot activation protocol enables us to convert unfolding events into political moments within hours rather than weeks. + +## What we don't do + +**We don't tolerate violence or violent rhetoric.** We are a peaceful movement and make this clear in our [Protestor's Code of Conduct](/code-of-conduct), Discord rules, and Volunteer agreement. We are the good guys, and we want the public to be on our side. + +**We don't take sides on unrelated issues.** We are a movement focused on an AI pause. We do not take positions on topics outside our remit, even when short-term opportunities make it tempting. + +**We avoid dishonesty.** We need people to trust what we say. Honesty is non-negotiable, including about our own uncertainties and limitations. + +## Key uncertainties + +We are honest that several things could go wrong, and we manage them actively rather than ignoring them. + +**Federation coordination.** Our model depends on chapters aligning on shared campaigns and messaging while retaining local autonomy. The Federation Charter is the structural mitigation, and its enforcement is tested with every coordinated campaign. + +**Capture by adjacent movements.** Public concern about AI is currently diffuse and could consolidate around frames that don't address frontier risk. Our mitigation is messaging discipline and explicit commitment to the frontier-development frame. + +**Warning shot judgement.** The rapid response protocol depends on calls about which events merit activation. Activating for an event that doesn't land risks crying wolf; failing to activate for one that does risks missing the window. + +**Measurement.** Several of our success metrics (media reach, protest attendance, petition signatures) are proxies rather than direct measures of pause probability. Building better measurement is an active priority. + +## Get involved + +The movement has hundreds of new prospective volunteers signing up every month. Our bottleneck is the capacity to train, support and empower them. + +[Join PauseAI](/join) and take action. diff --git a/src/posts/uk-technology-secretary.md b/src/posts/uk-technology-secretary.md new file mode 100644 index 000000000..8b3aefba8 --- /dev/null +++ b/src/posts/uk-technology-secretary.md @@ -0,0 +1,37 @@ +--- +title: UK Technology Secretary overlooks risks posed by AI +slug: UK technology secretary +description: PauseAI UK has criticised Technology Secretary Liz Kendall after + she described calls to pause AI development as a “double betrayal” of British + talent and interests in a speech at the Royal United Services Institute on 28 + April. +image: /13-may-2024-parliament-square-cropped.jpg +date: 2026-04-30T16:57:00.000+01:00 +news: true +--- + +PauseAI UK says the Secretary of State for Science, Innovation and Technology, Liz Kendall, is overlooking the risks posed by AI systems after she said a pause would leave “this powerful technology to be exploited by other nations to their advantage and our disadvantage.” + +Pause advocates are not calling for Britain to abandon AI, nor for a unilateral halt while other countries race ahead. PauseAI is calling for an international agreement to pause the development of frontier systems until there is clear consensus that they can be built and governed safely. This would apply to only the most powerful AI systems, not systems designed for specific, narrow applications such as medical diagnoses.  + +Joseph Miller, Director of PauseAI UK, said: + +_No serious advocate is calling for Britain to shut down its AI industry unilaterally. We are calling for an international agreement and we expect the country that hosted the Bletchley Park Summit to lead it, not duck it._ + +_The scientific problem of making advanced AI reliably do what its operators intend remains unsolved. Hundreds of researchers, including Turing Award winners Geoffrey Hinton and Yoshua Bengio, have publicly warned that mitigating the risk of extinction from AI should be a global priority alongside pandemics and nuclear war._ + +**AI threatens the UK’s digital sovereignty** + +Ms Kendall did express concerns over the concentration of AI power, acknowledging that 70 percent of global AI computational resources are controlled by just five companies. + +PauseAI echoes this concern: if systems are created that can automate large parts of the economy, which is the direction in which we are currently headed, unprecedented economic and political power will be concentrated among a handful of tech companies. As Ms Kendall herself said, “We must shape this technology, not just be shaped by it.” + +The Technology Secretary's department houses the AI Security Institute (AISI), whose recent evaluation of Anthropic's Claude Mythos [found its hacking capabilities to be unprecedented](https://www.aisi.gov.uk/blog/our-evaluation-of-claude-mythos-previews-cyber-capabilities) after it became the first model to complete its 32-step simulated corporate network attack. Kanishka Narayan, the UK’s AI minister, has said UK businesses “should be worried” about the model’s ability to spot flaws in IT systems.  + +**AI poses unacceptable risks of catastrophe, according to a growing consensus** + +Professor Stuart Russell, the author of the standard textbook used in over 1,500 universities worldwide, [told MEPs in February](https://pauseai.substack.com/p/eu-parliamentarians-acknowledge-the) that “eight out of ten top AI researchers are convinced that the creation of artificial general intelligence will lead to a loss of control.”  + +A [House of Lords Library briefing](https://lordslibrary.parliament.uk/potential-future-risks-from-autonomous-ai-systems/) notes: “Passive loss of control could occur if humans stopped exercising appropriate oversight over AI systems. This could be because the AI decisions were too opaque, complex or fast to allow for meaningful oversight.” + +The next meeting of the international network of AI Security Institutes, chaired by the UK, will be held in July. “We hope to see AI safety prominent on the agenda. We speak for a growing number of concerned citizens who wish to see the UK government take a leading role in bringing us closer to an AI treaty that protects us all,” Miller said. diff --git a/src/posts/vacancies.md b/src/posts/vacancies.md index e7c08964e..b13eebde5 100644 --- a/src/posts/vacancies.md +++ b/src/posts/vacancies.md @@ -88,7 +88,7 @@ Send an email to vacancies@pauseai.info with the following: 5. Tell us your time zone, how many hours you can dedicate per week and when you can start -**Deadline: Sunday 3 May** +**Deadline: Sunday 10 May** _We review applicants on a rolling basis and reserve the right to close the call for applications early_ --- diff --git a/src/posts/values.md b/src/posts/values.md index 977e548b2..de3df2674 100644 --- a/src/posts/values.md +++ b/src/posts/values.md @@ -3,6 +3,8 @@ title: PauseAI Values description: How does PauseAI plan to achieve its mission? --- + + ## What do we want? Globally halt frontier AI development until we know how to do it safely and under democratic control. See our [proposal](/proposal). diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index bbad79117..a42b4dc3b 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -36,6 +36,7 @@ let eventFound: boolean let geoForNearbyEvent: GeoApiResponse | null = null $: hero = deLocalizeHref($page.url.pathname) === '/' + $: embed = $page.route.id?.startsWith('/embed/') ?? false onMount(async () => { document.documentElement.removeAttribute('data-waiting') @@ -128,54 +129,56 @@ Top -
- - {#if data.localeAlert} - - - {@html data.localeAlert.message} +{#if !embed} +
+ + {#if data.localeAlert} + + + {@html data.localeAlert.message} + + {/if} + + + + PauseAI's largest ever protest will be on Saturday February 28th in London. Sign up now! + + + HELP US PROTECT STATE SOVEREIGNTY ON AI REGULATION | ACT NOW » + + + 🎄 Holiday Matching Campaign! Help fund volunteer stipends for PauseAI + advocates. Join the Little Helpers campaign → - {/if} - - - PauseAI's largest ever protest will be on Saturday February 28th in London. Sign up now! - - - HELP US PROTECT STATE SOVEREIGNTY ON AI REGULATION | ACT NOW » - - - 🎄 Holiday Matching Campaign! Help fund volunteer stipends for PauseAI - advocates. Join the Little Helpers campaign → - - - - - - Brussels, Feb 23 - Join us outside the European Parliament to call for a global treaty - to pause frontier AI development. - - - {#if hero} -
- -
-
- {/if} -
+ -
+ + Brussels, Feb 23 - Join us outside the European Parliament to call for a global + treaty to pause frontier AI development. + + + {#if hero} +
+ +
+
+ {/if} +
+{/if} + +
{#if $page.route.id === '/sayno'} {#await import('./sayno/SelfieUX.svelte') then module} @@ -183,7 +186,7 @@ {/await} {/if} - {#if !hero} + {#if !hero && !embed}
{/if} @@ -193,26 +196,30 @@ -
+ {#if !embed} +
+ {/if}
- +{#if !embed} + - + -{#if !['/', '/communities', '/outcomes', '/pdoom', '/quotes', '/dear-sir-demis-2025'].includes(deLocalizeHref($page.url.pathname))} - -{/if} + {#if !['/', '/communities', '/outcomes', '/pdoom', '/quotes', '/dear-sir-demis-2025'].includes(deLocalizeHref($page.url.pathname))} + + {/if} - + +{/if} diff --git a/src/routes/press/+page.server.ts b/src/routes/press/+page.server.ts deleted file mode 100644 index 659c6cb87..000000000 --- a/src/routes/press/+page.server.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { fetchPressCoverage } from './notion.server' -import type { PageServerLoad } from './$types' -import { env } from '$env/dynamic/private' - -export const prerender = true -export const load: PageServerLoad = async () => { - try { - console.log('NOTION_API_KEY present:', !!env.NOTION_API_KEY) - const { coverage, typeOrder, outletOrder } = await fetchPressCoverage() - console.log(`Fetched ${coverage.length} press coverage items.`) - return { coverage, typeOrder, outletOrder } - } catch (e) { - console.error('Failed to fetch press coverage:', e) - return { coverage: [], typeOrder: [], outletOrder: [] } - } -} diff --git a/src/routes/press/+page.svelte b/src/routes/press/+page.svelte deleted file mode 100644 index 020538cbc..000000000 --- a/src/routes/press/+page.svelte +++ /dev/null @@ -1,74 +0,0 @@ - - - - -
-
-

{title || 'Press & Media'}

-
- -

- If you want to contact us, use our Contact form. -

-
-

Media Coverage

- -
- -
-

Logo, materials

-

- Our logo and other material can be found in - this Google Drive folder. -

-

- If you want to create PauseAI-related material yourself, you can use our brand color - #FF9416 and the fonts Saira Condensed (700), Montserrat Black, and - Roboto Slab (300, 700). -

-
-
- - diff --git a/src/routes/press/meta.ts b/src/routes/press/meta.ts deleted file mode 100644 index 243de9ba1..000000000 --- a/src/routes/press/meta.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { StrictPost } from '$lib/types' - -export const meta: StrictPost = { - title: 'Press Coverage & Materials', - description: 'Media coverage of PauseAI protests and our logo/brand materials.', - date: '2024-05-15', // You can adjust this to whatever baseline date you want - slug: 'press', - categories: [] -} diff --git a/src/routes/quotes/+page.svelte b/src/routes/quotes/+page.svelte index 24212b30b..ac64dd2f1 100644 --- a/src/routes/quotes/+page.svelte +++ b/src/routes/quotes/+page.svelte @@ -1,3 +1,4 @@ +